# HG changeset patch # User unc0rr # Date 1235159182 0 # Node ID e5391d901cffe1f19ac6bf20693b261b8deddcb7 # Parent cfe1481e0247305be43ecd9d9361b8de17a7cb8c - Remove client teams on exit - Improve protocol, break frontend compatibility with old server protocol diff -r cfe1481e0247 -r e5391d901cff QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Fri Feb 20 19:40:55 2009 +0000 +++ b/QTfrontend/newnetclient.cpp Fri Feb 20 19:46:22 2009 +0000 @@ -437,23 +437,17 @@ return; } - if (lst[0] == "MAP") { - if (lst.size() != 2) - { - qWarning("Net: Bad MAP message"); - return; - } - emit mapChanged(lst[1]); - return; - } - - if (lst[0] == "CONFIG_PARAM") { + if (lst[0] == "CFG") { if(lst.size() < 3) { qWarning("Net: Bad CONFIG_PARAM message"); return; } + if (lst[1] == "MAP") { + emit mapChanged(lst[2]); + return; + } if (lst[1] == "SEED") { emit seedChanged(lst[2]); return; @@ -614,7 +608,7 @@ void HWNewNet::onMapChanged(const QString & map) { - if (isChief) RawSendNet(QString("MAP%1%2").arg(delimeter).arg(map)); + if (isChief) RawSendNet(QString("CONFIG_PARAM%1MAP%1%2").arg(delimeter).arg(map)); } void HWNewNet::onThemeChanged(const QString & theme) diff -r cfe1481e0247 -r e5391d901cff gameServer/HWProtoCore.hs --- a/gameServer/HWProtoCore.hs Fri Feb 20 19:40:55 2009 +0000 +++ b/gameServer/HWProtoCore.hs Fri Feb 20 19:46:22 2009 +0000 @@ -13,14 +13,16 @@ handleCmd clID _ _ ["PING"] = [AnswerThisClient ["PONG"]] -handleCmd clID clients _ ("QUIT" : xs) = - (if isMaster client then [RemoveRoom] else []) +handleCmd clID clients rooms ("QUIT" : xs) = + (if isMaster client then [RemoveRoom] else removeClientTeams) ++ [ByeClient msg] where client = clients IntMap.! clID clientNick = nick client msg = if not $ null xs then head xs else "" - + room = rooms IntMap.! (roomID client) + clientTeams = filter (\t -> teamowner t == nick client) $ teams room + removeClientTeams = map (RemoveTeam . teamname) clientTeams handleCmd clID clients rooms cmd = if null (nick client) || clientProto client == 0 then diff -r cfe1481e0247 -r e5391d901cff gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Fri Feb 20 19:40:55 2009 +0000 +++ b/gameServer/HWProtoInRoomState.hs Fri Feb 20 19:46:22 2009 +0000 @@ -19,13 +19,17 @@ clientNick = nick $ clients IntMap.! clID -handleCmd_inRoom clID clients _ ["PART"] = +handleCmd_inRoom clID clients rooms ["PART"] = if isMaster client then [RemoveRoom] else - [RoomRemoveThisClient] + RoomRemoveThisClient + : removeClientTeams where client = clients IntMap.! clID + room = rooms IntMap.! (roomID client) + clientTeams = filter (\t -> teamowner t == nick client) $ teams room + removeClientTeams = map (RemoveTeam . teamname) clientTeams handleCmd_inRoom clID clients rooms ("CFG" : paramName : paramStrs) = @@ -37,7 +41,6 @@ where client = clients IntMap.! clID - handleCmd_inRoom clID clients rooms ("ADD_TEAM" : name : color : grave : fort : voicepack : difStr : hhsInfo) | length hhsInfo == 16 = if length (teams room) == 6 then