diff --git a/knockoutwhistweb/app/components/WebApplicationConfiguration.scala b/knockoutwhistweb/app/components/WebApplicationConfiguration.scala index 8226cf8..2f13029 100644 --- a/knockoutwhistweb/app/components/WebApplicationConfiguration.scala +++ b/knockoutwhistweb/app/components/WebApplicationConfiguration.scala @@ -1,13 +1,12 @@ package components -import controllers.WebUI import de.knockoutwhist.components.DefaultConfiguration import de.knockoutwhist.ui.UI import de.knockoutwhist.utils.events.EventListener class WebApplicationConfiguration extends DefaultConfiguration { - override def uis: Set[UI] = super.uis + WebUI - override def listener: Set[EventListener] = super.listener + WebUI + override def uis: Set[UI] = Set() + override def listener: Set[EventListener] = Set() } diff --git a/knockoutwhistweb/app/controllers/HomeController.scala b/knockoutwhistweb/app/controllers/HomeController.scala index ff7ae53..e4f5bb6 100644 --- a/knockoutwhistweb/app/controllers/HomeController.scala +++ b/knockoutwhistweb/app/controllers/HomeController.scala @@ -7,7 +7,7 @@ import de.knockoutwhist.control.GameState.{InGame, Lobby, SelectTrump, TieBreak} import de.knockoutwhist.control.controllerBaseImpl.BaseGameLogic import di.KnockOutWebConfigurationModule import logic.PodGameManager -import model.sessions.AdvancedSession +import model.sessions.SimpleSession import play.api.mvc.* import play.api.* import play.twirl.api.Html @@ -61,8 +61,8 @@ class HomeController @Inject()(val controllerComponents: ControllerComponents) e } } else { val session = PodGameManager.identify(uuid).get - val player = session.asInstanceOf[AdvancedSession].player - val logic = WebUI.logic.get.asInstanceOf[BaseGameLogic] + val player = session.asInstanceOf[SimpleSession].player + val logic = null if (logic.getCurrentState == Lobby) { } else if (logic.getCurrentState == InGame) { diff --git a/knockoutwhistweb/app/controllers/UserController.scala b/knockoutwhistweb/app/controllers/UserController.scala index 5e566ea..8b32c2e 100644 --- a/knockoutwhistweb/app/controllers/UserController.scala +++ b/knockoutwhistweb/app/controllers/UserController.scala @@ -8,7 +8,7 @@ import de.knockoutwhist.control.controllerBaseImpl.BaseGameLogic import di.KnockOutWebConfigurationModule import logic.PodGameManager import logic.user.{SessionManager, UserManager} -import model.sessions.AdvancedSession +import model.sessions.SimpleSession import play.api.* import play.api.mvc.* import play.twirl.api.Html diff --git a/knockoutwhistweb/app/controllers/WebUI.scala b/knockoutwhistweb/app/controllers/WebUI.scala deleted file mode 100644 index 4015d64..0000000 --- a/knockoutwhistweb/app/controllers/WebUI.scala +++ /dev/null @@ -1,50 +0,0 @@ -package controllers - -import de.knockoutwhist.cards.{Card, CardValue, Hand, Suit} -import de.knockoutwhist.control.GameLogic -import de.knockoutwhist.control.GameState.{InGame, Lobby} -import de.knockoutwhist.control.controllerBaseImpl.BaseGameLogic -import de.knockoutwhist.events.* -import de.knockoutwhist.events.global.GameStateChangeEvent -import de.knockoutwhist.player.AbstractPlayer -import de.knockoutwhist.rounds.Match -import de.knockoutwhist.ui.UI -import de.knockoutwhist.utils.CustomThread -import de.knockoutwhist.utils.events.{EventListener, SimpleEvent} -import logic.PodGameManager -import model.sessions.AdvancedSession - -object WebUI extends CustomThread with EventListener with UI { - - setName("WebUI") - - var init = false - var logic: Option[GameLogic] = None - - var latestOutput: String = "" - - override def instance: CustomThread = WebUI - - override def listen(event: SimpleEvent): Unit = { - event match { - case event: GameStateChangeEvent => - if (event.oldState == Lobby && event.newState == InGame) { - val match1: Option[Match] = logic.get.asInstanceOf[BaseGameLogic].getCurrentMatch - val players: List[AbstractPlayer] = match1.get.totalplayers - players.map(player => PodGameManager.addSession(AdvancedSession(player.id, player))) - } - case _ => - } - } - - override def initial(gameLogic: GameLogic): Boolean = { - if (init) { - return false - } - init = true - this.logic = Some(gameLogic) - start() - true - } - -} diff --git a/knockoutwhistweb/app/model/game/GameLobby.scala b/knockoutwhistweb/app/model/game/GameLobby.scala new file mode 100644 index 0000000..3e4767b --- /dev/null +++ b/knockoutwhistweb/app/model/game/GameLobby.scala @@ -0,0 +1,14 @@ +package model.game + +import de.knockoutwhist.control.GameLogic +import de.knockoutwhist.utils.events.{EventListener, SimpleEvent} + +class GameLobby(val logic: GameLogic) extends EventListener{ + logic.addListener(this) + logic.createSession() + + + override def listen(event: SimpleEvent): Unit = { + + } +} diff --git a/knockoutwhistweb/app/model/sessions/PlayerSession.scala b/knockoutwhistweb/app/model/sessions/PlayerSession.scala index 95c39f5..87248f3 100644 --- a/knockoutwhistweb/app/model/sessions/PlayerSession.scala +++ b/knockoutwhistweb/app/model/sessions/PlayerSession.scala @@ -1,5 +1,6 @@ package model.sessions +import de.knockoutwhist.player.AbstractPlayer import de.knockoutwhist.utils.events.SimpleEvent import java.util.UUID @@ -8,6 +9,7 @@ trait PlayerSession { def id: UUID def name: String + def player: AbstractPlayer def updatePlayer(event: SimpleEvent): Unit } diff --git a/knockoutwhistweb/app/model/sessions/AdvancedSession.scala b/knockoutwhistweb/app/model/sessions/SimpleSession.scala similarity index 74% rename from knockoutwhistweb/app/model/sessions/AdvancedSession.scala rename to knockoutwhistweb/app/model/sessions/SimpleSession.scala index 7a2fe66..a4c7007 100644 --- a/knockoutwhistweb/app/model/sessions/AdvancedSession.scala +++ b/knockoutwhistweb/app/model/sessions/SimpleSession.scala @@ -5,7 +5,7 @@ import de.knockoutwhist.utils.events.SimpleEvent import java.util.UUID -case class AdvancedSession(id: UUID, player: AbstractPlayer) extends PlayerSession { +case class SimpleSession(id: UUID, player: AbstractPlayer) extends PlayerSession { def name: String = player.name diff --git a/knockoutwhistweb/app/model/sessions/UserSession.scala b/knockoutwhistweb/app/model/sessions/UserSession.scala new file mode 100644 index 0000000..1019b59 --- /dev/null +++ b/knockoutwhistweb/app/model/sessions/UserSession.scala @@ -0,0 +1,8 @@ +package model.sessions + +import de.knockoutwhist.player.AbstractPlayer +import java.util.UUID + +class UserSession(id: UUID, player: AbstractPlayer) extends SimpleSession(id, player) { + +} diff --git a/knockoutwhistweb/app/util/GameUtil.scala b/knockoutwhistweb/app/util/GameUtil.scala new file mode 100644 index 0000000..b2caf50 --- /dev/null +++ b/knockoutwhistweb/app/util/GameUtil.scala @@ -0,0 +1,29 @@ +package util + +import scala.util.Random + +object GameUtil { + + private val CharPool: String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + private val CodeLength: Int = 6 + private val MaxRepetition: Int = 2 + private val random = new Random() + + def generateCode(): String = { + val freq = Array.fill(CharPool.length)(0) + val code = new StringBuilder(CodeLength) + + for (_ <- 0 until CodeLength) { + var index = random.nextInt(CharPool.length) + // Pick a new character if it's already used twice + while (freq(index) >= MaxRepetition) { + index = random.nextInt(CharPool.length) + } + freq(index) += 1 + code.append(CharPool.charAt(index)) + } + + code.toString() + } + +}