From 750ea483b677a8d1295e13823a3f1d4003379872 Mon Sep 17 00:00:00 2001 From: "v.holodov" Date: Wed, 5 Oct 2022 23:22:08 +0300 Subject: [PATCH] 2 new map, fix map name 4+ players --- app/actors/LobbieActor.scala | 9 -- app/actors/UserActor.scala | 18 +-- app/assets/images/maps/4p_chaos_platenau.jpg | Bin 0 -> 45217 bytes app/assets/images/maps/4p_snowblind.jpg | Bin 0 -> 5159 bytes app/assets/javascripts/index.js | 8 +- app/controllers/AdminController.scala | 16 +- app/controllers/HomeController.scala | 6 +- app/views/index.scala.html | 2 +- conf/application.conf | 153 ++++++++++++++----- conf/routes | 2 +- 10 files changed, 146 insertions(+), 68 deletions(-) create mode 100644 app/assets/images/maps/4p_chaos_platenau.jpg create mode 100644 app/assets/images/maps/4p_snowblind.jpg diff --git a/app/actors/LobbieActor.scala b/app/actors/LobbieActor.scala index 55805cb..3a8d22a 100644 --- a/app/actors/LobbieActor.scala +++ b/app/actors/LobbieActor.scala @@ -163,15 +163,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L } users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse)) - case ChangeIsNecronSelected(isSelected) => - isNecrons = isSelected - if (isSelected) { - mapsLobby.foreach(map => if (map.map == "2p_meeting_of_minds" || map.map == "2p_shrine_of_excellion_[Rem]") map.isBanned = true) - } else { - mapsLobby.foreach(map => map.isBanned = false) - } - users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse)) - case KickSecondPlayer => if (sender() == host.actorRef) { secondPlayer.foreach(player => player.actorRef ! LobbyFatal("You were kicked from lobby!")) diff --git a/app/actors/UserActor.scala b/app/actors/UserActor.scala index 8b8c5df..fc2bfe9 100644 --- a/app/actors/UserActor.scala +++ b/app/actors/UserActor.scala @@ -13,10 +13,13 @@ import scala.concurrent.duration.DurationInt import scala.util.{Failure, Success} class UserActor(out: ActorRef, - userParentActor: ActorRef) extends Actor with LazyLogging { + userParentActor: ActorRef, + ip: String) extends Actor with LazyLogging { implicit val timeout: Timeout = 3.seconds + val ipAddress: String = ip + var lobbieActor: Option[ActorRef] = None implicit val mapJson: Writes[DeciderMap] = new Writes[DeciderMap] { @@ -42,7 +45,6 @@ class UserActor(out: ActorRef, "status" -> lobby.status, "playerTurn" -> lobby.playerTurn, "selectedType" -> lobby.selectedType, - "isNecrons" -> lobby.isNecrons, "maps" -> Json.toJson(lobby.maps) ) } @@ -62,7 +64,6 @@ class UserActor(out: ActorRef, "status" -> lobby.status, "playerTurn" -> lobby.playerTurn, "selectedType" -> lobby.selectedType, - "isNecrons" -> lobby.isNecrons, "maps" -> Json.toJson(lobby.maps) ))) } @@ -154,10 +155,6 @@ class UserActor(out: ActorRef, val lobbyType = (json \ "lobbyType").as[String] lobbieActor.foreach(lobby => lobby ! ChangeLobbyType(lobbyType)) - case Some("changeIsNecronSelected") => - val isNecronSelected = (json \ "isNecronSelected").as[Boolean] - lobbieActor.foreach(lobby => lobby ! ChangeIsNecronSelected(isNecronSelected)) - case Some("kickSecondPlayer") => lobbieActor.foreach(lobby => lobby ! KickSecondPlayer) @@ -210,10 +207,11 @@ class UserParentActor(actorSystem: ActorSystem) extends Actor with ActorLogging import UserParentActor._ override def receive: Receive = LoggingReceive { - case Create(id, out) => - val child: ActorRef = actorSystem.actorOf(Props(classOf[UserActor], out, self), s"userActor-$id") + case Create(id, ipAddress, out) => + val child: ActorRef = actorSystem.actorOf(Props(classOf[UserActor], out, self, ipAddress), s"userActor-$id") sender() ! child case GetAllUsers => + System.out.print("12123" + context.children) sender() ! context.children } } @@ -221,7 +219,7 @@ class UserParentActor(actorSystem: ActorSystem) extends Actor with ActorLogging object UserParentActor { - case class Create(id: String, out: ActorRef) + case class Create(id: String, ipAddress: String, out: ActorRef) case object GetAllUsers diff --git a/app/assets/images/maps/4p_chaos_platenau.jpg b/app/assets/images/maps/4p_chaos_platenau.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fe119a1790ae4abe7c002b87c9fe7fc25f089ad GIT binary patch literal 45217 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 WSlU{w4ihCF1j*YRyJ|`QefvMH<_%Q< literal 0 HcmV?d00001 diff --git a/app/assets/images/maps/4p_snowblind.jpg b/app/assets/images/maps/4p_snowblind.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90eeae8ad48647faab9dc548cf554da6698c3c1d GIT binary patch literal 5159 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 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 8b0a817..065b436 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -272,7 +272,7 @@ function renderRaces() { } if(raceCount >= 3){ - resHtml += "

Ban race

"; + resHtml += "
"; } @@ -327,12 +327,10 @@ function selectThirdRace(button, race){ $.cookie("race3", race, { expires: 1 }); _.each($(".thirdRaceIcon"), function (el){ $(el).removeClass("raceSelected"); - $(el).children('img').removeClass("bannedRace"); $(el).addClass("raceNotSelected"); }); $(button).removeClass("raceNotSelected"); $(button).addClass("raceSelected"); - $(button).children("img").addClass("bannedRace"); checkRaceSelectFinish(); } @@ -520,7 +518,7 @@ function renderPlayersAndStats(lobby) { "" + "" + "" + - /*"" +*/ + "" + ""; if(lobby.user1Info.name !== userName && lobby.user2Info.name !== userName){ diff --git a/app/controllers/AdminController.scala b/app/controllers/AdminController.scala index 50cbec3..60ef02b 100644 --- a/app/controllers/AdminController.scala +++ b/app/controllers/AdminController.scala @@ -1,5 +1,6 @@ package controllers +import actors.UserParentActor.GetAllUsers import actors._ import akka.NotUsed import akka.actor._ @@ -9,30 +10,37 @@ import akka.stream._ import akka.stream.scaladsl._ import akka.util.Timeout import com.typesafe.config.ConfigFactory + import javax.inject._ import org.reactivestreams.Publisher import play.api.libs.json._ import play.api.mvc._ import scala.concurrent.duration._ -import scala.concurrent.{ExecutionContext, Future} +import scala.concurrent.{Await, ExecutionContext, Future} /** * This class creates the actions and the websocket needed. */ @Singleton -class AdminController @Inject()(cc: ControllerComponents) extends AbstractController(cc) { +class AdminController @Inject()(cc: ControllerComponents, homeController: HomeController) extends AbstractController(cc) { implicit val actorSystem: ActorSystem = ActorSystem() implicit val ec: ExecutionContext = defaultExecutionContext + implicit val timeout = Timeout(100.millis) // Use a direct reference to SLF4J private val logger = org.slf4j.LoggerFactory.getLogger("controllers.HomeController") + val userParentActor: ActorRef = homeController.userParentActor + // Home page that renders template - def viewAllLobbies() = Action { implicit request => + def viewAllUsers() = Action { implicit request => logger.info(s"Received request from: ${request.remoteAddress}") - Ok(views.html.admin()) + + val allUsers = userParentActor ? GetAllUsers + val res = Await.result(allUsers, Duration.Inf) + Ok(res.toString) } def banLobby(lobbyActorName: String): Unit = { diff --git a/app/controllers/HomeController.scala b/app/controllers/HomeController.scala index 512e092..300c67f 100644 --- a/app/controllers/HomeController.scala +++ b/app/controllers/HomeController.scala @@ -112,7 +112,7 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl val (webSocketOut: ActorRef, webSocketIn: Publisher[JsValue]) = createWebSocketConnections() // Create a user actor off the request id and attach it to the source - val userActorFuture = createUserActor(request.id.toString, webSocketOut) + val userActorFuture = createUserActor(request.id.toString, request.remoteAddress, webSocketOut) // Once we have an actor available, create a flow... userActorFuture.map { userActor => @@ -190,11 +190,11 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl * @param webSocketOut the "write" side of the websocket, that the user actor sends JsValue to. * @return a user actor for this ws connection. */ - private def createUserActor(name: String, webSocketOut: ActorRef): Future[ActorRef] = { + private def createUserActor(name: String, remoteAddress: String, webSocketOut: ActorRef): Future[ActorRef] = { // Use guice assisted injection to instantiate and configure the child actor. val userActorFuture = { implicit val timeout = Timeout(100.millis) - (userParentActor ? UserParentActor.Create(name, webSocketOut)).mapTo[ActorRef] + (userParentActor ? UserParentActor.Create(name, remoteAddress, webSocketOut)).mapTo[ActorRef] } userActorFuture } diff --git a/app/views/index.scala.html b/app/views/index.scala.html index f2d0092..2e357a1 100644 --- a/app/views/index.scala.html +++ b/app/views/index.scala.html @@ -20,7 +20,7 @@ - +