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