# HG changeset patch # User unc0rr # Date 1231428372 0 # Node ID c853e02ed663adf9c938ba02678de54686a7702b # Parent 24f2f9fa0160db6396beab8aa04ee200203dfe2f - Fix bugs in net server - Frontend disconnection fixes diff -r 24f2f9fa0160 -r c853e02ed663 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Thu Jan 08 13:04:04 2009 +0000 +++ b/QTfrontend/hwform.cpp Thu Jan 08 15:26:12 2009 +0000 @@ -315,7 +315,7 @@ ui.Pages->setCurrentIndex(id); OnPageShown(id, curid); - if (id == ID_PAGE_NETSERVER) { + if (id == ID_PAGE_NETSERVER || (id == ID_PAGE_ROOMSLIST && !hwnet)) { GoBack(); } if (id == ID_PAGE_NET) { diff -r 24f2f9fa0160 -r c853e02ed663 doc/Release.txt --- a/doc/Release.txt Thu Jan 08 13:04:04 2009 +0000 +++ b/doc/Release.txt Thu Jan 08 15:26:12 2009 +0000 @@ -2,9 +2,10 @@ 2. Update translations (check fireforge for patches) 3. Check copyright headers 4. Changelog -5. Make a branch -6. Make packages -7. Test packages -8. Upload (hedgewars.org, fireforge.net, gna.org) -9. Post news (hedgewars.org, fireforge.net, gna.org, etc.) -10. Make tag (svn copy svn+ssh://unc0rr@svn.fireforge.net/svnroot/hedgewars/branches/0.9.7 svn+ssh://unc0rr@svn.fireforge.net/svnroot/hedgewars/tags/0.9.7 -m "Tag for 0.9.7 release") \ No newline at end of file +5. Turn debug stuff off (frontend console output) +6. Make a branch +7. Make packages +8. Test packages +9. Upload (hedgewars.org, fireforge.net, gna.org) +10. Post news (hedgewars.org, fireforge.net, gna.org, etc.) +11. Make tag (svn copy svn+ssh://unc0rr@svn.fireforge.net/svnroot/hedgewars/branches/0.9.7 svn+ssh://unc0rr@svn.fireforge.net/svnroot/hedgewars/tags/0.9.7 -m "Tag for 0.9.7 release") \ No newline at end of file diff -r 24f2f9fa0160 -r c853e02ed663 netserver/HWProto.hs --- a/netserver/HWProto.hs Thu Jan 08 13:04:04 2009 +0000 +++ b/netserver/HWProto.hs Thu Jan 08 15:26:12 2009 +0000 @@ -21,7 +21,6 @@ answerClientOnly = makeAnswer clientOnly answerOthersRoom = makeAnswer othersInRoom answerSameRoom = makeAnswer sameRoom -answerFromRoom roomName = makeAnswer (fromRoom roomName) answerSameProtoLobby = makeAnswer sameProtoLobbyClients answerAll = makeAnswer allClients @@ -70,7 +69,7 @@ else answerOthersRoom ["LEFT", nick] -answerPartInform nick roomName = answerFromRoom roomName ["LEFT", nick, "bye room"] +answerPartInform nick = answerOthersRoom ["LEFT", nick, "bye room"] answerQuitLobby nick msg = if not $ null nick then if not $ null msg then @@ -270,9 +269,9 @@ handleCmd_inRoom client _ rooms ["PART"] = if isMaster client then - (modifyRoomClients clRoom (\cl -> cl{room = [], isReady = False}), removeRoom (room client), (answerAbandoned $ protocol client) ++ (answerRoomDeleted $ room client)) + (modifyRoomClients clRoom (\cl -> cl{room = [], isReady = False, isMaster = False}), removeRoom (room client), (answerAbandoned $ protocol client) ++ (answerRoomDeleted $ room client)) else - (modifyClient client{room = [], isReady = False}, modifyRoom clRoom{teams = othersTeams, playersIn = (playersIn clRoom) - 1, readyPlayers = newReadyPlayers}, (answerPartInform (room client) (nick client)) ++ answerRemoveClientTeams) + (modifyClient client{isReady = False, partRoom = True}, modifyRoom clRoom{teams = othersTeams, playersIn = (playersIn clRoom) - 1, readyPlayers = newReadyPlayers}, (answerPartInform (nick client)) ++ answerRemoveClientTeams) where clRoom = roomByName (room client) rooms answerRemoveClientTeams = concatMap (\tn -> answerOthersRoom ["REMOVE_TEAM", teamname tn]) clientTeams diff -r 24f2f9fa0160 -r c853e02ed663 netserver/Miscutils.hs --- a/netserver/Miscutils.hs Thu Jan 08 13:04:04 2009 +0000 +++ b/netserver/Miscutils.hs Thu Jan 08 15:26:12 2009 +0000 @@ -23,7 +23,8 @@ room :: String, isMaster :: Bool, isReady :: Bool, - forceQuit :: Bool + forceQuit :: Bool, + partRoom :: Bool } instance Eq ClientInfo where diff -r 24f2f9fa0160 -r c853e02ed663 netserver/hedgewars-server.hs --- a/netserver/hedgewars-server.hs Thu Jan 08 13:04:04 2009 +0000 +++ b/netserver/hedgewars-server.hs Thu Jan 08 15:26:12 2009 +0000 @@ -51,7 +51,21 @@ forkIO $ clientRecvLoop cHandle cChan forkIO $ clientSendLoop cHandle cChan sendChan - atomically $ writeTChan acceptChan (ClientInfo cChan sendChan cHandle host currentTime "" 0 "" False False False) + atomically $ writeTChan acceptChan + (ClientInfo + cChan + sendChan + cHandle + host + currentTime + "" + 0 + "" + False + False + False + False) + atomically $ writeTChan cChan ["ASKME"] acceptLoop servSock acceptChan @@ -123,8 +137,9 @@ clientsIn <- sendAnswers answers mclient mclients mrooms mapM_ (\cl -> atomically $ writeTChan (chan cl) ["QUIT", "Kicked"]) $ filter forceQuit $ clientsIn - - return (clientsIn, mrooms) + + let clientsFinal = map (\cl -> if partRoom cl then cl{room = [], partRoom = False} else cl) clientsIn + return (clientsFinal, mrooms) mainLoop :: ServerInfo -> TChan ClientInfo -> TChan [String] -> [ClientInfo] -> [RoomInfo] -> IO ()