mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 12:08:54 +02:00
BUGZ-1046 - send entity packets reliably for initial query
This commit is contained in:
parent
b81d0ecce3
commit
a991b6d619
5 changed files with 13 additions and 6 deletions
|
@ -160,6 +160,11 @@ bool EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
|
||||||
if (sendComplete && nodeData->wantReportInitialCompletion() && _traversal.finished()) {
|
if (sendComplete && nodeData->wantReportInitialCompletion() && _traversal.finished()) {
|
||||||
// Dealt with all nearby entities.
|
// Dealt with all nearby entities.
|
||||||
nodeData->setReportInitialCompletion(false);
|
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 ...
|
// Send EntityQueryInitialResultsComplete reliable packet ...
|
||||||
auto initialCompletion = NLPacket::create(PacketType::EntityQueryInitialResultsComplete,
|
auto initialCompletion = NLPacket::create(PacketType::EntityQueryInitialResultsComplete,
|
||||||
|
|
|
@ -194,13 +194,13 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
|
||||||
|
|
||||||
// actually send it
|
// actually send it
|
||||||
OctreeServer::didCallWriteDatagram(this);
|
OctreeServer::didCallWriteDatagram(this);
|
||||||
DependencyManager::get<NodeList>()->sendUnreliablePacket(statsPacket, *node);
|
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(statsPacket), *node);
|
||||||
} else {
|
} else {
|
||||||
// not enough room in the packet, send two packets
|
// not enough room in the packet, send two packets
|
||||||
|
|
||||||
// first packet
|
// first packet
|
||||||
OctreeServer::didCallWriteDatagram(this);
|
OctreeServer::didCallWriteDatagram(this);
|
||||||
DependencyManager::get<NodeList>()->sendUnreliablePacket(statsPacket, *node);
|
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(statsPacket), *node);
|
||||||
|
|
||||||
int numBytes = statsPacket.getDataSize();
|
int numBytes = statsPacket.getDataSize();
|
||||||
_totalBytes += numBytes;
|
_totalBytes += numBytes;
|
||||||
|
@ -230,7 +230,7 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
|
||||||
|
|
||||||
// second packet
|
// second packet
|
||||||
OctreeServer::didCallWriteDatagram(this);
|
OctreeServer::didCallWriteDatagram(this);
|
||||||
DependencyManager::get<NodeList>()->sendUnreliablePacket(sentPacket, *node);
|
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(sentPacket), *node);
|
||||||
|
|
||||||
numBytes = sentPacket.getDataSize();
|
numBytes = sentPacket.getDataSize();
|
||||||
_totalBytes += numBytes;
|
_totalBytes += numBytes;
|
||||||
|
@ -263,7 +263,8 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode*
|
||||||
// just send the octree packet
|
// just send the octree packet
|
||||||
OctreeServer::didCallWriteDatagram(this);
|
OctreeServer::didCallWriteDatagram(this);
|
||||||
NLPacket& sentPacket = nodeData->getPacket();
|
NLPacket& sentPacket = nodeData->getPacket();
|
||||||
DependencyManager::get<NodeList>()->sendUnreliablePacket(sentPacket, *node);
|
|
||||||
|
DependencyManager::get<NodeList>()->sendPacket(NLPacket::createCopy(sentPacket), *node);
|
||||||
|
|
||||||
int numBytes = sentPacket.getDataSize();
|
int numBytes = sentPacket.getDataSize();
|
||||||
_totalBytes += numBytes;
|
_totalBytes += numBytes;
|
||||||
|
|
|
@ -83,6 +83,7 @@ public:
|
||||||
|
|
||||||
bool isPartOfMessage() const { return _isPartOfMessage; }
|
bool isPartOfMessage() const { return _isPartOfMessage; }
|
||||||
bool isReliable() const { return _isReliable; }
|
bool isReliable() const { return _isReliable; }
|
||||||
|
void setReliable(bool reliable) { _isReliable = reliable; }
|
||||||
|
|
||||||
ObfuscationLevel getObfuscationLevel() const { return _obfuscationLevel; }
|
ObfuscationLevel getObfuscationLevel() const { return _obfuscationLevel; }
|
||||||
SequenceNumber getSequenceNumber() const { return _sequenceNumber; }
|
SequenceNumber getSequenceNumber() const { return _sequenceNumber; }
|
||||||
|
|
|
@ -82,7 +82,7 @@ bool OctreeQueryNode::shouldSuppressDuplicatePacket() {
|
||||||
void OctreeQueryNode::init() {
|
void OctreeQueryNode::init() {
|
||||||
_myPacketType = getMyPacketType();
|
_myPacketType = getMyPacketType();
|
||||||
|
|
||||||
_octreePacket = NLPacket::create(getMyPacketType());
|
_octreePacket = NLPacket::create(getMyPacketType(), -1, true);
|
||||||
|
|
||||||
resetOctreePacket(); // don't bump sequence
|
resetOctreePacket(); // don't bump sequence
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,7 @@ private:
|
||||||
|
|
||||||
bool _isReadyToSend;
|
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
|
// scene timing data in usecs
|
||||||
bool _isStarted;
|
bool _isStarted;
|
||||||
|
|
Loading…
Reference in a new issue