# HG changeset patch # User unc0rr # Date 1238236920 0 # Node ID 7e6cc8da1c586bcb33a16211d8d118dd064b025b # Parent 9bf8f4f30d6bede45fd22d0c0d504e2cbdc34f63 - Fix bug with kicking players - Fix one ready state bug - Improve client's ping handler diff -r 9bf8f4f30d6b -r 7e6cc8da1c58 QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Fri Mar 27 20:36:50 2009 +0000 +++ b/QTfrontend/newnetclient.cpp Sat Mar 28 10:42:00 2009 +0000 @@ -241,7 +241,10 @@ } if (lst[0] == "PING") { - RawSendNet(QString("PONG")); + if (lst.size() > 1) + RawSendNet(QString("PONG%1%2").arg(delimeter).arg(lst[1])); + else + RawSendNet(QString("PONG")); return; } diff -r 9bf8f4f30d6b -r 7e6cc8da1c58 gameServer/Actions.hs --- a/gameServer/Actions.hs Fri Mar 27 20:36:50 2009 +0000 +++ b/gameServer/Actions.hs Sat Mar 28 10:42:00 2009 +0000 @@ -111,17 +111,21 @@ processAction (clID, serverInfo, clients, rooms) (ByeClient msg) = do - mapM_ (processAction (clID, serverInfo, clients, rooms)) $ answerOthersQuit ++ answerInformRoom + (_, _, newClients, newRooms) <- + processAction (clID, serverInfo, clients, rooms) + (if isMaster client then RemoveRoom else RemoveClientTeams clID) + + mapM_ (processAction (clID, serverInfo, newClients, newRooms)) $ answerOthersQuit ++ answerInformRoom writeChan (sendChan $ clients ! clID) ["BYE", msg] return ( 0, serverInfo, - delete clID clients, + delete clID newClients, adjust (\r -> r{ playersIDs = IntSet.delete clID (playersIDs r), playersIn = (playersIn r) - 1, readyPlayers = if isReady client then readyPlayers r - 1 else readyPlayers r - }) rID rooms + }) rID newRooms ) where client = clients ! clID @@ -180,7 +184,7 @@ return ( clID, serverInfo, - adjust (\cl -> cl{roomID = 0}) clID clients, + adjust (\cl -> cl{roomID = 0, isMaster = False, isReady = False}) clID clients, adjust (\r -> r{ playersIDs = IntSet.delete clID (playersIDs r), playersIn = (playersIn r) - 1, diff -r 9bf8f4f30d6b -r 7e6cc8da1c58 gameServer/HWProtoCore.hs --- a/gameServer/HWProtoCore.hs Fri Mar 27 20:36:50 2009 +0000 +++ b/gameServer/HWProtoCore.hs Sat Mar 28 10:42:00 2009 +0000 @@ -16,11 +16,8 @@ handleCmd clID _ _ ["PING"] = [AnswerThisClient ["PONG"]] handleCmd clID clients rooms ("QUIT" : xs) = - (if isMaster client then [RemoveRoom] else [RemoveClientTeams clID]) - ++ [ByeClient msg] + [ByeClient msg] where - client = clients IntMap.! clID - clientNick = nick client msg = if not $ null xs then head xs else "" diff -r 9bf8f4f30d6b -r 7e6cc8da1c58 gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Fri Mar 27 20:36:50 2009 +0000 +++ b/gameServer/HWProtoInRoomState.hs Sat Mar 28 10:42:00 2009 +0000 @@ -205,8 +205,7 @@ if (kickID == clID) || (roomID client /= roomID kickClient) then [] else - [RemoveClientTeams kickID, - KickRoomClient kickID] + [KickRoomClient kickID] where client = clients IntMap.! clID maybeClient = Foldable.find (\cl -> kickNick == nick cl) clients