diff --git a/libraries/networking/src/SentPacketHistory.cpp b/libraries/networking/src/SentPacketHistory.cpp index 0ea7fd8b69..37c8953861 100644 --- a/libraries/networking/src/SentPacketHistory.cpp +++ b/libraries/networking/src/SentPacketHistory.cpp @@ -1,6 +1,6 @@ // // SentPacketHistory.cpp -// assignement-client/src/octree +// libraries/networking/src // // Created by Yixin Wang on 6/5/2014 // @@ -18,7 +18,7 @@ SentPacketHistory::SentPacketHistory(int size) { } -void SentPacketHistory::packetSent(OCTREE_PACKET_SEQUENCE sequenceNumber, const QByteArray& packet) { +void SentPacketHistory::packetSent(uint16_t sequenceNumber, const QByteArray& packet) { _newestSequenceNumber = sequenceNumber; // increment _newestPacketAt cyclically, insert new packet there. @@ -31,9 +31,18 @@ void SentPacketHistory::packetSent(OCTREE_PACKET_SEQUENCE sequenceNumber, const } -const QByteArray* SentPacketHistory::getPacket(OCTREE_PACKET_SEQUENCE sequenceNumber) const { - OCTREE_PACKET_SEQUENCE seqDiff = _newestSequenceNumber - sequenceNumber; - if (!(seqDiff >= 0 && seqDiff < _numExistingPackets)) { +const QByteArray* SentPacketHistory::getPacket(uint16_t sequenceNumber) const { + + const int UINT16_RANGE = UINT16_MAX + 1; + + // if sequenceNumber > _newestSequenceNumber, assume sequenceNumber is from before the most recent rollover + // correct the diff so that it correctly represents how far back in the history sequenceNumber is + int seqDiff = (int)_newestSequenceNumber - (int)sequenceNumber; + if (seqDiff < 0) { + seqDiff += UINT16_RANGE; + } + // if desired sequence number is too old to be found in the history, return null + if (seqDiff >= _numExistingPackets) { return NULL; } int packetAt = _newestPacketAt - seqDiff; diff --git a/libraries/networking/src/SentPacketHistory.h b/libraries/networking/src/SentPacketHistory.h index 4231400ac1..e3c7736b72 100644 --- a/libraries/networking/src/SentPacketHistory.h +++ b/libraries/networking/src/SentPacketHistory.h @@ -1,6 +1,6 @@ // // SentPacketHistory.h -// assignement-client/src/octree +// libraries/networking/src // // Created by Yixin Wang on 6/5/2014 // @@ -11,25 +11,24 @@ #ifndef hifi_SentPacketHistory_h #define hifi_SentPacketHistory_h +#include #include #include -#include "OctreePacketData.h" - class SentPacketHistory { public: SentPacketHistory(int size); - void packetSent(OCTREE_PACKET_SEQUENCE sequenceNumber, const QByteArray& packet); - const QByteArray* getPacket(OCTREE_PACKET_SEQUENCE sequenceNumber) const; + void packetSent(uint16_t sequenceNumber, const QByteArray& packet); + const QByteArray* getPacket(uint16_t sequenceNumber) const; private: QVector _sentPackets; // circular buffer int _newestPacketAt; int _numExistingPackets; - OCTREE_PACKET_SEQUENCE _newestSequenceNumber; + uint16_t _newestSequenceNumber; }; #endif diff --git a/libraries/octree/src/OctreeEditPacketSender.h b/libraries/octree/src/OctreeEditPacketSender.h index 2586ca034f..a737131dff 100644 --- a/libraries/octree/src/OctreeEditPacketSender.h +++ b/libraries/octree/src/OctreeEditPacketSender.h @@ -133,7 +133,7 @@ protected: unsigned short int _sequenceNumber; int _maxPacketSize; - // TODO: garbage-collect this + // TODO: garbage-collect this and _pendingEditPackets QHash _nackedPacketHistories; }; #endif // hifi_OctreeEditPacketSender_h