Добавлена поддержка подключения по протоколу WebSocket
Этот коммит содержится в:
родитель
d404256023
Коммит
50c521c45a
@ -9,6 +9,7 @@ plugins {
|
||||
alias(libs.plugins.androidApplication)
|
||||
alias(libs.plugins.jetbrainsCompose)
|
||||
alias(libs.plugins.compose.compiler)
|
||||
alias(libs.plugins.kotlinSerialization)
|
||||
}
|
||||
|
||||
kotlin {
|
||||
@ -55,6 +56,8 @@ kotlin {
|
||||
implementation(compose.components.uiToolingPreview)
|
||||
implementation(libs.androidx.lifecycle.viewmodel)
|
||||
implementation(libs.androidx.lifecycle.runtime.compose)
|
||||
implementation(libs.ktor.client.core)
|
||||
implementation(libs.ktor.serialization.kotlinx.json)
|
||||
implementation(libs.navigation.compose)
|
||||
}
|
||||
desktopMain.dependencies {
|
||||
|
@ -12,6 +12,7 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.mutableStateListOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
@ -20,10 +21,18 @@ import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.navigation.NavController
|
||||
import cit_is_bot.composeapp.generated.resources.Res
|
||||
import cit_is_bot.composeapp.generated.resources.baseline_add_24
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.websocket.WebSockets
|
||||
import io.ktor.client.plugins.websocket.receiveDeserialized
|
||||
import io.ktor.client.plugins.websocket.webSocket
|
||||
import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import ru.csasq.cit_is_bot.ui.components.SwitchButton
|
||||
import ru.csasq.cit_is_bot.ui.dialogs.ScenarioDialog
|
||||
|
||||
@Serializable
|
||||
data class Scenario(
|
||||
val id: Int? = null,
|
||||
val name: String,
|
||||
@ -32,11 +41,6 @@ data class Scenario(
|
||||
val isEnabled: Boolean,
|
||||
)
|
||||
|
||||
val scenarioList = listOf(
|
||||
Scenario(1, "Текущее состояние сотрудников", "0 11 * * 1-5", "1 сообщение", true),
|
||||
Scenario(2, "Планы на обед", "45 11 * * 1-5", "2 сообщения", false),
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun ScenariosScreen(
|
||||
navController: NavController,
|
||||
@ -56,6 +60,21 @@ fun ScenariosScreen(
|
||||
previousValue = it
|
||||
}
|
||||
}
|
||||
val scenarioList = remember {
|
||||
mutableStateListOf<Scenario>()
|
||||
}
|
||||
val client = HttpClient {
|
||||
install(WebSockets) {
|
||||
contentConverter = KotlinxWebsocketSerializationConverter(Json)
|
||||
}
|
||||
}
|
||||
LaunchedEffect(false) {
|
||||
client.webSocket(
|
||||
urlString = "wss://cit.csasq.ru/ws/scripts",
|
||||
) {
|
||||
scenarioList.addAll(receiveDeserialized<List<Scenario>>())
|
||||
}
|
||||
}
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
@ -93,6 +112,7 @@ fun ScenariosScreen(
|
||||
expanded = floatingActionButtonExpandedState.value,
|
||||
)
|
||||
}
|
||||
|
||||
scenarioList.forEach {
|
||||
val scenarioSwitchState = remember {
|
||||
mutableStateOf(it.isEnabled)
|
||||
|
@ -16,6 +16,7 @@ compose-plugin = "1.6.11"
|
||||
junit = "4.13.2"
|
||||
kotlin = "2.0.20"
|
||||
kotlinx-coroutines = "1.8.1"
|
||||
ktor = "3.0.0-wasm2"
|
||||
navigationCompose = "2.7.7"
|
||||
navigationComposeVersion = "2.7.0-alpha07"
|
||||
|
||||
@ -35,6 +36,8 @@ androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", nam
|
||||
androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
||||
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
|
||||
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
|
||||
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
||||
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
||||
navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationComposeVersion" }
|
||||
|
||||
[plugins]
|
||||
@ -42,4 +45,5 @@ androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||
androidLibrary = { id = "com.android.library", version.ref = "agp" }
|
||||
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
|
||||
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||||
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -25,6 +25,7 @@ dependencyResolutionManagement {
|
||||
}
|
||||
}
|
||||
mavenCentral()
|
||||
maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental")
|
||||
}
|
||||
}
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user