--- 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]