58 lines
1.7 KiB
Scala
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()
|
|
}
|
|
|
|
}
|