edit nacks ready for test; seq numbers sometimes repeat??

This commit is contained in:
wangyix 2014-06-16 17:17:48 -07:00
parent e3db60d1ef
commit 06f8464ec9
3 changed files with 18 additions and 11 deletions

View file

@ -194,8 +194,6 @@ void OctreeInboundPacketProcessor::trackInboundPacket(const QUuid& nodeUUID, uns
int OctreeInboundPacketProcessor::sendNackPackets() {
printf("\t\t sendNackPackets()\n");
int packetsSent = 0;
NodeToSenderStatsMapIterator i = _singleSenderStats.begin();
@ -336,7 +334,9 @@ printf("\t\t tracked seq %d\n", incomingSequence);
printf("\t\t\t packet is late!\n");
// remove this from missing sequence number if it's in there
_missingSequenceNumbers.remove(incomingSequence);
if (_missingSequenceNumbers.remove(incomingSequence)) {
printf("\t\t\t\t packet %d recovered!!!\n", incomingSequence);
}
// do not update _incomingLastSequence
}

View file

@ -19,6 +19,12 @@ SentPacketHistory::SentPacketHistory(int size)
}
void SentPacketHistory::packetSent(uint16_t sequenceNumber, const QByteArray& packet) {
if (sequenceNumber != 0 && sequenceNumber != _newestSequenceNumber + 1) {
printf("\t packet history received unexpected seq number! prev: %d received: %d\n", _newestSequenceNumber, sequenceNumber);
}
_newestSequenceNumber = sequenceNumber;
// increment _newestPacketAt cyclically, insert new packet there.

View file

@ -97,6 +97,9 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, const unsi
((node->getUUID() == nodeUUID) || (nodeUUID.isNull()))) {
if (node->getActiveSocket()) {
QByteArray packet(reinterpret_cast<const char*>(buffer), length);
bool send = randFloat() < 0.7f;
if (send)
queuePacketForSending(node, packet);
// extract sequence number and add packet to history
@ -105,6 +108,10 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, const unsi
unsigned short int sequence = (*((unsigned short int*)(dataAt + numBytesPacketHeader)));
_sentPacketHistories[nodeUUID].packetSent(sequence, packet);
if (!send) {
printf("\t\t dropped packet %d !!!\n", sequence);
}
// debugging output...
bool wantDebugging = false;
if (wantDebugging) {
@ -314,14 +321,7 @@ void OctreeEditPacketSender::initializePacket(EditPacketBuffer& packetBuffer, Pa
unsigned short int* sequenceAt = (unsigned short int*)&packetBuffer._currentBuffer[packetBuffer._currentSize];
*sequenceAt = _sequenceNumber;
packetBuffer._currentSize += sizeof(unsigned short int); // nudge past sequence
if (randFloat() < 0.6f)
_sequenceNumber++;
else
{
int x = randIntInRange(2, 4);
printf("\t\t seq number jumped from %d to %d\n", _sequenceNumber, _sequenceNumber + x);
_sequenceNumber += x;
}
// pack in timestamp
quint64 now = usecTimestampNow();
@ -368,7 +368,8 @@ void OctreeEditPacketSender::processNackPacket(const QByteArray& packet) {
// retrieve packet from history
const QByteArray* packet = sentPacketHistory.getPacket(sequenceNumber);
if (packet) {
queuePacketToNode(sendingNodeUUID, (const unsigned char*)packet->constData(), packet->length());
const SharedNodePointer& node = NodeList::getInstance()->getNodeHash().value(sendingNodeUUID);
queuePacketForSending(node, *packet);
}
}
}