diff --git a/app/actors/LobbieActor.scala b/app/actors/LobbieActor.scala
index 82c6f0b..e01a0d0 100644
--- a/app/actors/LobbieActor.scala
+++ b/app/actors/LobbieActor.scala
@@ -130,12 +130,12 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
sender ! SetUserAsObs(getLobbyInfoResponse)
case LeaveLobby =>
users = users - sender
- if(secondPlayer.exists(sp => sp.actorRef == sender)) secondPlayer = None
if(host.actorRef == sender()){
users.foreach(_ ! HostLeaveLobby)
context.stop(self)
}else if(secondPlayer.exists(_.actorRef == sender())){
users.foreach(_ ! SecondPlayerLeaveLobby)
+ secondPlayer = None
context.stop(self)
}
if (users.isEmpty) {
@@ -165,12 +165,12 @@ case class MapsUpdate(maps: Set[String])
case class CreateLobby(userName: String)
-case class WatchLobby(lobbyName: String)
-
case class JoinLobbyAsPlayer(lobbyUser: LobbyUser)
case object KickSecondPlayer
+case class WatchLobby(lobbyName: String)
+
case object LeaveLobby
case object SetReady
diff --git a/app/actors/LobbiesActor.scala b/app/actors/LobbiesActor.scala
index bb0e0c0..388ba75 100644
--- a/app/actors/LobbiesActor.scala
+++ b/app/actors/LobbiesActor.scala
@@ -30,6 +30,13 @@ class LobbiesActor extends Actor with LazyLogging {
case Some(lobbyActor) => lobbyActor ! JoinLobbyAsPlayer(LobbyUser(userName, user))
case None => logger.error(s"Can't watch lobby $lobbyName - lobby not exists")
}
+ case ObserveLobbyByActorName(lobbyName) =>
+ // get or create the StockActor for the symbol and forward this message
+ val user = sender
+ context.child(lobbyName) match {
+ case Some(lobbyActor) => lobbyActor.tell(WatchLobby("watchIt"), user)
+ case None => logger.error(s"Can't watch lobby $lobbyName - lobby not exists")
+ }
case watchLobby@WatchLobby(lobbyName) =>
// get or create the StockActor for the symbol and forward this message
context.child(lobbyName) match {
@@ -50,4 +57,6 @@ case object GetAllLobbies
case class JoinLobbyByActorName(actorName: String, userName: String)
+case class ObserveLobbyByActorName(actorName: String)
+
case object UnWatchAllLobbies
\ No newline at end of file
diff --git a/app/actors/UserActor.scala b/app/actors/UserActor.scala
index 04031c2..6ea30a6 100644
--- a/app/actors/UserActor.scala
+++ b/app/actors/UserActor.scala
@@ -1,6 +1,6 @@
package actors
-import actors.UserActor.{GetName, HostLeaveLobby, LobbyFatal, RefreshLobbyInfo, SecondPlayerLeaveLobby, SetUserAsHost, SetUserAsSecondPlayer}
+import actors.UserActor.{GetName, HostLeaveLobby, LobbyFatal, RefreshLobbyInfo, SecondPlayerLeaveLobby, SetUserAsHost, SetUserAsObs, SetUserAsSecondPlayer}
import akka.actor._
import akka.event.LoggingReceive
import akka.pattern.ask
@@ -67,6 +67,11 @@ class UserActor(out: ActorRef,
logger.info(s"Receive set user ${self.path.name} as second player from ${lobbyActor.path.name}")
setUserAsJoinedOrCreatedLobby(lobbyActor, lobbyInfo)
+ case SetUserAsObs(lobbyInfo) =>
+ val lobbyActor = sender()
+ logger.info(s"Receive set user ${self.path.name} as second player from ${lobbyActor.path.name}")
+ setUserAsJoinedOrCreatedLobby(lobbyActor, lobbyInfo)
+
case HostLeaveLobby =>
logger.info(s"Host leave from lobby ${sender.path.name}")
out ! Json.obj("type" -> "lobbyError", "error" -> "Host leave lobby")
@@ -122,6 +127,11 @@ class UserActor(out: ActorRef,
logger.info(s"Player ${self.path.name} join lobby $lobbyActorName")
lobbiesActor ! JoinLobbyByActorName(lobbyActorName, name)
+ case Some("observerDecider") =>
+ val lobbyActorName = (json \ "lobbyActorName").as[String]
+ logger.info(s"Player ${self.path.name} observe lobby $lobbyActorName")
+ lobbiesActor ! ObserveLobbyByActorName(lobbyActorName)
+
case Some("banMap") =>
val map = (json \ "map").as[String]
lobbieActor.foreach(lobby => lobby ! BanMap(map))
diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js
index 19e5a44..84323e4 100644
--- a/app/assets/javascripts/index.js
+++ b/app/assets/javascripts/index.js
@@ -40,7 +40,7 @@ window.onload = function() {
var joinButton = (lobby.status === "NotStarted()") ? '' : "";
- var observerButton = '