feat(websocket)!: Implement WebSocket connection and event handling (#82)

Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #82
Co-authored-by: Janis <janis.e.20@gmx.de>
Co-committed-by: Janis <janis.e.20@gmx.de>
This commit is contained in:
2025-11-23 16:11:46 +01:00
committed by Janis
parent 1edb3bfd89
commit 8ca909db52
41 changed files with 2566 additions and 2763 deletions

View File

@@ -2,14 +2,18 @@ package model.sessions
import de.knockoutwhist.events.player.{RequestCardEvent, RequestTieChoiceEvent, RequestTrumpSuitEvent}
import de.knockoutwhist.utils.events.SimpleEvent
import logic.game.GameLobby
import model.users.User
import play.api.libs.json.JsObject
import java.util.UUID
import java.util.concurrent.locks.{Lock, ReentrantLock}
import java.util.concurrent.locks.ReentrantLock
import scala.util.Try
class UserSession(val user: User, val host: Boolean) extends PlayerSession {
var canInteract: Option[InteractionType] = None
class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) extends PlayerSession {
val lock: ReentrantLock = ReentrantLock()
var canInteract: Option[InteractionType] = None
var websocketActor: Option[UserWebsocketActor] = None
override def updatePlayer(event: SimpleEvent): Unit = {
event match {
@@ -27,9 +31,21 @@ class UserSession(val user: User, val host: Boolean) extends PlayerSession {
override def id: UUID = user.id
override def name: String = user.name
def resetCanInteract(): Unit = {
canInteract = None
}
def handleWebResponse(eventType: String, data: JsObject): Unit = {
lock.lock()
Try {
eventType match {
case "Ping" =>
// No action needed for Ping
()
}
}
lock.unlock()
}
}