mirror of
https://github.com/lubosz/overte.git
synced 2025-04-07 03:22:09 +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()) {
|
||||
// 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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue