mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 21:12:53 +02:00
moved _sequenceNumber back to OctreeQueryNode
This commit is contained in:
parent
65508b2016
commit
f82be105e8
10 changed files with 37 additions and 22 deletions
|
@ -86,7 +86,7 @@ bool ModelServer::hasSpecialPacketToSend(const SharedNodePointer& node) {
|
||||||
return shouldSendDeletedModels;
|
return shouldSendDeletedModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ModelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node) {
|
int ModelServer::sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node) {
|
||||||
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
||||||
size_t packetLength = 0;
|
size_t packetLength = 0;
|
||||||
|
|
||||||
|
@ -100,13 +100,13 @@ int ModelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const
|
||||||
|
|
||||||
// TODO: is it possible to send too many of these packets? what if you deleted 1,000,000 models?
|
// TODO: is it possible to send too many of these packets? what if you deleted 1,000,000 models?
|
||||||
while (hasMoreToSend) {
|
while (hasMoreToSend) {
|
||||||
hasMoreToSend = tree->encodeModelsDeletedSince(sequenceNumber, deletedModelsSentAt,
|
hasMoreToSend = tree->encodeModelsDeletedSince(queryNode->getSequenceNumber(), deletedModelsSentAt,
|
||||||
outputBuffer, MAX_PACKET_SIZE, packetLength);
|
outputBuffer, MAX_PACKET_SIZE, packetLength);
|
||||||
|
|
||||||
//qDebug() << "sending PacketType_MODEL_ERASE packetLength:" << packetLength;
|
//qDebug() << "sending PacketType_MODEL_ERASE packetLength:" << packetLength;
|
||||||
|
|
||||||
NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, SharedNodePointer(node));
|
NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, SharedNodePointer(node));
|
||||||
sequenceNumber++;
|
queryNode->incrementSequenceNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeData->setLastDeletedModelsSentAt(deletePacketSentAt);
|
nodeData->setLastDeletedModelsSentAt(deletePacketSentAt);
|
||||||
|
|
|
@ -37,7 +37,7 @@ public:
|
||||||
// subclass may implement these method
|
// subclass may implement these method
|
||||||
virtual void beforeRun();
|
virtual void beforeRun();
|
||||||
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
||||||
virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node);
|
virtual int sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node);
|
||||||
|
|
||||||
virtual void modelCreated(const ModelItem& newModel, const SharedNodePointer& senderNode);
|
virtual void modelCreated(const ModelItem& newModel, const SharedNodePointer& senderNode);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ OctreeQueryNode::OctreeQueryNode() :
|
||||||
_lastClientOctreeSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
|
_lastClientOctreeSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
|
||||||
_lodChanged(false),
|
_lodChanged(false),
|
||||||
_lodInitialized(false),
|
_lodInitialized(false),
|
||||||
|
_sequenceNumber(0),
|
||||||
_lastRootTimestamp(0),
|
_lastRootTimestamp(0),
|
||||||
_myPacketType(PacketTypeUnknown),
|
_myPacketType(PacketTypeUnknown),
|
||||||
_isShuttingDown(false)
|
_isShuttingDown(false)
|
||||||
|
@ -157,11 +158,11 @@ bool OctreeQueryNode::shouldSuppressDuplicatePacket() {
|
||||||
|
|
||||||
void OctreeQueryNode::init() {
|
void OctreeQueryNode::init() {
|
||||||
_myPacketType = getMyPacketType();
|
_myPacketType = getMyPacketType();
|
||||||
resetOctreePacket(0); // don't bump sequence
|
resetOctreePacket(); // don't bump sequence
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OctreeQueryNode::resetOctreePacket(OCTREE_PACKET_SEQUENCE sequenceNumber) {
|
void OctreeQueryNode::resetOctreePacket() {
|
||||||
// if shutting down, return immediately
|
// if shutting down, return immediately
|
||||||
if (_isShuttingDown) {
|
if (_isShuttingDown) {
|
||||||
return;
|
return;
|
||||||
|
@ -199,7 +200,7 @@ void OctreeQueryNode::resetOctreePacket(OCTREE_PACKET_SEQUENCE sequenceNumber) {
|
||||||
|
|
||||||
// pack in sequence number
|
// pack in sequence number
|
||||||
OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)_octreePacketAt;
|
OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)_octreePacketAt;
|
||||||
*sequenceAt = sequenceNumber;
|
*sequenceAt = _sequenceNumber;
|
||||||
_octreePacketAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
_octreePacketAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||||
_octreePacketAvailableBytes -= sizeof(OCTREE_PACKET_SEQUENCE);
|
_octreePacketAvailableBytes -= sizeof(OCTREE_PACKET_SEQUENCE);
|
||||||
|
|
||||||
|
@ -361,3 +362,11 @@ void OctreeQueryNode::dumpOutOfView() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OctreeQueryNode::incrementSequenceNumber() {
|
||||||
|
_sequenceNumber++;
|
||||||
|
}
|
||||||
|
|
||||||
|
OCTREE_PACKET_SEQUENCE OctreeQueryNode::getSequenceNumber() {
|
||||||
|
return _sequenceNumber;
|
||||||
|
}
|
|
@ -35,7 +35,7 @@ public:
|
||||||
void init(); // called after creation to set up some virtual items
|
void init(); // called after creation to set up some virtual items
|
||||||
virtual PacketType getMyPacketType() const = 0;
|
virtual PacketType getMyPacketType() const = 0;
|
||||||
|
|
||||||
void resetOctreePacket(OCTREE_PACKET_SEQUENCE sequenceNumber); // resets octree packet to after "V" header
|
void resetOctreePacket(); // resets octree packet to after "V" header
|
||||||
|
|
||||||
void writeToPacket(const unsigned char* buffer, unsigned int bytes); // writes to end of packet
|
void writeToPacket(const unsigned char* buffer, unsigned int bytes); // writes to end of packet
|
||||||
|
|
||||||
|
@ -99,6 +99,10 @@ public:
|
||||||
void nodeKilled();
|
void nodeKilled();
|
||||||
void forceNodeShutdown();
|
void forceNodeShutdown();
|
||||||
bool isShuttingDown() const { return _isShuttingDown; }
|
bool isShuttingDown() const { return _isShuttingDown; }
|
||||||
|
|
||||||
|
void incrementSequenceNumber();
|
||||||
|
|
||||||
|
OCTREE_PACKET_SEQUENCE getSequenceNumber();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void sendThreadFinished();
|
void sendThreadFinished();
|
||||||
|
@ -136,6 +140,8 @@ private:
|
||||||
bool _lodChanged;
|
bool _lodChanged;
|
||||||
bool _lodInitialized;
|
bool _lodInitialized;
|
||||||
|
|
||||||
|
OCTREE_PACKET_SEQUENCE _sequenceNumber;
|
||||||
|
|
||||||
quint64 _lastRootTimestamp;
|
quint64 _lastRootTimestamp;
|
||||||
|
|
||||||
PacketType _myPacketType;
|
PacketType _myPacketType;
|
||||||
|
|
|
@ -138,7 +138,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
||||||
// obscure the packet and not send it. This allows the callers and upper level logic to not need to know about
|
// obscure the packet and not send it. This allows the callers and upper level logic to not need to know about
|
||||||
// this rate control savings.
|
// this rate control savings.
|
||||||
if (nodeData->shouldSuppressDuplicatePacket()) {
|
if (nodeData->shouldSuppressDuplicatePacket()) {
|
||||||
nodeData->resetOctreePacket(_sequenceNumber); // we still need to reset it though!
|
nodeData->resetOctreePacket(); // we still need to reset it though!
|
||||||
return packetsSent; // without sending...
|
return packetsSent; // without sending...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
||||||
truePacketsSent++;
|
truePacketsSent++;
|
||||||
packetsSent++;
|
packetsSent++;
|
||||||
_sequenceNumber++;
|
_sequenceNumber++;
|
||||||
nodeData->resetOctreePacket(_sequenceNumber);
|
nodeData->resetOctreePacket();
|
||||||
}
|
}
|
||||||
|
|
||||||
return packetsSent;
|
return packetsSent;
|
||||||
|
@ -288,7 +288,7 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus
|
||||||
if (nodeData->isPacketWaiting()) {
|
if (nodeData->isPacketWaiting()) {
|
||||||
packetsSentThisInterval += handlePacketSend(nodeData, trueBytesSent, truePacketsSent);
|
packetsSentThisInterval += handlePacketSend(nodeData, trueBytesSent, truePacketsSent);
|
||||||
} else {
|
} else {
|
||||||
nodeData->resetOctreePacket(_sequenceNumber);
|
nodeData->resetOctreePacket();
|
||||||
}
|
}
|
||||||
int targetSize = MAX_OCTREE_PACKET_DATA_SIZE;
|
int targetSize = MAX_OCTREE_PACKET_DATA_SIZE;
|
||||||
if (wantCompression) {
|
if (wantCompression) {
|
||||||
|
@ -534,8 +534,8 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus
|
||||||
// send the environment packet
|
// send the environment packet
|
||||||
// TODO: should we turn this into a while loop to better handle sending multiple special packets
|
// TODO: should we turn this into a while loop to better handle sending multiple special packets
|
||||||
if (_myServer->hasSpecialPacketToSend(_node) && !nodeData->isShuttingDown()) {
|
if (_myServer->hasSpecialPacketToSend(_node) && !nodeData->isShuttingDown()) {
|
||||||
trueBytesSent += _myServer->sendSpecialPacket(_sequenceNumber, _node);
|
trueBytesSent += _myServer->sendSpecialPacket(nodeData, _node);
|
||||||
nodeData->resetOctreePacket(_sequenceNumber); // because _sequenceNumber has changed
|
nodeData->resetOctreePacket(); // because nodeData's _sequenceNumber has changed
|
||||||
truePacketsSent++;
|
truePacketsSent++;
|
||||||
packetsSentThisInterval++;
|
packetsSentThisInterval++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ public:
|
||||||
// subclass may implement these method
|
// subclass may implement these method
|
||||||
virtual void beforeRun() { };
|
virtual void beforeRun() { };
|
||||||
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node) { return false; }
|
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node) { return false; }
|
||||||
virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node) { return 0; }
|
virtual int sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node) { return 0; }
|
||||||
|
|
||||||
static void attachQueryNodeToNode(Node* newNode);
|
static void attachQueryNodeToNode(Node* newNode);
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ bool ParticleServer::hasSpecialPacketToSend(const SharedNodePointer& node) {
|
||||||
return shouldSendDeletedParticles;
|
return shouldSendDeletedParticles;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ParticleServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node) {
|
int ParticleServer::sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node) {
|
||||||
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
||||||
size_t packetLength = 0;
|
size_t packetLength = 0;
|
||||||
|
|
||||||
|
@ -100,13 +100,13 @@ int ParticleServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, co
|
||||||
|
|
||||||
// TODO: is it possible to send too many of these packets? what if you deleted 1,000,000 particles?
|
// TODO: is it possible to send too many of these packets? what if you deleted 1,000,000 particles?
|
||||||
while (hasMoreToSend) {
|
while (hasMoreToSend) {
|
||||||
hasMoreToSend = tree->encodeParticlesDeletedSince(sequenceNumber, deletedParticlesSentAt,
|
hasMoreToSend = tree->encodeParticlesDeletedSince(queryNode->getSequenceNumber(), deletedParticlesSentAt,
|
||||||
outputBuffer, MAX_PACKET_SIZE, packetLength);
|
outputBuffer, MAX_PACKET_SIZE, packetLength);
|
||||||
|
|
||||||
//qDebug() << "sending PacketType_PARTICLE_ERASE packetLength:" << packetLength;
|
//qDebug() << "sending PacketType_PARTICLE_ERASE packetLength:" << packetLength;
|
||||||
|
|
||||||
NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, SharedNodePointer(node));
|
NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, SharedNodePointer(node));
|
||||||
sequenceNumber++;
|
queryNode->incrementSequenceNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeData->setLastDeletedParticlesSentAt(deletePacketSentAt);
|
nodeData->setLastDeletedParticlesSentAt(deletePacketSentAt);
|
||||||
|
|
|
@ -37,7 +37,7 @@ public:
|
||||||
// subclass may implement these method
|
// subclass may implement these method
|
||||||
virtual void beforeRun();
|
virtual void beforeRun();
|
||||||
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
||||||
virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node);
|
virtual int sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node);
|
||||||
|
|
||||||
virtual void particleCreated(const Particle& newParticle, const SharedNodePointer& senderNode);
|
virtual void particleCreated(const Particle& newParticle, const SharedNodePointer& senderNode);
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ bool VoxelServer::hasSpecialPacketToSend(const SharedNodePointer& node) {
|
||||||
return shouldSendEnvironments;
|
return shouldSendEnvironments;
|
||||||
}
|
}
|
||||||
|
|
||||||
int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node) {
|
int VoxelServer::sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node) {
|
||||||
|
|
||||||
unsigned char* copyAt = _tempOutputBuffer;
|
unsigned char* copyAt = _tempOutputBuffer;
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const
|
||||||
|
|
||||||
// pack in sequence number
|
// pack in sequence number
|
||||||
OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)copyAt;
|
OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)copyAt;
|
||||||
*sequenceAt = sequenceNumber;
|
*sequenceAt = queryNode->getSequenceNumber();
|
||||||
copyAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
copyAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||||
envPacketLength += sizeof(OCTREE_PACKET_SEQUENCE);
|
envPacketLength += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeList::getInstance()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node));
|
NodeList::getInstance()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node));
|
||||||
sequenceNumber++;
|
queryNode->incrementSequenceNumber();
|
||||||
|
|
||||||
return envPacketLength;
|
return envPacketLength;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
// subclass may implement these method
|
// subclass may implement these method
|
||||||
virtual void beforeRun();
|
virtual void beforeRun();
|
||||||
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
||||||
virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node);
|
virtual int sendSpecialPacket(OctreeQueryNode* queryNode, const SharedNodePointer& node);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _sendEnvironments;
|
bool _sendEnvironments;
|
||||||
|
|
Loading…
Reference in a new issue