gameServer/HWProtoLobbyState.hs
changeset 6101 5a4ea2c7b9df
parent 6068 e18713ecf1e0
child 6191 190a8e5d9956
--- a/gameServer/HWProtoLobbyState.hs	Sat Oct 08 16:45:52 2011 +0200
+++ b/gameServer/HWProtoLobbyState.hs	Sat Oct 08 16:54:56 2011 +0200
@@ -12,6 +12,7 @@
 import Utils
 import HandlerUtils
 import RoomsAndClients
+import EngineInteraction
 
 
 answerAllTeams :: ClientInfo -> [TeamInfo] -> [Action]
@@ -34,7 +35,7 @@
     return [AnswerClients [sendChan cl] ("ROOMS" : roomsInfoList rooms)]
     where
         roomInfo irnc r = [
-                showB $ gameinprogress r,
+                showB $ isJust $ gameInfo r,
                 name r,
                 showB $ playersIn r,
                 showB $ length $ teams r,
@@ -75,11 +76,12 @@
     let maybeRI = find (\ri -> roomName == name (irnc `room` ri)) ris
     let jRI = fromJust maybeRI
     let jRoom = irnc `room` jRI
+    let sameProto = clientProto cl == roomProto jRoom
     let jRoomClients = map (client irnc) $ roomClients irnc jRI
     let nicks = map nick jRoomClients
     let chans = map sendChan (cl : jRoomClients)
     return $
-        if isNothing maybeRI then 
+        if isNothing maybeRI || not sameProto then 
             [Warning "No such rooms"]
             else if isRestrictedJoins jRoom then
             [Warning "Joining restricted"]
@@ -116,13 +118,13 @@
                  : ("SCHEME", pr Map.! "SCHEME")
                  : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr)
 
-        answerTeams cl jRoom = let f = if gameinprogress jRoom then teamsAtStart else teams in answerAllTeams cl $ f jRoom
+        answerTeams cl jRoom = let f = if isJust $ gameInfo jRoom then teamsAtStart . fromJust . gameInfo else teams in answerAllTeams cl $ f jRoom
 
-        watchRound cl jRoom = if not $ gameinprogress jRoom then
+        watchRound cl jRoom = if isNothing $ gameInfo jRoom then
                     []
                 else
                     [AnswerClients [sendChan cl]  ["RUN_GAME"],
-                    AnswerClients [sendChan cl] $ "EM" : toEngineMsg "e$spectate 1" : Foldable.toList (roundMsgs jRoom)]
+                    AnswerClients [sendChan cl] $ "EM" : toEngineMsg "e$spectate 1" : Foldable.toList (roundMsgs . fromJust . gameInfo $ jRoom)]
 
 
 handleCmd_lobby ["JOIN_ROOM", roomName] =
@@ -135,7 +137,7 @@
     cl <- thisClient
     let ri = clientRoom rnc $ fromJust ci
     let clRoom = room rnc ri
-    if isNothing ci || ri == lobbyId || clientProto cl /= roomProto clRoom then
+    if isNothing ci || ri == lobbyId then
         return []
         else
         handleCmd_lobby ["JOIN_ROOM", name clRoom]