QTfrontend/newnetclient.cpp
changeset 6036 727d13409891
parent 6024 d38da7c19e43
equal deleted inserted replaced
6034:8cdfac630261 6036:727d13409891
    35 
    35 
    36 HWNewNet::HWNewNet() :
    36 HWNewNet::HWNewNet() :
    37   isChief(false),
    37   isChief(false),
    38   m_game_connected(false),
    38   m_game_connected(false),
    39   loginStep(0),
    39   loginStep(0),
    40   netClientState(0)
    40   netClientState(Disconnected)
    41 {
    41 {
    42 // socket stuff
    42 // socket stuff
    43     connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
    43     connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
    44     connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect()));
    44     connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect()));
    45     connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect()));
    45     connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect()));
    50 HWNewNet::~HWNewNet()
    50 HWNewNet::~HWNewNet()
    51 {
    51 {
    52     if (m_game_connected)
    52     if (m_game_connected)
    53     {
    53     {
    54         RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
    54         RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
    55         emit Disconnected(tr("User quit"));
    55         emit disconnected(tr("User quit"));
    56     }
    56     }
    57     NetSocket.flush();
    57     NetSocket.flush();
    58 }
    58 }
    59 
    59 
    60 void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick)
    60 void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick)
    61 {
    61 {
       
    62     netClientState = Connecting;
    62     mynick = nick;
    63     mynick = nick;
    63     myhost = hostName + QString(":%1").arg(port);
    64     myhost = hostName + QString(":%1").arg(port);
    64     NetSocket.connectToHost(hostName, port);
    65     NetSocket.connectToHost(hostName, port);
    65 }
    66 }
    66 
    67 
    73     NetSocket.disconnectFromHost();
    74     NetSocket.disconnectFromHost();
    74 }
    75 }
    75 
    76 
    76 void HWNewNet::CreateRoom(const QString & room)
    77 void HWNewNet::CreateRoom(const QString & room)
    77 {
    78 {
    78     if(netClientState != 2)
    79     if(netClientState != InLobby)
    79     {
    80     {
    80         qWarning("Illegal try to create room!");
    81         qWarning("Illegal try to create room!");
    81         return;
    82         return;
    82     }
    83     }
    83 
    84 
    87     isChief = true;
    88     isChief = true;
    88 }
    89 }
    89 
    90 
    90 void HWNewNet::JoinRoom(const QString & room)
    91 void HWNewNet::JoinRoom(const QString & room)
    91 {
    92 {
    92     if(netClientState != 2)
    93     if(netClientState != InLobby)
    93     {
    94     {
    94         qWarning("Illegal try to join room!");
    95         qWarning("Illegal try to join room!");
    95         return;
    96         return;
    96     }
    97     }
    97 
    98 
   170     }
   171     }
   171 }
   172 }
   172 
   173 
   173 void HWNewNet::OnConnect()
   174 void HWNewNet::OnConnect()
   174 {
   175 {
       
   176     netClientState = Connected;
   175 }
   177 }
   176 
   178 
   177 void HWNewNet::OnDisconnect()
   179 void HWNewNet::OnDisconnect()
   178 {
   180 {
   179     if(m_game_connected) emit Disconnected("");
   181     netClientState = Disconnected;
       
   182     if(m_game_connected) emit disconnected("");
   180     m_game_connected = false;
   183     m_game_connected = false;
   181 }
   184 }
   182 
   185 
   183 void HWNewNet::displayError(QAbstractSocket::SocketError socketError)
   186 void HWNewNet::displayError(QAbstractSocket::SocketError socketError)
   184 {
   187 {
   186 
   189 
   187     switch (socketError) {
   190     switch (socketError) {
   188         case QAbstractSocket::RemoteHostClosedError:
   191         case QAbstractSocket::RemoteHostClosedError:
   189             break;
   192             break;
   190         case QAbstractSocket::HostNotFoundError:
   193         case QAbstractSocket::HostNotFoundError:
   191             emit Disconnected(tr("The host was not found. Please check the host name and port settings."));
   194             emit disconnected(tr("The host was not found. Please check the host name and port settings."));
   192             break;
   195             break;
   193         case QAbstractSocket::ConnectionRefusedError:
   196         case QAbstractSocket::ConnectionRefusedError:
   194             emit Disconnected(tr("Connection refused"));
   197             emit disconnected(tr("Connection refused"));
   195             break;
   198             break;
   196         default:
   199         default:
   197             emit Disconnected(NetSocket.errorString());
   200             emit disconnected(NetSocket.errorString());
   198         }
   201         }
   199 }
   202 }
   200 
   203 
   201 void HWNewNet::SendPasswordHash(const QString & hash)
   204 void HWNewNet::SendPasswordHash(const QString & hash)
   202 {
   205 {
   245             qWarning() << "Server too old";
   248             qWarning() << "Server too old";
   246         }
   249         }
   247 
   250 
   248         RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick));
   251         RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick));
   249         RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer));
   252         RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer));
   250         netClientState = 1;
   253         netClientState = Connected;
   251         m_game_connected = true;
   254         m_game_connected = true;
   252         emit adminAccess(false);
   255         emit adminAccess(false);
   253         return;
   256         return;
   254     }
   257     }
   255 
   258 
   282         if(lst.size() < 3)
   285         if(lst.size() < 3)
   283         {
   286         {
   284             qWarning("Net: Empty CHAT message");
   287             qWarning("Net: Empty CHAT message");
   285             return;
   288             return;
   286         }
   289         }
   287         if (netClientState == 2)
   290         if (netClientState == InLobby)
   288             emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
   291             emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
   289         else
   292         else
   290             emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
   293             emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
   291         return;
   294         return;
   292     }
   295     }
   297             qWarning("Net: Malformed INFO message");
   300             qWarning("Net: Malformed INFO message");
   298             return;
   301             return;
   299         }
   302         }
   300         QStringList tmp = lst;
   303         QStringList tmp = lst;
   301         tmp.removeFirst();
   304         tmp.removeFirst();
   302         if (netClientState == 2)
   305         if (netClientState == InLobby)
   303             emit chatStringLobby(tmp.join("\n").prepend('\x01'));
   306             emit chatStringLobby(tmp.join("\n").prepend('\x01'));
   304         else
   307         else
   305             emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
   308             emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
   306         return;
   309         return;
   307     }
   310     }
   375         emit RemoveNetTeam(HWTeam(lst[1]));
   378         emit RemoveNetTeam(HWTeam(lst[1]));
   376         return;
   379         return;
   377     }
   380     }
   378 
   381 
   379     if(lst[0] == "ROOMABANDONED") {
   382     if(lst[0] == "ROOMABANDONED") {
   380         netClientState = 2;
   383         netClientState = InLobby;
   381         emit LeftRoom(tr("Room destroyed"));
   384         emit LeftRoom(tr("Room destroyed"));
   382         return;
   385         return;
   383     }
   386     }
   384 
   387 
   385     if(lst[0] == "KICKED") {
   388     if(lst[0] == "KICKED") {
   386         netClientState = 2;
   389         netClientState = InLobby;
   387         emit LeftRoom(tr("You got kicked"));
   390         emit LeftRoom(tr("You got kicked"));
   388         return;
   391         return;
   389     }
   392     }
   390 
   393 
   391     if(lst[0] == "JOINED") {
   394     if(lst[0] == "JOINED") {
   397 
   400 
   398         for(int i = 1; i < lst.size(); ++i)
   401         for(int i = 1; i < lst.size(); ++i)
   399         {
   402         {
   400             if (lst[i] == mynick)
   403             if (lst[i] == mynick)
   401             {
   404             {
   402                 netClientState = 3;
   405                 netClientState = InRoom;
   403                 emit EnteredGame();
   406                 emit EnteredGame();
   404                 emit roomMaster(isChief);
   407                 emit roomMaster(isChief);
   405                 if (isChief)
   408                 if (isChief)
   406                     emit configAsked();
   409                     emit configAsked();
   407             }
   410             }
   408             // TODO reactivate
   411 
   409 /*
   412             emit nickAdded(lst[i], isChief && (lst[i] != mynick));
   410             if (lst[i] != mynick && isChief && config->Form->ui.pageRoomsList->chatWidget->ignoreList.contains(lst[i], Qt::CaseInsensitive) && !config->Form->ui.pageRoomsList->chatWidget->friendsList.contains(lst[i], Qt::CaseInsensitive))
   413             emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
   411             {
       
   412                 kickPlayer(lst[i]);
       
   413             }
       
   414             else
       
   415 */
       
   416             {
       
   417                 emit nickAdded(lst[i], isChief && (lst[i] != mynick));
       
   418                 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
       
   419             }
       
   420         }
   414         }
   421         return;
   415         return;
   422     }
   416     }
   423 
   417 
   424     if(lst[0] == "LOBBY:JOINED") {
   418     if(lst[0] == "LOBBY:JOINED") {
   430 
   424 
   431         for(int i = 1; i < lst.size(); ++i)
   425         for(int i = 1; i < lst.size(); ++i)
   432         {
   426         {
   433             if (lst[i] == mynick)
   427             if (lst[i] == mynick)
   434             {
   428             {
   435                 netClientState = 2;
   429                 netClientState = InLobby;
   436                 RawSendNet(QString("LIST"));
   430                 RawSendNet(QString("LIST"));
   437                 emit Connected();
   431                 emit connected();
   438             }
   432             }
   439 
   433 
   440             emit nickAddedLobby(lst[i], false);
   434             emit nickAddedLobby(lst[i], false);
   441             emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
   435             emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
   442         }
   436         }
   480             emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   474             emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
   481         return;
   475         return;
   482     }
   476     }
   483 
   477 
   484     if (lst[0] == "RUN_GAME") {
   478     if (lst[0] == "RUN_GAME") {
   485         netClientState = 5;
   479         netClientState = InGame;
   486         emit AskForRunGame();
   480         emit AskForRunGame();
   487         return;
   481         return;
   488     }
   482     }
   489 
   483 
   490     if (lst[0] == "ASKPASSWORD") {
   484     if (lst[0] == "ASKPASSWORD") {
   587         {
   581         {
   588             emit AuthFailed();
   582             emit AuthFailed();
   589         }
   583         }
   590         m_game_connected = false;
   584         m_game_connected = false;
   591         Disconnect();
   585         Disconnect();
   592         emit Disconnected(lst[1]);
   586         emit disconnected(lst[1]);
   593         return;
   587         return;
   594     }
   588     }
   595 
   589 
   596 
   590 
   597     if (lst[0] == "ADMIN_ACCESS") {
   591     if (lst[0] == "ADMIN_ACCESS") {
   663     RawSendNet(QString("TEAMCHAT") + delimeter + str);
   657     RawSendNet(QString("TEAMCHAT") + delimeter + str);
   664 }
   658 }
   665 
   659 
   666 void HWNewNet::askRoomsList()
   660 void HWNewNet::askRoomsList()
   667 {
   661 {
   668     if(netClientState != 2)
   662     if(netClientState != InLobby)
   669     {
   663     {
   670         qWarning("Illegal try to get rooms list!");
   664         qWarning("Illegal try to get rooms list!");
   671         return;
   665         return;
   672     }
   666     }
   673     RawSendNet(QString("LIST"));
   667     RawSendNet(QString("LIST"));
   674 }
   668 }
   675 
   669 
   676 int HWNewNet::getClientState()
   670 HWNewNet::ClientState HWNewNet::clientState()
   677 {
   671 {
   678     return netClientState;
   672     return netClientState;
   679 }
   673 }
   680 
   674 
   681 QString HWNewNet::getNick()
   675 QString HWNewNet::getNick()
   698     return isChief;
   692     return isChief;
   699 }
   693 }
   700 
   694 
   701 void HWNewNet::gameFinished(bool correctly)
   695 void HWNewNet::gameFinished(bool correctly)
   702 {
   696 {
   703     if (netClientState == 5) netClientState = 3;
   697     if (netClientState == InGame) netClientState = InRoom;
   704     RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0"));
   698     RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0"));
   705 }
   699 }
   706 
   700 
   707 void HWNewNet::banPlayer(const QString & nick)
   701 void HWNewNet::banPlayer(const QString & nick)
   708 {
   702 {
   753     RawSendNet(QString("CLEAR_ACCOUNTS_CACHE"));
   747     RawSendNet(QString("CLEAR_ACCOUNTS_CACHE"));
   754 }
   748 }
   755 
   749 
   756 void HWNewNet::partRoom()
   750 void HWNewNet::partRoom()
   757 {
   751 {
   758     netClientState = 2;
   752     netClientState = InLobby;
   759     RawSendNet(QString("PART"));
   753     RawSendNet(QString("PART"));
   760 }
   754 }
   761 
   755 
   762 bool HWNewNet::isInRoom()
   756 bool HWNewNet::isInRoom()
   763 {
   757 {
   764     return netClientState > 2;
   758     return netClientState >= InRoom;
   765 }
   759 }
   766 
   760 
   767 void HWNewNet::setServerMessageNew(const QString & msg)
   761 void HWNewNet::setServerMessageNew(const QString & msg)
   768 {
   762 {
   769     RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg));
   763     RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg));