diff -r 6af73e7f2438 -r 4e4f88a7bdf2 gameServer/HWProtoCore.hs --- a/gameServer/HWProtoCore.hs Thu May 06 15:26:14 2010 +0000 +++ b/gameServer/HWProtoCore.hs Thu May 06 17:39:08 2010 +0000 @@ -3,6 +3,7 @@ import qualified Data.IntMap as IntMap import Data.Foldable import Maybe +import Control.Monad.Reader -------------------------------------- import CoreTypes import Actions @@ -10,17 +11,20 @@ import HWProtoNEState import HWProtoLobbyState import HWProtoInRoomState +import HandlerUtils +import RoomsAndClients handleCmd, handleCmd_loggedin :: CmdHandler -handleCmd clID _ _ ["PING"] = [AnswerThisClient ["PONG"]] + +handleCmd ["PING"] = answerClient ["PONG"] -handleCmd clID clients rooms ("QUIT" : xs) = - [ByeClient msg] + +handleCmd ("QUIT" : xs) = return [ByeClient msg] where msg = if not $ null xs then head xs else "" - +{- handleCmd clID clients _ ["PONG"] = if pingsQueue client == 0 then [ProtocolError "Protocol violation"] @@ -28,17 +32,16 @@ [ModifyClient (\cl -> cl{pingsQueue = pingsQueue cl - 1})] where client = clients IntMap.! clID - +-} -handleCmd clID clients rooms cmd = - if not $ logonPassed client then - handleCmd_NotEntered clID clients rooms cmd - else - handleCmd_loggedin clID clients rooms cmd - where - client = clients IntMap.! clID +handleCmd cmd = do + (ci, irnc) <- ask + if logonPassed (irnc `client` ci) then + handleCmd_NotEntered cmd + else + handleCmd_loggedin cmd - +{- handleCmd_loggedin clID clients rooms ["INFO", asknick] = if noSuchClient then [] @@ -62,11 +65,12 @@ then if teamsInGame client > 0 then "(playing)" else "(spectating)" else "" +-} -handleCmd_loggedin clID clients rooms cmd = - if roomID client == 0 then - handleCmd_lobby clID clients rooms cmd - else - handleCmd_inRoom clID clients rooms cmd - where - client = clients IntMap.! clID + +handleCmd_loggedin cmd = do + (ci, rnc) <- ask + if clientRoom rnc ci == lobbyId then + handleCmd_lobby cmd + else + handleCmd_inRoom cmd