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)
This commit is contained in:
+23
-42
@@ -1,50 +1,31 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
alias(libs.plugins.kotlin.android)
|
||||
alias(libs.plugins.kotlin.jvm)
|
||||
alias(libs.plugins.kotlinx.serialization)
|
||||
alias(libs.plugins.compose.compiler)
|
||||
application
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "pw.binom.viewmate.host"
|
||||
compileSdk = 35
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "pw.binom.viewmate.host"
|
||||
minSdk = 26
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "0.1.0"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
compose = true
|
||||
}
|
||||
|
||||
}
|
||||
kotlin { jvmToolchain(17) }
|
||||
|
||||
dependencies {
|
||||
implementation("androidx.appcompat:appcompat:1.3.0")
|
||||
implementation("androidx.core:core-ktx:1.7.0")
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(platform(libs.androidx.compose.bom))
|
||||
implementation(libs.android.material3)
|
||||
implementation(libs.kotlinx.coroutines.android)
|
||||
implementation(libs.kotlinx.serialization.json)
|
||||
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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user