Kick button, show player turn, can't join if 2-nd player alreay join

This commit is contained in:
Anibus
2020-11-22 12:39:56 +03:00
parent 6398f44d18
commit f94bf511a3
5 changed files with 100 additions and 41 deletions
+20 -4
View File
@@ -1,6 +1,6 @@
package actors
import actors.UserActor.{GetName, HostLeaveLobby, RefreshLobbyInfo, SetUserAsHost, SetUserAsSecondPlayer}
import actors.UserActor.{GetName, HostLeaveLobby, LobbyFatal, RefreshLobbyInfo, SecondPlayerLeaveLobby, SetUserAsHost, SetUserAsSecondPlayer}
import akka.actor._
import akka.event.LoggingReceive
import akka.pattern.ask
@@ -29,6 +29,8 @@ class UserActor(out: ActorRef,
}
}
implicit val userInfoWrites: OWrites[UserInfo] = Json.writes[UserInfo]
implicit val lobbyWrites: OWrites[LobbyInfo] = Json.writes[LobbyInfo]
implicit val lobbyResponseWrites: Writes[List[LobbyInfo]] = new Writes[List[LobbyInfo]] {
@@ -67,12 +69,20 @@ class UserActor(out: ActorRef,
case HostLeaveLobby =>
logger.info(s"Host leave from lobby ${sender.path.name}")
out ! Json.obj("type" -> "hostLeaveLobby")
out ! Json.obj("type" -> "lobbyError", "error" -> "Host leave lobby")
case SecondPlayerLeaveLobby =>
logger.info(s"Second player lobby ${sender.path.name}")
out ! Json.obj("type" -> "lobbyError", "error" -> "Second player leave lobby")
case RefreshLobbyInfo(lobbyInfo) =>
logger.trace(s"Refresh lobby info: $lobbyInfo")
out ! Json.obj("type" -> "refreshLobby", "lobby" -> lobbyInfo)
case LobbyFatal(message) => // После этого сообщения выход из лобби
logger.warn(s"Lobby error: $message")
out ! Json.obj("type" -> "lobbyError", "error" -> message)
case json: JsValue =>
// Обрабатываем запросы с фронта
@@ -104,6 +114,9 @@ class UserActor(out: ActorRef,
case Some("setNotReady") =>
lobbieActor.foreach(lobby => lobby ! SetNotReady)
case Some("kickSecondPlayer") =>
lobbieActor.foreach(lobby => lobby ! KickSecondPlayer)
case Some("joinDecider") =>
val lobbyActorName = (json \ "lobbyActorName").as[String]
logger.info(s"Player ${self.path.name} join lobby $lobbyActorName")
@@ -122,7 +135,6 @@ class UserActor(out: ActorRef,
}
case Failure(ex) => logger.error("Received error", ex)
}
}
}
@@ -170,10 +182,14 @@ object UserActor {
case class SetUserAsSecondPlayer(lobbyInfo: LobbyInfo)
case class SetUserAsObs(lobbyInfo: LobbyInfo)
case class LobbyFatal(message: String)
case object CreateLobby
case object HostLeaveLobby
case object SecondPlayerLeaveLobby
}