Notify lobby when a room is created or deleted
authorunc0rr
Tue, 06 Jan 2009 17:51:39 +0000
changeset 1591 1db9b654f880
parent 1590 646d56eacb8f
child 1592 5ee77ee470a6
Notify lobby when a room is created or deleted
QTfrontend/newnetclient.cpp
netserver/HWProto.hs
netserver/Miscutils.hs
--- a/QTfrontend/newnetclient.cpp	Tue Jan 06 17:37:18 2009 +0000
+++ b/QTfrontend/newnetclient.cpp	Tue Jan 06 17:51:39 2009 +0000
@@ -190,7 +190,7 @@
 
 void HWNewNet::ParseCmd(const QStringList & lst)
 {
-//	qDebug() << "Server: " << lst;
+	qDebug() << "Server: " << lst;
 
 	if(!lst.size())
 	{
@@ -293,6 +293,7 @@
 		emit setReadyStatus(lst[1], true);
 		return;
 	}
+	
 	if (lst[0] == "NOT_READY") {
 		if(lst.size() != 2)
 		{
@@ -382,6 +383,16 @@
 		return;
 	}
 
+	if(lst[0] == "ROOM") {
+		if(lst.size() < 2)
+		{
+			qWarning("Net: Bad ROOM message");
+			return;
+		}
+		RawSendNet(QString("LIST"));
+		return;
+	}
+
 	if(lst[0] == "LOBBY:LEFT") {
 		if(lst.size() < 2)
 		{
--- a/netserver/HWProto.hs	Tue Jan 06 17:37:18 2009 +0000
+++ b/netserver/HWProto.hs	Tue Jan 06 17:51:39 2009 +0000
@@ -21,6 +21,7 @@
 answerClientOnly  = makeAnswer clientOnly
 answerOthersRoom  = makeAnswer othersInRoom
 answerSameRoom    = makeAnswer sameRoom
+answerSameProtoLobby = makeAnswer sameProtoLobbyClients
 answerAll         = makeAnswer allClients
 
 answerBadCmd            = answerClientOnly ["ERROR", "Bad command, state or incorrect parameter"]
@@ -76,6 +77,9 @@
 answerIsReady nick  = answerSameRoom ["READY", nick]
 answerNotReady nick = answerSameRoom ["NOT_READY", nick]
 
+answerRoomAdded name    = answerSameProtoLobby ["ROOM", "ADD", name]
+answerRoomDeleted name  = answerSameProtoLobby ["ROOM", "DEL", name]
+
 answerFullConfig room = concatMap toAnswer (Map.toList $ params room) ++ (answerClientOnly ["MAP", gamemap room])
 	where
 		toAnswer (paramName, paramStrs) =
@@ -114,7 +118,7 @@
 	if null (room client) then
 		(noChangeClients, noChangeRooms, answerQuit msg ++ (answerQuitLobby (nick client) msg) )
 	else if isMaster client then
-		(noChangeClients, removeRoom (room client), (answerQuit msg) ++ (answerQuitLobby (nick client) msg) ++ answerAbandoned) -- core disconnects clients on ROOMABANDONED answer
+		(noChangeClients, removeRoom (room client), (answerQuit msg) ++ (answerQuitLobby (nick client) msg) ++ answerAbandoned ++ (answerRoomDeleted $ room client)) -- core disconnects clients on ROOMABANDONED answer
 	else
 		(noChangeClients, modifyRoom clRoom{teams = othersTeams, playersIn = (playersIn clRoom) - 1, readyPlayers = newReadyPlayers}, (answerQuit msg) ++ (answerQuitInform (nick client) msg) ++ (answerQuitLobby (nick client) msg) ++ answerRemoveClientTeams)
 	where
@@ -206,7 +210,7 @@
 	if haveSameRoom then
 		(noChangeClients, noChangeRooms, answerRoomExists)
 	else
-		(modifyClient client{room = newRoom, isMaster = True}, addRoom createRoom{name = newRoom, password = roomPassword, roomProto = (protocol client)}, (answerJoined $ nick client) ++ (answerNotReady $ nick client))
+		(modifyClient client{room = newRoom, isMaster = True}, addRoom createRoom{name = newRoom, password = roomPassword, roomProto = (protocol client)}, (answerJoined $ nick client) ++ (answerNotReady $ nick client) ++ (answerRoomAdded newRoom))
 	where
 		haveSameRoom = isJust $ find (\room -> newRoom == name room) rooms
 
--- a/netserver/Miscutils.hs	Tue Jan 06 17:37:18 2009 +0000
+++ b/netserver/Miscutils.hs	Tue Jan 06 17:51:39 2009 +0000
@@ -126,6 +126,9 @@
 sameRoom :: HandlesSelector
 sameRoom client clients rooms = filter (\ci -> room ci == room client) clients
 
+sameProtoLobbyClients :: HandlesSelector
+sameProtoLobbyClients client clients rooms = filter (\ci -> room ci == [] && protocol ci == protocol client) clients
+
 noRoomSameProto :: HandlesSelector
 noRoomSameProto client clients _ = filter (null . room) $ filter (\ci -> protocol client == protocol ci) clients