Esempio n. 1
0
void FrostbiteConnection::handlePacket(const FrostbiteRconPacket &packet)
{
    if (packet.isResponse()) {
        QVector<FrostbiteRconPacket>::iterator it;

        for (it = packetSendQueue.begin(); it < packetSendQueue.end(); it++) {
            if (it->getSequenceNum() == packet.getSequenceNum()) {
                break;
            }
        }

        if (it != packetSendQueue.end()) {
            const FrostbiteRconPacket &lastSentPacket = *it;
            QString request = lastSentPacket.getWord(0).getContent();

            if (packet.getWordCount() > 0) {
                QString messages = request + " ";

                for (unsigned int i = 1; i < lastSentPacket.getWordCount(); i++) {
                    messages += lastSentPacket.getWord(i).getContent();
                    messages += " ";
                }

                responseDataSent(messages);
                qDebug() << messages;

                QString messager;

                for (unsigned int i = 0; i < packet.getWordCount(); i++) {
                    messager += packet.getWord(i).getContent();
                    messager += " ";
                }

                responseDataReceived(messager);
                qDebug() << messager;

                commandHandler->parse(request, packet, lastSentPacket);
            }

            // BIG MISTAKE HERE: packetSendQueue.erase(it);
            for (it = packetSendQueue.begin(); it < packetSendQueue.end(); it++) {
                if (it->getSequenceNum() == packet.getSequenceNum()) {
                    packetSendQueue.erase(it);
                    break;
                }
            }
        }
    } else {
        QString request = packet.getWord(0).getContent();
        QString message;

        for (unsigned int i = 0; i < packet.getWordCount(); i++) {
            message += packet.getWord(i).getContent();
            message += " ";
        }

        responseDataSent(message);
        qDebug() << message;

        commandHandler->parse(request, packet, FrostbiteRconPacket());
    }
}