BUGZ-1046 - send entity packets reliably for initial query

This commit is contained in:
Roxanne Skelly 2019-07-31 16:59:21 -07:00
parent b81d0ecce3
commit a991b6d619
5 changed files with 13 additions and 6 deletions

View file

@ -160,6 +160,11 @@ bool EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
if (sendComplete && nodeData->wantReportInitialCompletion() && _traversal.finished()) {
// Dealt with all nearby entities.
nodeData->setReportInitialCompletion(false);
// initial stats and entity packets are reliable until the initial query is complete
// to guarantee all entity data is available for safe landing/physics start. Afterwards
// the packets are unreliable for performance.
nodeData->stats.getStatsMessage().setReliable(false);
nodeData->getPacket().setReliable(false);
// Send EntityQueryInitialResultsComplete reliable packet ...
auto initialCompletion = NLPacket::create(PacketType::EntityQueryInitialResultsComplete,

View file

@ -194,13 +194,13 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
// actually send it
OctreeServer::didCallWriteDatagram(this);
DependencyManager::get<NodeList>()->sendUnreliablePacket(statsPacket, *node);
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(statsPacket), *node);
} else {
// not enough room in the packet, send two packets
// first packet
OctreeServer::didCallWriteDatagram(this);
DependencyManager::get<NodeList>()->sendUnreliablePacket(statsPacket, *node);
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(statsPacket), *node);
int numBytes = statsPacket.getDataSize();
_totalBytes += numBytes;
@ -230,7 +230,7 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
// second packet
OctreeServer::didCallWriteDatagram(this);
DependencyManager::get<NodeList>()->sendUnreliablePacket(sentPacket, *node);
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(sentPacket), *node);
numBytes = sentPacket.getDataSize();
_totalBytes += numBytes;
@ -263,7 +263,8 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
// just send the octree packet
OctreeServer::didCallWriteDatagram(this);
NLPacket& sentPacket = nodeData->getPacket();
DependencyManager::get<NodeList>()->sendUnreliablePacket(sentPacket, *node);
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(sentPacket), *node);
int numBytes = sentPacket.getDataSize();
_totalBytes += numBytes;

View file

@ -83,6 +83,7 @@ public:
bool isPartOfMessage() const { return _isPartOfMessage; }
bool isReliable() const { return _isReliable; }
void setReliable(bool reliable) { _isReliable = reliable; }
ObfuscationLevel getObfuscationLevel() const { return _obfuscationLevel; }
SequenceNumber getSequenceNumber() const { return _sequenceNumber; }

View file

@ -82,7 +82,7 @@ bool OctreeQueryNode::shouldSuppressDuplicatePacket() {
void OctreeQueryNode::init() {
_myPacketType = getMyPacketType();
_octreePacket = NLPacket::create(getMyPacketType());
_octreePacket = NLPacket::create(getMyPacketType(), -1, true);
resetOctreePacket(); // don't bump sequence
}

View file

@ -169,7 +169,7 @@ private:
bool _isReadyToSend;
std::unique_ptr<NLPacket> _statsPacket = NLPacket::create(PacketType::OctreeStats);
std::unique_ptr<NLPacket> _statsPacket = NLPacket::create(PacketType::OctreeStats, -1, true);
// scene timing data in usecs
bool _isStarted;