void Server::processMessage(QString address, int port, QString message){ // qDebug() << "\nServer::processMessage()"; int playerIndex = getPlayerIndex(address, port); Q_ASSERT(playerIndex >=0); if(networkAnswers[playerIndex].isEmpty()){ nbNetworkAnswers++; } else{ qDebug() << "Server::processMessage() : SUPER WEIRD, player sent first message " << networkAnswers[playerIndex] << " then message " << message; } networkAnswers[playerIndex] = message; // qDebug() << "Player " << playerIndex << " : " << message; // Send immediate feedback switch(waitingForMessage){ case(WAITING_FOR_MESSAGE::INFO): if(rxPlayerName.indexIn(message)>=0){ emit playerName(playerIndex, rxPlayerName.cap(1)); } if(rxStatusAvailable.indexIn(message) >= 0){ emit playerAvailable(playerIndex, true); } else{ emit playerAvailable(playerIndex, false); } break; case(WAITING_FOR_MESSAGE::START): if(rxReady.indexIn(message) >= 0){ emit playerReady(playerIndex, true); } else{ emit playerReady(playerIndex, false); } break; case(WAITING_FOR_MESSAGE::PLAY): moves[playerIndex] = message; emit outputPlayerMessage(playerIndex, message); break; case(WAITING_FOR_MESSAGE::DONE): if(message != "done"){ manageError(address, port, QAbstractSocket::UnknownSocketError); } emit outputPlayerMessage(playerIndex, message); break; default: break; } // if(nbNetworkAnswers == addresses.size()){ // Finish the job // qDebug() << "Server::processMessage() : Got all the messages"; handleTransition(); } }
Network::Network(QTcpSocket *sock, int id) : mysocket(sock), commandStarted(false), myid(id) { connect(socket(), SIGNAL(readyRead()), this, SLOT(onReceipt())); connect(socket(), SIGNAL(disconnected()), this, SIGNAL(disconnected())); connect(socket(), SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(manageError(QAbstractSocket::SocketError))); /* SO THE SOCKET IS SAFELY DELETED LATER WHEN DISCONNECTED! */ connect(socket(), SIGNAL(disconnected()), socket(), SLOT(deleteLater())); connect(this, SIGNAL(destroyed()), socket(), SLOT(deleteLater())); }
void MadNet::run(){ QObject::connect(&socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(manageError(QAbstractSocket::SocketError))); }