mirror of
https://github.com/overte-org/overte.git
synced 2025-08-18 16:46:35 +02:00
One more piece of the datagram sequencing puzzle.
This commit is contained in:
parent
6357bd0019
commit
b986d91217
2 changed files with 12 additions and 18 deletions
|
@ -39,9 +39,9 @@ private:
|
|||
|
||||
Bitstream& DatagramSequencer::startPacket() {
|
||||
// start with the list of acknowledgements
|
||||
_outgoingPacketStream << (quint32)_receivedPacketNumbers.size();
|
||||
foreach (int packetNumber, _receivedPacketNumbers) {
|
||||
_outgoingPacketStream << (quint32)packetNumber;
|
||||
_outgoingPacketStream << (quint32)_receiveRecords.size();
|
||||
foreach (const ReceiveRecord& record, _receiveRecords) {
|
||||
_outgoingPacketStream << (quint32)record.packetNumber;
|
||||
}
|
||||
return _outputStream;
|
||||
}
|
||||
|
@ -92,8 +92,7 @@ void DatagramSequencer::receivedDatagram(const QByteArray& datagram) {
|
|||
if ((_remainingBytes -= _datagramBuffer.bytesAvailable()) > 0) {
|
||||
return;
|
||||
}
|
||||
_receivedPacketNumbers.append(_incomingPacketNumber);
|
||||
|
||||
|
||||
// read the list of acknowledged packets
|
||||
quint32 acknowledgementCount;
|
||||
_incomingPacketStream >> acknowledgementCount;
|
||||
|
@ -123,10 +122,11 @@ void DatagramSequencer::receivedDatagram(const QByteArray& datagram) {
|
|||
|
||||
void DatagramSequencer::sendRecordAcknowledged(const SendRecord& record) {
|
||||
// stop acknowledging the recorded packets (TODO: replace with interpolation search?)
|
||||
QList<int>::iterator it = qBinaryFind(_receivedPacketNumbers.begin(), _receivedPacketNumbers.end(),
|
||||
record.lastReceivedPacketNumber);
|
||||
if (it != _receivedPacketNumbers.end()) {
|
||||
_receivedPacketNumbers.erase(it + 1);
|
||||
ReceiveRecord compare = { record.lastReceivedPacketNumber };
|
||||
QList<ReceiveRecord>::iterator it = qBinaryFind(_receiveRecords.begin(), _receiveRecords.end(), compare);
|
||||
if (it != _receiveRecords.end()) {
|
||||
_inputStream.persistReadMappings(it->mappings);
|
||||
_receiveRecords.erase(it + 1);
|
||||
}
|
||||
_outputStream.persistWriteMappings(record.mappings);
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ void DatagramSequencer::sendPacket(const QByteArray& packet) {
|
|||
_outgoingPacketNumber++;
|
||||
|
||||
// record the send
|
||||
SendRecord record = { _outgoingPacketNumber, _receivedPacketNumbers.isEmpty() ? 0 : _receivedPacketNumbers.last(),
|
||||
SendRecord record = { _outgoingPacketNumber, _receiveRecords.isEmpty() ? 0 : _receiveRecords.last().packetNumber,
|
||||
_outputStream.getAndResetWriteMappings() };
|
||||
_sendRecords.append(record);
|
||||
|
||||
|
@ -164,6 +164,3 @@ void DatagramSequencer::sendPacket(const QByteArray& packet) {
|
|||
} while(offset < packet.size());
|
||||
}
|
||||
|
||||
void DatagramSequencer::packetAcknowledged(int packetNumber) {
|
||||
|
||||
}
|
||||
|
|
|
@ -57,6 +57,8 @@ private:
|
|||
public:
|
||||
int packetNumber;
|
||||
Bitstream::ReadMappings mappings;
|
||||
|
||||
bool operator<(const ReceiveRecord& other) const { return packetNumber < other.packetNumber; }
|
||||
};
|
||||
|
||||
/// Notes that the described send was acknowledged by the other party.
|
||||
|
@ -66,9 +68,6 @@ private:
|
|||
/// readyToWrite) as necessary.
|
||||
void sendPacket(const QByteArray& packet);
|
||||
|
||||
/// Handles the acknowledgement of a sent packet.
|
||||
void packetAcknowledged(int packetNumber);
|
||||
|
||||
QList<SendRecord> _sendRecords;
|
||||
QList<ReceiveRecord> _receiveRecords;
|
||||
|
||||
|
@ -88,8 +87,6 @@ private:
|
|||
Bitstream _inputStream;
|
||||
QSet<int> _offsetsReceived;
|
||||
int _remainingBytes;
|
||||
|
||||
QList<int> _receivedPacketNumbers;
|
||||
};
|
||||
|
||||
#endif /* defined(__interface__DatagramSequencer__) */
|
||||
|
|
Loading…
Reference in a new issue