Files
view-mate/app-host/build.gradle.kts
T
Hermes Agent 9271517b3c feat: WS-протокол очки↔телефон + app-host (JVM Ktor-сервер)
lib-core (commonMain):
- Messages.kt: GlassesToHost (hello, gesture, glasses_status, playback_position, glasses_off)
- HostToGlasses.kt: Welcome, SetMode, MediaCommandMsg, PlayVideo, AssistantStateMsg, ShowText, ChatSessionMsg
- AssistantState enum (IDLE/LISTENING/THINKING/SPEAKING)
- round-trip тесты сериализации обоих направлений

app-host (переведён с Android на JVM):
- Ktor WS-сервер 0.0.0.0:8080/ws/glasses — очки подключаются как WS-клиенты
- GlassesHub: broadcast всем очкам, счётчик подключений (StateFlow)
- консольный ввод: play/mode/state/text/session/cmd/exit — команды от «телефона»
- логирование всех сообщений обоих направлений
- HostServerTest: hello→welcome, счётчик подключений

Проверено: сборка зелёная, 21 тест 0 провалов, живой WS-цикл (hello→welcome, gesture, статус, позиция, glasses_off)
2026-08-11 12:35:30 +03:00

32 lines
1.0 KiB
Kotlin

plugins {
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlinx.serialization)
application
}
kotlin { jvmToolchain(17) }
dependencies {
implementation(project(":lib-core"))
implementation("io.ktor:ktor-server-core:3.5.2")
implementation("io.ktor:ktor-server-netty:3.5.2")
implementation("io.ktor:ktor-server-websockets:3.5.2")
implementation("io.ktor:ktor-server-content-negotiation:3.5.2")
implementation("io.ktor:ktor-serialization-kotlinx-json:3.5.2")
implementation("org.slf4j:slf4j-simple:2.0.17")
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.coroutines.core)
testImplementation(kotlin("test"))
testImplementation("io.ktor:ktor-server-test-host:3.5.2")
testImplementation("io.ktor:ktor-client-core:3.5.2")
testImplementation("io.ktor:ktor-client-websockets:3.5.2")
testImplementation("io.ktor:ktor-client-cio:3.5.2")
}
application { mainClass.set("pw.binom.viewmate.host.MainKt") }
tasks.test {
useJUnitPlatform()
}