mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 14:33:31 +02:00
completed code to resend nacked packets on AC
This commit is contained in:
parent
1a7e3a859c
commit
5461a06e99
4 changed files with 26 additions and 22 deletions
|
@ -364,7 +364,7 @@ void OctreeQueryNode::dumpOutOfView() {
|
|||
}
|
||||
}
|
||||
|
||||
void OctreeQueryNode::packetSent() {
|
||||
void OctreeQueryNode::octreePacketSent() {
|
||||
packetSent(_octreePacket, getPacketLength());
|
||||
}
|
||||
|
||||
|
@ -379,18 +379,18 @@ void OctreeQueryNode::packetSent(const QByteArray& packet) {
|
|||
|
||||
|
||||
void OctreeQueryNode::addSequenceNumbersToResend(const QList<OCTREE_PACKET_SEQUENCE>& sequenceNumbers) {
|
||||
_sequenceNumbersToResend.append(sequenceNumbers);
|
||||
_nackedSequenceNumbers.append(sequenceNumbers);
|
||||
}
|
||||
|
||||
bool OctreeQueryNode::hasNextPacketToResend() const {
|
||||
return !_sequenceNumbersToResend.isEmpty();
|
||||
bool OctreeQueryNode::hasNextNackedPacket() const {
|
||||
return !_nackedSequenceNumbers.isEmpty();
|
||||
}
|
||||
|
||||
const QByteArray* OctreeQueryNode::getNextPacketToResend() {
|
||||
const QByteArray* OctreeQueryNode::getNextNackedPacket() {
|
||||
|
||||
if (!_sequenceNumbersToResend.isEmpty()) {
|
||||
const QByteArray* nextPacket = _sentPacketHistory.getPacket(_sequenceNumbersToResend.first());
|
||||
_sequenceNumbersToResend.pop_front();
|
||||
if (!_nackedSequenceNumbers.isEmpty()) {
|
||||
const QByteArray* nextPacket = _sentPacketHistory.getPacket(_nackedSequenceNumbers.first());
|
||||
_nackedSequenceNumbers.pop_front();
|
||||
return nextPacket; // could be null
|
||||
}
|
||||
return NULL;
|
||||
|
|
|
@ -103,15 +103,15 @@ public:
|
|||
void forceNodeShutdown();
|
||||
bool isShuttingDown() const { return _isShuttingDown; }
|
||||
|
||||
void packetSent();
|
||||
void octreePacketSent();
|
||||
void packetSent(unsigned char* packet, int packetLength);
|
||||
void packetSent(const QByteArray& packet);
|
||||
|
||||
OCTREE_PACKET_SEQUENCE getSequenceNumber() const { return _sequenceNumber; }
|
||||
|
||||
void addSequenceNumbersToResend(const QList<OCTREE_PACKET_SEQUENCE>& sequenceNumbers);
|
||||
bool hasNextPacketToResend() const;
|
||||
const QByteArray* getNextPacketToResend();
|
||||
bool hasNextNackedPacket() const;
|
||||
const QByteArray* getNextNackedPacket();
|
||||
|
||||
private slots:
|
||||
void sendThreadFinished();
|
||||
|
@ -157,7 +157,7 @@ private:
|
|||
bool _isShuttingDown;
|
||||
|
||||
SentPacketHistory _sentPacketHistory;
|
||||
QQueue<OCTREE_PACKET_SEQUENCE> _sequenceNumbersToResend;
|
||||
QQueue<OCTREE_PACKET_SEQUENCE> _nackedSequenceNumbers;
|
||||
};
|
||||
|
||||
#endif // hifi_OctreeQueryNode_h
|
||||
|
|
|
@ -85,6 +85,7 @@ bool OctreeSendThread::process() {
|
|||
if (nodeData && !nodeData->isShuttingDown()) {
|
||||
bool viewFrustumChanged = nodeData->updateCurrentViewFrustum();
|
||||
packetDistributor(nodeData, viewFrustumChanged);
|
||||
resendNackedPackets(nodeData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -274,7 +275,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
trueBytesSent += nodeData->getPacketLength();
|
||||
truePacketsSent++;
|
||||
packetsSent++;
|
||||
nodeData->packetSent();
|
||||
nodeData->octreePacketSent();
|
||||
nodeData->resetOctreePacket();
|
||||
}
|
||||
|
||||
|
@ -287,11 +288,14 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
|
||||
int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) {
|
||||
|
||||
const int maxPacketsSent = 10;
|
||||
|
||||
int packetsSent = 0;
|
||||
|
||||
const QByteArray* packet;
|
||||
while (nodeData->hasNextPacketToResend()) {
|
||||
packet = nodeData->getNextPacketToResend();
|
||||
while (nodeData->hasNextNackedPacket() && packetsSent < maxPacketsSent) {
|
||||
packet = nodeData->getNextNackedPacket();
|
||||
// packet will be NULL if it's not in nodeData's packet history
|
||||
if (packet) {
|
||||
NodeList::getInstance()->writeDatagram(*packet, _node);
|
||||
packetsSent++;
|
||||
|
@ -302,7 +306,9 @@ int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) {
|
|||
_totalWastedBytes += MAX_PACKET_SIZE - packet->size(); // ???
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printf("\t\t re-sent %d packets!\n", packetsSent);
|
||||
return packetsSent;
|
||||
}
|
||||
|
||||
|
||||
|
@ -310,11 +316,6 @@ int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// Version of voxel distributor that sends the deepest LOD level at once
|
||||
int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrustumChanged) {
|
||||
|
||||
|
|
|
@ -861,8 +861,11 @@ dataAt += sizeof(uint16_t);
|
|||
// read sequence numbers
|
||||
QList<OCTREE_PACKET_SEQUENCE> sequenceNumbers;
|
||||
for (int i = 0; i < numSequenceNumbers; i++) {
|
||||
sequenceNumbers.append(*(OCTREE_PACKET_SEQUENCE*)dataAt);
|
||||
OCTREE_PACKET_SEQUENCE sequenceNumber = (*(OCTREE_PACKET_SEQUENCE*)dataAt);
|
||||
sequenceNumbers.append(sequenceNumber);
|
||||
dataAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||
|
||||
printf("\t\t\t nacked packet: seq = %d\n", sequenceNumber);
|
||||
}
|
||||
|
||||
OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData(); // move this or something
|
||||
|
|
Loading…
Reference in a new issue