Add basic network feature.

Basic implementation of a WebSocket protocol with JSON.

Note : obfuscation & release build are deactivated again. Netty (needed for Ktor server) is a nightmare to build in release with or without proguard.
Spend more time until now on project configuration that in actual prototyping.
This commit is contained in:
Thomas Andres Gomez 2024-11-08 18:58:47 +01:00
parent ba0cc30a1a
commit 0e5fee6771
22 changed files with 958 additions and 161 deletions

View file

@ -3,19 +3,58 @@ package com.pixelized.desktop.lwa
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Stable
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.ApplicationScope
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.rememberWindowState
import com.pixelized.desktop.lwa.navigation.MainNavHost
import com.pixelized.desktop.lwa.theme.LwaTheme
import org.jetbrains.compose.ui.tooling.preview.Preview
val LocalWindowController = compositionLocalOf<WindowController> {
error("Local Window Controller is not yet ready")
}
@Stable
data class WindowController(
private val onCloseRequest: () -> Unit
) {
fun close() = onCloseRequest()
}
@Composable
@Preview
fun App() {
LwaTheme {
Surface(
modifier = Modifier.fillMaxSize()
fun ApplicationScope.App() {
val controller = remember {
WindowController(
onCloseRequest = ::exitApplication
)
}
CompositionLocalProvider(
LocalWindowController provides controller,
) {
Window(
onCloseRequest = {
controller.close()
},
state = rememberWindowState(
width = 320.dp + 64.dp,
height = 900.dp,
),
title = "LwaCharacterSheet",
) {
MainNavHost()
LwaTheme {
Surface(
modifier = Modifier.fillMaxSize()
) {
MainNavHost()
}
}
}
}
}