LevelUp feature.

This commit is contained in:
Thomas Andres Gomez 2025-03-07 15:49:36 +01:00
parent 84515e6d57
commit 16b2b49f03
75 changed files with 2532 additions and 777 deletions

View file

@ -1,17 +0,0 @@
package com.pixelized.server.lwa.extention
import com.pixelized.shared.lwa.protocol.websocket.Message
import io.ktor.websocket.Frame
import io.ktor.websocket.readText
import kotlinx.serialization.json.Json
fun Json.decodeFromFrame(frame: Frame.Text): Message {
val json = frame.readText()
return decodeFromString<Message>(json)
}
fun Json.encodeToFrame(message: Message): Frame {
val json = encodeToString(message)
return Frame.Text(text = json)
}

View file

@ -204,6 +204,5 @@ class CampaignService(
)
}
}
}
}

View file

@ -1,8 +1,6 @@
package com.pixelized.server.lwa.server
import com.pixelized.server.lwa.extention.decodeFromFrame
import com.pixelized.server.lwa.extention.encodeToFrame
import com.pixelized.server.lwa.server.rest.alteration.getActiveAlteration
import com.pixelized.server.lwa.server.rest.alteration.getAlteration
import com.pixelized.server.lwa.server.rest.alteration.putActiveAlteration
@ -17,6 +15,7 @@ import com.pixelized.server.lwa.server.rest.character.getCharacter
import com.pixelized.server.lwa.server.rest.character.getCharacters
import com.pixelized.server.lwa.server.rest.character.putCharacter
import com.pixelized.shared.lwa.SERVER_PORT
import com.pixelized.shared.lwa.protocol.websocket.Message
import com.pixelized.shared.lwa.sharedModuleDependencies
import io.ktor.serialization.kotlinx.json.json
import io.ktor.server.application.install
@ -35,6 +34,7 @@ import io.ktor.server.websocket.pingPeriod
import io.ktor.server.websocket.timeout
import io.ktor.server.websocket.webSocket
import io.ktor.websocket.Frame
import io.ktor.websocket.readText
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@ -82,15 +82,22 @@ class LocalServer {
val job = launch {
// send local message to the clients
engine.webSocket.collect { message ->
val frame = json.encodeToFrame(message)
send(frame)
val data = json.encodeToString(message)
val frame = Frame.Text(text = data)
try {
send(frame)
} catch (exception : Exception) {
// TODO
println("WebSocket exception: ${exception.localizedMessage}")
}
}
}
runCatching {
// watching for clients incoming message
incoming.consumeEach { frame ->
if (frame is Frame.Text) {
val message = Json.decodeFromFrame(frame = frame)
val data = frame.readText()
val message = json.decodeFromString<Message>(data)
// log the message
engine.handle(message)
// broadcast to clients the message
@ -98,6 +105,7 @@ class LocalServer {
}
}
}.onFailure { exception ->
// TODO
println("WebSocket exception: ${exception.localizedMessage}")
}.also {
job.cancel()