Files
KnockOutWhist-Web/knockoutwhistweb/app/model/sessions/UserSession.scala
LQ63 6402df43b1 fix(ui): Websocket
Fixed startGame to be correctly implemented
2025-11-27 08:00:32 +01:00

58 lines
1.7 KiB
Scala

package model.sessions
import de.knockoutwhist.events.player.{RequestCardEvent, RequestTieChoiceEvent, RequestTrumpSuitEvent}
import de.knockoutwhist.utils.events.SimpleEvent
import logic.PodManager
import logic.game.GameLobby
import model.users.User
import play.api.libs.json.Format.GenericFormat
import play.api.libs.json.{JsError, JsObject, JsResult, JsSuccess, JsValue}
import java.util.UUID
import java.util.concurrent.locks.ReentrantLock
import scala.util.Try
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 {
case event: RequestTrumpSuitEvent =>
canInteract = Some(InteractionType.TrumpSuit)
case event: RequestTieChoiceEvent =>
canInteract = Some(InteractionType.TieChoice)
case event: RequestCardEvent =>
if (event.player.isInDogLife) canInteract = Some(InteractionType.DogCard)
else canInteract = Some(InteractionType.Card)
case _ =>
}
websocketActor.foreach(_.transmitEventToClient(event, gameLobby))
}
override def id: UUID = user.id
override def name: String = user.name
def resetCanInteract(): Unit = {
canInteract = None
}
def handleWebResponse(eventType: String, data: JsObject, user: User, gameLobby: GameLobby): Unit = {
lock.lock()
Try {
eventType match {
case "Ping" =>
// No action needed for Ping
()
case "Start Game" =>
println("INSIDE HANDLE WEB RESPONSE" + data)
gameLobby.startGame(user)
}
}
lock.unlock()
}
}