QTfrontend/net/newnetclient.cpp
branchwebgl
changeset 9950 2759212a27de
parent 9521 8054d9d775fd
parent 9906 93c16a4b0c6a
child 10015 4feced261c68
equal deleted inserted replaced
9521:8054d9d775fd 9950:2759212a27de
    92     m_game_connected = false;
    92     m_game_connected = false;
    93 
    93 
    94     NetSocket.disconnectFromHost();
    94     NetSocket.disconnectFromHost();
    95 }
    95 }
    96 
    96 
    97 void HWNewNet::CreateRoom(const QString & room)
    97 void HWNewNet::CreateRoom(const QString & room, const QString & password)
    98 {
    98 {
    99     if(netClientState != InLobby)
    99     if(netClientState != InLobby)
   100     {
   100     {
   101         qWarning("Illegal try to create room!");
   101         qWarning("Illegal try to create room!");
   102         return;
   102         return;
   103     }
   103     }
   104 
   104 
   105     myroom = room;
   105     myroom = room;
   106 
   106 
   107     RawSendNet(QString("CREATE_ROOM%1%2").arg(delimeter).arg(room));
   107     if(password.isEmpty())
       
   108         RawSendNet(QString("CREATE_ROOM%1%2").arg(delimeter).arg(room));
       
   109     else
       
   110         RawSendNet(QString("CREATE_ROOM%1%2%1%3").arg(delimeter).arg(room).arg(password));
       
   111 
   108     isChief = true;
   112     isChief = true;
   109 }
   113 }
   110 
   114 
   111 void HWNewNet::JoinRoom(const QString & room)
   115 void HWNewNet::JoinRoom(const QString & room, const QString &password)
   112 {
   116 {
   113     if(netClientState != InLobby)
   117     if(netClientState != InLobby)
   114     {
   118     {
   115         qWarning("Illegal try to join room!");
   119         qWarning("Illegal try to join room!");
   116         return;
   120         return;
   117     }
   121     }
   118 
   122 
   119     myroom = room;
   123     myroom = room;
   120 
   124 
   121     RawSendNet(QString("JOIN_ROOM%1%2").arg(delimeter).arg(room));
   125     if(password.isEmpty())
       
   126         RawSendNet(QString("JOIN_ROOM%1%2").arg(delimeter).arg(room));
       
   127     else
       
   128         RawSendNet(QString("JOIN_ROOM%1%2%1%3").arg(delimeter).arg(room).arg(password));
       
   129 
   122     isChief = false;
   130     isChief = false;
   123 }
   131 }
   124 
   132 
   125 void HWNewNet::AddTeam(const HWTeam & team)
   133 void HWNewNet::AddTeam(const HWTeam & team)
   126 {
   134 {
   301         return;
   309         return;
   302     }
   310     }
   303 
   311 
   304     if (lst[0] == "ROOMS")
   312     if (lst[0] == "ROOMS")
   305     {
   313     {
   306         if(lst.size() % 8 != 1)
   314         if(lst.size() % 9 != 1)
   307         {
   315         {
   308             qWarning("Net: Malformed ROOMS message");
   316             qWarning("Net: Malformed ROOMS message");
   309             return;
   317             return;
   310         }
   318         }
   311         QStringList tmp = lst;
   319         m_roomsListModel->setRoomsList(lst.mid(1));
   312         tmp.removeFirst();
       
   313         m_roomsListModel->setRoomsList(tmp);
       
   314         if (m_private_game == false && m_nick_registered == false)
   320         if (m_private_game == false && m_nick_registered == false)
   315         {
   321         {
   316             emit NickNotRegistered(mynick);
   322             emit NickNotRegistered(mynick);
   317         }
   323         }
   318         return;
   324         return;
   396         tmp.removeFirst();
   402         tmp.removeFirst();
   397         emit bansList(tmp);
   403         emit bansList(tmp);
   398         return;
   404         return;
   399     }
   405     }
   400 
   406 
   401     if (lst[0] == "CLIENT_FLAGS")
   407     if (lst[0] == "CLIENT_FLAGS" || lst[0] == "CF")
   402     {
   408     {
   403         if(lst.size() < 3 || lst[1].size() < 2)
   409         if(lst.size() < 3 || lst[1].size() < 2)
   404         {
   410         {
   405             qWarning("Net: Malformed CLIENT_FLAGS message");
   411             qWarning("Net: Malformed CLIENT_FLAGS message");
   406             return;
   412             return;
   517             m_playersModel->addPlayer(lst[i], false);
   523             m_playersModel->addPlayer(lst[i], false);
   518         }
   524         }
   519         return;
   525         return;
   520     }
   526     }
   521 
   527 
   522     if(lst[0] == "ROOM" && lst.size() == 10 && lst[1] == "ADD")
   528     if(lst[0] == "ROOM" && lst.size() == 11 && lst[1] == "ADD")
   523     {
   529     {
   524         QStringList tmp = lst;
   530         QStringList tmp = lst;
   525         tmp.removeFirst();
   531         tmp.removeFirst();
   526         tmp.removeFirst();
   532         tmp.removeFirst();
   527 
   533 
   528         m_roomsListModel->addRoom(tmp);
   534         m_roomsListModel->addRoom(tmp);
   529         return;
   535         return;
   530     }
   536     }
   531 
   537 
   532     if(lst[0] == "ROOM" && lst.size() == 11 && lst[1] == "UPD")
   538     if(lst[0] == "ROOM" && lst.size() == 12 && lst[1] == "UPD")
   533     {
   539     {
   534         QStringList tmp = lst;
   540         QStringList tmp = lst;
   535         tmp.removeFirst();
   541         tmp.removeFirst();
   536         tmp.removeFirst();
   542         tmp.removeFirst();
   537 
   543 
   538         QString roomName = tmp.takeFirst();
   544         QString roomName = tmp.takeFirst();
   539         m_roomsListModel->updateRoom(roomName, tmp);
   545         m_roomsListModel->updateRoom(roomName, tmp);
   540 
   546 
   541         // keep track of room name so correct name is displayed
   547         // keep track of room name so correct name is displayed
   542         if(myroom == roomName)
   548         if(myroom == roomName && myroom != tmp[1])
   543         {
   549         {
   544             myroom = tmp[1];
   550             myroom = tmp[1];
   545             emit roomNameUpdated(myroom);
   551             emit roomNameUpdated(myroom);
   546         }
   552         }
   547 
   553 
   617         Disconnect();
   623         Disconnect();
   618         emit disconnected(HWApplication::translate("server", lst[1].toAscii().constData()));
   624         emit disconnected(HWApplication::translate("server", lst[1].toAscii().constData()));
   619         return;
   625         return;
   620     }
   626     }
   621 
   627 
   622     if (lst[0] == "ADMIN_ACCESS")
       
   623     {
       
   624         // obsolete, see +a client flag
       
   625         return;
       
   626     }
       
   627 
       
   628     if(lst[0] == "JOINING")
   628     if(lst[0] == "JOINING")
   629     {
   629     {
   630         if(lst.size() < 2)
   630         if(lst.size() != 2)
   631         {
   631         {
   632             qWarning("Net: Bad JOINING message");
   632             qWarning("Net: Bad JOINING message");
   633             return;
   633             return;
   634         }
   634         }
   635 
   635 
   636         myroom = lst[1];
   636         myroom = lst[1];
   637         emit roomNameUpdated(myroom);
   637         emit roomNameUpdated(myroom);
       
   638         return;
   638     }
   639     }
   639 
   640 
   640     if(netClientState == InLobby && lst[0] == "JOINED")
   641     if(netClientState == InLobby && lst[0] == "JOINED")
   641     {
   642     {
   642         if(lst.size() < 2 || lst[1] != mynick)
   643         if(lst.size() < 2 || lst[1] != mynick)
   808             else
   809             else
   809                 emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   810                 emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   810             m_playersModel->playerLeftRoom(lst[1]);
   811             m_playersModel->playerLeftRoom(lst[1]);
   811             return;
   812             return;
   812         }
   813         }
   813 
       
   814         // obsolete
       
   815         if (lst[0] == "ROOM_CONTROL_ACCESS")
       
   816         {
       
   817             if (lst.size() < 2)
       
   818             {
       
   819                 qWarning("Net: Bad ROOM_CONTROL_ACCESS message");
       
   820                 return;
       
   821             }
       
   822             return;
       
   823         }
       
   824     }
   814     }
   825 
   815 
   826     qWarning() << "Net: Unknown message or wrong state:" << lst;
   816     qWarning() << "Net: Unknown message or wrong state:" << lst;
   827 }
   817 }
   828 
   818 
  1063 void HWNewNet::handleNotice(int n)
  1053 void HWNewNet::handleNotice(int n)
  1064 {
  1054 {
  1065     switch(n)
  1055     switch(n)
  1066     {
  1056     {
  1067         case 0:
  1057         case 0:
  1068         {
       
  1069             emit NickTaken(mynick);
  1058             emit NickTaken(mynick);
  1070             break;
  1059             break;
  1071         }
  1060         case 2:
       
  1061             emit askForRoomPassword();
       
  1062             break;
  1072     }
  1063     }
  1073 }
  1064 }
  1074 
  1065 
  1075 RoomsListModel * HWNewNet::roomsListModel()
  1066 RoomsListModel * HWNewNet::roomsListModel()
  1076 {
  1067 {
  1084 
  1075 
  1085 QAbstractItemModel *HWNewNet::roomPlayersModel()
  1076 QAbstractItemModel *HWNewNet::roomPlayersModel()
  1086 {
  1077 {
  1087     return m_roomPlayersModel;
  1078     return m_roomPlayersModel;
  1088 }
  1079 }
       
  1080 
       
  1081 void HWNewNet::roomPasswordEntered(const QString &password)
       
  1082 {
       
  1083     if(!myroom.isEmpty())
       
  1084         JoinRoom(myroom, password);
       
  1085 }