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