QTfrontend/net/newnetclient.cpp
branchwebgl
changeset 9127 e350500c4edb
parent 8833 c13ebed437cb
parent 9080 9b42757d7e71
child 9521 8054d9d775fd
equal deleted inserted replaced
8860:bde641cf53c8 9127:e350500c4edb
     1 /*
     1 /*
     2  * Hedgewars, a free turn based strategy game
     2  * Hedgewars, a free turn based strategy game
     3  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
     3  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
     4  * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
     4  * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
     5  *
     5  *
     6  * This program is free software; you can redistribute it and/or modify
     6  * This program is free software; you can redistribute it and/or modify
     7  * it under the terms of the GNU General Public License as published by
     7  * it under the terms of the GNU General Public License as published by
     8  * the Free Software Foundation; version 2 of the License
     8  * the Free Software Foundation; version 2 of the License
     9  *
     9  *
   334         if(lst.size() < 3)
   334         if(lst.size() < 3)
   335         {
   335         {
   336             qWarning("Net: Empty CHAT message");
   336             qWarning("Net: Empty CHAT message");
   337             return;
   337             return;
   338         }
   338         }
       
   339 
       
   340         QString action = HWProto::chatStringToAction(lst[2]);
       
   341 
   339         if (netClientState == InLobby)
   342         if (netClientState == InLobby)
   340             emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
   343         {
       
   344             if (action != NULL)
       
   345                 emit lobbyChatAction(lst[1], action);
       
   346             else
       
   347                 emit lobbyChatMessage(lst[1], lst[2]);
       
   348         }
   341         else
   349         else
       
   350         {
   342             emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
   351             emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
       
   352             if (action != NULL)
       
   353                 emit roomChatAction(lst[1], action);
       
   354             else
       
   355                 emit roomChatMessage(lst[1], lst[2]);
       
   356         }
   343         return;
   357         return;
   344     }
   358     }
   345 
   359 
   346     if (lst[0] == "INFO")
   360     if (lst[0] == "INFO")
   347     {
   361     {
   348         if(lst.size() < 5)
   362         if(lst.size() < 5)
   349         {
   363         {
   350             qWarning("Net: Malformed INFO message");
   364             qWarning("Net: Malformed INFO message");
   351             return;
   365             return;
   352         }
   366         }
   353         QStringList tmp = lst;
   367         emit playerInfo(lst[1], lst[2], lst[3], lst[4]);
   354         tmp.removeFirst();
   368         if (netClientState != InLobby)
   355         if (netClientState == InLobby)
   369         {
   356             emit chatStringLobby(tmp.join("\n").prepend('\x01'));
   370             QStringList tmp = lst;
   357         else
   371             tmp.removeFirst();
   358             emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
   372             emit chatStringFromNet(tmp.join(" ").prepend('\x01'));
       
   373         }
   359         return;
   374         return;
   360     }
   375     }
   361 
   376 
   362     if (lst[0] == "SERVER_VARS")
   377     if (lst[0] == "SERVER_VARS")
   363     {
   378     {
   408                     if(inRoom)
   423                     if(inRoom)
   409                         foreach (const QString & nick, nicks)
   424                         foreach (const QString & nick, nicks)
   410                         {
   425                         {
   411                             if (nick == mynick)
   426                             if (nick == mynick)
   412                             {
   427                             {
   413                                 if (isChief && !setFlag) ToggleReady();
   428                                 emit setMyReadyStatus(setFlag);
   414                                 else emit setMyReadyStatus(setFlag);
       
   415                             }
   429                             }
   416                             m_playersModel->setFlag(nick, PlayersListModel::Ready, setFlag);
   430                             m_playersModel->setFlag(nick, PlayersListModel::Ready, setFlag);
   417                         }
   431                         }
   418                         break;
   432                         break;
   419 
   433 
   488                 netClientState = InLobby;
   502                 netClientState = InLobby;
   489                 RawSendNet(QString("LIST"));
   503                 RawSendNet(QString("LIST"));
   490                 emit connected();
   504                 emit connected();
   491             }
   505             }
   492 
   506 
   493             m_playersModel->addPlayer(lst[i]);
   507             m_playersModel->addPlayer(lst[i], false);
   494             emit nickAddedLobby(lst[i], false);
       
   495             emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
       
   496         }
   508         }
   497         return;
   509         return;
   498     }
   510     }
   499 
   511 
   500     if(lst[0] == "ROOM" && lst.size() == 10 && lst[1] == "ADD")
   512     if(lst[0] == "ROOM" && lst.size() == 10 && lst[1] == "ADD")
   537         if(lst.size() < 2)
   549         if(lst.size() < 2)
   538         {
   550         {
   539             qWarning("Net: Bad LOBBY:LEFT message");
   551             qWarning("Net: Bad LOBBY:LEFT message");
   540             return;
   552             return;
   541         }
   553         }
   542         emit nickRemovedLobby(lst[1]);
   554 
   543         if (lst.size() < 3)
   555         if (lst.size() < 3)
   544             emit chatStringLobby(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
   556             m_playersModel->removePlayer(lst[1]);
   545         else
   557         else
   546             emit chatStringLobby(lst[1], tr("%1 *** %2 has left (%3)").arg('\x03').arg("|nick|", lst[2]));
   558             m_playersModel->removePlayer(lst[1], lst[2]);
   547 
       
   548         m_playersModel->removePlayer(lst[1]);
       
   549 
   559 
   550         return;
   560         return;
   551     }
   561     }
   552 
   562 
   553     if (lst[0] == "ASKPASSWORD")
   563     if (lst[0] == "ASKPASSWORD")
   634                 emit roomMaster(isChief);
   644                 emit roomMaster(isChief);
   635                 if (isChief)
   645                 if (isChief)
   636                     emit configAsked();
   646                     emit configAsked();
   637             }
   647             }
   638 
   648 
   639             m_playersModel->playerJoinedRoom(lst[i]);
   649             m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick));
   640             emit nickAdded(lst[i], isChief && (lst[i] != mynick));
   650 
   641             emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
   651             emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
   642         }
   652         }
   643         return;
   653         return;
   644     }
   654     }
   645 
   655 
   767                 return;
   777                 return;
   768             }
   778             }
   769 
   779 
   770             for(int i = 1; i < lst.size(); ++i)
   780             for(int i = 1; i < lst.size(); ++i)
   771             {
   781             {
   772                 emit nickAdded(lst[i], isChief && (lst[i] != mynick));
       
   773                 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
   782                 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
   774                 m_playersModel->playerJoinedRoom(lst[i]);
   783                 m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick));
   775             }
   784             }
   776             return;
   785             return;
   777         }
   786         }
   778 
   787 
   779         if(lst[0] == "LEFT")
   788         if(lst[0] == "LEFT")
   781             if(lst.size() < 2)
   790             if(lst.size() < 2)
   782             {
   791             {
   783                 qWarning("Net: Bad LEFT message");
   792                 qWarning("Net: Bad LEFT message");
   784                 return;
   793                 return;
   785             }
   794             }
   786             emit nickRemoved(lst[1]);
   795 
   787             if (lst.size() < 3)
   796             if (lst.size() < 3)
   788                 emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
   797                 emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
   789             else
   798             else
   790                 emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   799                 emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   791             m_playersModel->playerLeftRoom(lst[1]);
   800             m_playersModel->playerLeftRoom(lst[1]);
   834             .arg(param)
   843             .arg(param)
   835             .arg(value.join(QString(delimeter)))
   844             .arg(value.join(QString(delimeter)))
   836         );
   845         );
   837 }
   846 }
   838 
   847 
       
   848 void HWNewNet::chatLineToNetWithEcho(const QString& str)
       
   849 {
       
   850     if(str != "")
       
   851     {
       
   852         emit chatStringFromNet(HWProto::formatChatMsg(mynick, str));
       
   853         chatLineToNet(str);
       
   854     }
       
   855 }
       
   856 
   839 void HWNewNet::chatLineToNet(const QString& str)
   857 void HWNewNet::chatLineToNet(const QString& str)
   840 {
   858 {
   841     if(str != "")
   859     if(str != "")
   842     {
   860     {
   843         RawSendNet(QString("CHAT") + delimeter + str);
   861         RawSendNet(QString("CHAT") + delimeter + str);
   844         emit(chatStringFromMe(HWProto::formatChatMsg(mynick, str)));
   862         QString action = HWProto::chatStringToAction(str);
       
   863         if (action != NULL)
       
   864             emit(roomChatAction(mynick, action));
       
   865         else
       
   866             emit(roomChatMessage(mynick, str));
   845     }
   867     }
   846 }
   868 }
   847 
   869 
   848 void HWNewNet::chatLineToLobby(const QString& str)
   870 void HWNewNet::chatLineToLobby(const QString& str)
   849 {
   871 {
   850     if(str != "")
   872     if(str != "")
   851     {
   873     {
   852         RawSendNet(QString("CHAT") + delimeter + str);
   874         RawSendNet(QString("CHAT") + delimeter + str);
   853         emit chatStringLobby(mynick, HWProto::formatChatMsgForFrontend(str));
   875         QString action = HWProto::chatStringToAction(str);
       
   876         if (action != NULL)
       
   877             emit(lobbyChatAction(mynick, action));
       
   878         else
       
   879             emit(lobbyChatMessage(mynick, str));
   854     }
   880     }
   855 }
   881 }
   856 
   882 
   857 void HWNewNet::SendTeamMessage(const QString& str)
   883 void HWNewNet::SendTeamMessage(const QString& str)
   858 {
   884 {