Files
kotlin-server-web-undertow/src/jvmMain/kotlin/nl/astraeus/tmpl/web/WebsockerHandler.kt
rnentjes 88d09ecdbf Refactor package structure and add web components.
Reorganized Kotlin package structure under 'nl.astraeus' and removed 'gradle.properties' file. Updated '.gitignore' to exclude 'gradle.properties'. Added new web functionalities including ID generation, websocket and HTTP request handling to support dynamic web content delivery. Adjusted server configuration and modified build version.
2024-12-01 11:59:26 +01:00

56 lines
1.7 KiB
Kotlin

package nl.astraeus.tmpl.web
import io.undertow.Handlers.websocket
import io.undertow.server.HttpHandler
import io.undertow.server.HttpServerExchange
import io.undertow.websockets.WebSocketConnectionCallback
import io.undertow.websockets.core.AbstractReceiveListener
import io.undertow.websockets.core.BufferedBinaryMessage
import io.undertow.websockets.core.BufferedTextMessage
import io.undertow.websockets.core.WebSocketChannel
import io.undertow.websockets.extensions.PerMessageDeflateHandshake
import io.undertow.websockets.spi.WebSocketHttpExchange
import kotlin.also
class WebsocketHandler : AbstractReceiveListener(), WebSocketConnectionCallback {
// var user: String? = null
override fun onConnect(exchange: WebSocketHttpExchange, channel: WebSocketChannel) {
channel.receiveSetter.set(this)
channel.resumeReceives()
}
override fun onFullTextMessage(channel: WebSocketChannel, message: BufferedTextMessage) {
val data = message.data
TODO("handle text message")
}
override fun onFullBinaryMessage(channel: WebSocketChannel, message: BufferedBinaryMessage?) {
message?.data?.also { data ->
var length = 0
for (buffer in data.resource) {
length += buffer.remaining()
}
val bytes = ByteArray(length)
var offset = 0
for (buffer in data.resource) {
buffer.get(bytes, offset, buffer.remaining())
offset += buffer.remaining()
}
TODO("handle binary message")
}
}
}
object WebsocketConnectHandler : HttpHandler {
override fun handleRequest(exchange: HttpServerExchange) {
val handshakeHandler = websocket(WebsocketHandler())
handshakeHandler.addExtension(PerMessageDeflateHandshake())
handshakeHandler.handleRequest(exchange)
}
}