mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 10:47:11 +02:00
cleanup NAK packets in OctreeInboundPacketProcessor
This commit is contained in:
parent
adacf3fd89
commit
c8a03ebff8
2 changed files with 21 additions and 28 deletions
|
@ -242,7 +242,8 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
return packetsSent;
|
return packetsSent;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto nackPacket { NLPacket::create(_myServer->getMyEditNackType(); }
|
PacketList nackPacketList = PacketList(_myServer->getMyEditNackType();
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
NodeToSenderStatsMapIterator i = _singleSenderStats.begin();
|
NodeToSenderStatsMapIterator i = _singleSenderStats.begin();
|
||||||
while (i != _singleSenderStats.end()) {
|
while (i != _singleSenderStats.end()) {
|
||||||
|
@ -271,37 +272,27 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
|
|
||||||
// construct nack packet(s) for this node
|
// construct nack packet(s) for this node
|
||||||
const QSet<unsigned short int>& missingSequenceNumbers = sequenceNumberStats.getMissingSet();
|
const QSet<unsigned short int>& missingSequenceNumbers = sequenceNumberStats.getMissingSet();
|
||||||
int numSequenceNumbersAvailable = missingSequenceNumbers.size();
|
|
||||||
QSet<unsigned short int>::const_iterator missingSequenceNumberIterator = missingSequenceNumbers.constBegin();
|
|
||||||
while (numSequenceNumbersAvailable > 0) {
|
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto it = missingSequenceNumbers.constBegin();
|
||||||
|
|
||||||
nackPacket->reset();
|
while (it != missingSequenceNumbers.constEnd()) {
|
||||||
|
unsigned short int sequenceNumber = *it;
|
||||||
// calculate and pack the number of sequence numbers to nack
|
nackPacketList->write(&sequenceNumber, sizeof(sequenceNumber));
|
||||||
int numSequenceNumbersRoomFor = (nackPacket->getCapacity() - sizeof(uint16_t)) / sizeof(unsigned short int);
|
++it;
|
||||||
uint16_t numSequenceNumbers = std::min(numSequenceNumbersAvailable, numSequenceNumbersRoomFor);
|
|
||||||
|
|
||||||
nackPacket->write(&numSequenceNumbers, sizeof(numSequenceNumbers));
|
|
||||||
|
|
||||||
// pack sequence numbers to nack
|
|
||||||
for (uint16_t i = 0; i < numSequenceNumbers; i++) {
|
|
||||||
unsigned short int sequenceNumber = *missingSequenceNumberIterator;
|
|
||||||
nackPacket->write(&sequenceNumber, sizeof(sequenceNumber));
|
|
||||||
|
|
||||||
missingSequenceNumberIterator++;
|
|
||||||
}
|
|
||||||
numSequenceNumbersAvailable -= numSequenceNumbers;
|
|
||||||
|
|
||||||
// send it
|
|
||||||
nodeList->sendUnreliablePacket(nackPacket, destinationNode);
|
|
||||||
packetsSent++;
|
|
||||||
|
|
||||||
qDebug() << "NACK Sent back to editor/client... destinationNode=" << nodeUUID;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nackPacketList.closeCurrentPacket();
|
||||||
|
|
||||||
|
packetsSent = nackPacketList.getNumPackets();
|
||||||
|
|
||||||
|
if (packetsSent) {
|
||||||
|
qDebug() << "NACK Sent back to editor/client... destinationNode=" << nodeUUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send the list of nack packets
|
||||||
|
nodeList->sendPacketList(nackPacketList, destinationNode);
|
||||||
|
|
||||||
return packetsSent;
|
return packetsSent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,8 @@ PacketVersion versionForPacketType(PacketType::Value packetType) {
|
||||||
case EntityEdit:
|
case EntityEdit:
|
||||||
case EntityData:
|
case EntityData:
|
||||||
return VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE;
|
return VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE;
|
||||||
|
case EntityEditNack:
|
||||||
|
return 1;
|
||||||
case EntityErase:
|
case EntityErase:
|
||||||
return 2;
|
return 2;
|
||||||
case AudioStreamStats:
|
case AudioStreamStats:
|
||||||
|
|
Loading…
Reference in a new issue