feat(ui): Websocket

Added simple websocket. Serverside websocket logic isnt in the usersession
This commit is contained in:
LQ63
2025-11-21 17:11:16 +01:00
committed by Janis
parent 2bc50664e0
commit 09cc96141d
4 changed files with 74 additions and 1 deletions

View File

@@ -0,0 +1,21 @@
package actor
import org.apache.pekko.actor.{Actor, ActorRef}
import org.apache.pekko.http.scaladsl.model.ContentRange.Other
class KnockOutWebSocketActor(
out: ActorRef,
) extends Actor {
def receive: Receive = {
case msg: String =>
out ! s"Received your message: ${msg}"
case other: Other =>
println(s"Received unknown message: $other")
}
def sendJsonToClient(json: String): Unit = {
println("Received event from Controller")
out ! json
}
}

View File

@@ -0,0 +1,30 @@
package controllers
import actor.KnockOutWebSocketActor
import org.apache.pekko.actor.{ActorRef, ActorSystem, Props}
import org.apache.pekko.stream.Materializer
import play.api.*
import play.api.libs.streams.ActorFlow
import play.api.mvc.*
import javax.inject.*
@Singleton
class WebsocketController @Inject()(
cc: ControllerComponents,
)(implicit system: ActorSystem, mat: Materializer) extends AbstractController(cc) {
object KnockOutWebSocketActorFactory {
def create(out: ActorRef) = {
Props(new KnockOutWebSocketActor(out))
}
}
def socket() = WebSocket.accept[String, String] { request =>
ActorFlow.actorRef { out =>
println("Connect received")
KnockOutWebSocketActorFactory.create(out)
}
}
}

View File

@@ -39,3 +39,6 @@ POST /game/:id/returnToLobby controllers.IngameController.returnT
# Polling
GET /polling/:gameId controllers.PollingController.polling(gameId: String)
# Websocket
GET /websocket controllers.WebsocketController.socket()

View File

@@ -664,4 +664,23 @@ function sendPlayCardRequest(jsonObj, gameId, cardobject, dog) {
})
})
}
const ws = new WebSocket("ws://localhost:9000/websocket");
ws.onopen = (event) => {
console.log("WebSocket connection established!");
ws.send("Client is now connected and ready.");
};
ws.onmessage = (event) => {
console.log("SERVER RESPONSE:", event.data);
};
ws.onerror = (error) => {
console.error("WebSocket Error:", error);
};
ws.onclose = (event) => {
if (event.wasClean) {
console.log(`Connection closed cleanly, code=${event.code} reason=${event.reason}`);
} else {
console.warn('Connection died unexpectedly.');
}
};