QTfrontend/net/newnetclient.cpp
changeset 7687 c73fd8cfa7c0
parent 7684 db140521d102
child 7710 fd5bcbd698a5
--- a/QTfrontend/net/newnetclient.cpp	Mon Aug 27 17:40:16 2012 +0200
+++ b/QTfrontend/net/newnetclient.cpp	Sun Sep 16 16:54:51 2012 +0200
@@ -357,6 +357,7 @@
 
         QString flags = lst[1];
         bool setFlag = flags[0] == '+';
+        const QStringList nicks = lst.mid(2);
 
         while(flags.size() > 1)
         {
@@ -365,19 +366,51 @@
 
             switch(c)
             {
+                // flag indicating if a player is ready to start a game
                 case 'r':
-                {
-                    for(int i = 2; i < lst.size(); ++i)
-                    {
-                        if (lst[i] == mynick)
+                        foreach (const QString & nick, nicks)
+                        {
+                            if (nick == mynick)
+                            {
+                                if (isChief && !setFlag) ToggleReady();
+                                else emit setMyReadyStatus(setFlag);
+                            }
+                            emit setReadyStatus(nick, setFlag);
+                        }
+                        break;
+
+                // flag indicating if a player is a registered user
+                case 'u':
+                        emit setRegisteredStatus(nicks, setFlag);
+                        break;
+
+                // flag indicating if a player is the host/master of the room
+                case 'h':
+                        foreach (const QString & nick, nicks)
                         {
-                            if (isChief && !setFlag) ToggleReady();
-                            else emit setMyReadyStatus(setFlag);
+                            if (nick == mynick)
+                            {
+                                isChief = setFlag;
+                                emit roomMaster(isChief);
+                            }
+
+                            emit setRoomMasterStatus(nick, setFlag);
                         }
+                        break;
 
-                        emit setReadyStatus(lst[i], setFlag);
-                    }
-                }
+                // flag indicating if a player is admin (if so -> worship them!)
+                case 'a':
+                        foreach (const QString & nick, nicks)
+                        {
+                            if (nick == mynick)
+                                emit adminAccess(setFlag);
+
+                            emit setAdminStatus(nick, setFlag);
+                        }
+                        break;
+
+                default:
+                        qWarning() << "Net: Unknown client-flag: " << c;
             }
         }
 
@@ -503,7 +536,7 @@
 
     if (lst[0] == "ADMIN_ACCESS")
     {
-        emit adminAccess(true);
+        // obsolete, see +a client flag
         return;
     }
 
@@ -673,6 +706,7 @@
             return;
         }
 
+        // obsolete
         if (lst[0] == "ROOM_CONTROL_ACCESS")
         {
             if (lst.size() < 2)
@@ -680,8 +714,6 @@
                 qWarning("Net: Bad ROOM_CONTROL_ACCESS message");
                 return;
             }
-            isChief = (lst[1] != "0");
-            emit roomMaster(isChief);
             return;
         }
     }