From 5d4b0df1088b9700cc8ecb8600845b15797dc4b6 Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 28 May 2014 17:41:38 -0700 Subject: [PATCH] added flag,seq,st to EnvironmentData, untested removed/commented out debug prints --- assignment-client/src/voxels/VoxelServer.cpp | 30 ++++++++++++++++++-- assignment-client/src/voxels/VoxelServer.h | 2 +- interface/src/Environment.cpp | 5 ++++ libraries/models/src/ModelTree.cpp | 1 - libraries/networking/src/LimitedNodeList.cpp | 4 +-- libraries/octree/src/OctreeSceneStats.cpp | 3 +- libraries/particles/src/ParticleTree.cpp | 1 - 7 files changed, 38 insertions(+), 8 deletions(-) diff --git a/assignment-client/src/voxels/VoxelServer.cpp b/assignment-client/src/voxels/VoxelServer.cpp index 1251358320..181a51ebc9 100644 --- a/assignment-client/src/voxels/VoxelServer.cpp +++ b/assignment-client/src/voxels/VoxelServer.cpp @@ -40,12 +40,36 @@ bool VoxelServer::hasSpecialPacketToSend(const SharedNodePointer& node) { return shouldSendEnvironments; } -int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequence, const SharedNodePointer& node) { +int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node) { - // TODO: add flags, seq, timestamp to packet +unsigned char* copyAt = _tempOutputBuffer; int numBytesPacketHeader = populatePacketHeader(reinterpret_cast(_tempOutputBuffer), PacketTypeEnvironmentData); +copyAt += numBytesPacketHeader; int envPacketLength = numBytesPacketHeader; + + +// pack in flags +OCTREE_PACKET_FLAGS flags = 0; +OCTREE_PACKET_FLAGS* flagsAt = (OCTREE_PACKET_FLAGS*)copyAt; +*flagsAt = flags; +copyAt += sizeof(OCTREE_PACKET_FLAGS); +envPacketLength += sizeof(OCTREE_PACKET_FLAGS); + +// pack in sequence number +OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)copyAt; +*sequenceAt = sequenceNumber; +copyAt += sizeof(OCTREE_PACKET_SEQUENCE); +envPacketLength += sizeof(OCTREE_PACKET_SEQUENCE); + +// pack in timestamp +OCTREE_PACKET_SENT_TIME now = usecTimestampNow(); +OCTREE_PACKET_SENT_TIME* timeAt = (OCTREE_PACKET_SENT_TIME*)copyAt; +*timeAt = now; +copyAt += sizeof(OCTREE_PACKET_SENT_TIME); +envPacketLength += sizeof(OCTREE_PACKET_SENT_TIME); + + int environmentsToSend = getSendMinimalEnvironment() ? 1 : getEnvironmentDataCount(); for (int i = 0; i < environmentsToSend; i++) { @@ -53,6 +77,8 @@ int VoxelServer::sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequence, const Share } NodeList::getInstance()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node)); + sequenceNumber++; + return envPacketLength; } diff --git a/assignment-client/src/voxels/VoxelServer.h b/assignment-client/src/voxels/VoxelServer.h index 8fba2e9d69..b9277fed0c 100644 --- a/assignment-client/src/voxels/VoxelServer.h +++ b/assignment-client/src/voxels/VoxelServer.h @@ -46,7 +46,7 @@ public: // subclass may implement these method virtual void beforeRun(); virtual bool hasSpecialPacketToSend(const SharedNodePointer& node); - virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequence, const SharedNodePointer& node); + virtual int sendSpecialPacket(OCTREE_PACKET_SEQUENCE& sequenceNumber, const SharedNodePointer& node); private: bool _sendEnvironments; diff --git a/interface/src/Environment.cpp b/interface/src/Environment.cpp index 1ba2f0501c..c302907cd7 100644 --- a/interface/src/Environment.cpp +++ b/interface/src/Environment.cpp @@ -160,6 +160,11 @@ bool Environment::findCapsulePenetration(const glm::vec3& start, const glm::vec3 int Environment::parseData(const HifiSockAddr& senderAddress, const QByteArray& packet) { // push past the packet header int bytesRead = numBytesForPacketHeader(packet); + +// push past flags, sequence, timestamp +bytesRead += sizeof(OCTREE_PACKET_FLAGS); +bytesRead += sizeof(OCTREE_PACKET_SEQUENCE); +bytesRead += sizeof(OCTREE_PACKET_SENT_TIME); // get the lock for the duration of the call QMutexLocker locker(&_mutex); diff --git a/libraries/models/src/ModelTree.cpp b/libraries/models/src/ModelTree.cpp index 44f1c60ac7..8b249411ba 100644 --- a/libraries/models/src/ModelTree.cpp +++ b/libraries/models/src/ModelTree.cpp @@ -668,7 +668,6 @@ dataAt += sizeof(OCTREE_PACKET_SENT_TIME); uint16_t numberOfIds = 0; // placeholder for now memcpy(&numberOfIds, dataAt, sizeof(numberOfIds)); -qDebug() << "\t\t\t numberOfIds: " << numberOfIds; dataAt += sizeof(numberOfIds); processedBytes += sizeof(numberOfIds); diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index ed5ea579e0..743cbe949a 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -268,7 +268,7 @@ qint64 LimitedNodeList::writeUnverifiedDatagram(const QByteArray& datagram, cons qint64 LimitedNodeList::writeDatagram(const char* data, qint64 size, const SharedNodePointer& destinationNode, const HifiSockAddr& overridenSockAddr) { - + /* QByteArray datagram(data, size); qDebug() << "\t writeDatagram()..."; @@ -303,7 +303,7 @@ qint64 LimitedNodeList::writeDatagram(const char* data, qint64 size, const Share dataAt += sizeof(uint16_t); qDebug() << "\t\t\t ids: " << ids; } - + */ return writeDatagram(QByteArray(data, size), destinationNode, overridenSockAddr); } diff --git a/libraries/octree/src/OctreeSceneStats.cpp b/libraries/octree/src/OctreeSceneStats.cpp index 4ca2237b43..3659c8bd24 100644 --- a/libraries/octree/src/OctreeSceneStats.cpp +++ b/libraries/octree/src/OctreeSceneStats.cpp @@ -868,13 +868,14 @@ bool OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet, } -qDebug() << "\t" << QString::number(sequence, 16) << "\t sentAt:" << QString::number(sentAt, 16) << " usecs"; +//qDebug() << "\t" << QString::number(sequence, 16) << "\t sentAt:" << QString::number(sentAt, 16) << " usecs"; // Guard against possible corrupted packets... with bad timestamps const int MAX_RESONABLE_FLIGHT_TIME = 200 * USECS_PER_SECOND; // 200 seconds is more than enough time for a packet to arrive const int MIN_RESONABLE_FLIGHT_TIME = 0; if (flightTime > MAX_RESONABLE_FLIGHT_TIME || flightTime < MIN_RESONABLE_FLIGHT_TIME) { qDebug() << "ignoring unreasonable packet... flightTime:" << flightTime; +qDebug() << "\t sequence:" << QString::number(sequence, 16); qDebug() << "\t sentAt:" << QString::number(sentAt, 16) << " usecs"; qDebug() << "\t arrivedAt:" << QString::number(arrivedAt, 16) << " usecs"; qDebug() << "\t nodeClockSkewUsec:" << nodeClockSkewUsec << " usecs"; diff --git a/libraries/particles/src/ParticleTree.cpp b/libraries/particles/src/ParticleTree.cpp index a597c76bd9..50f9ea1090 100644 --- a/libraries/particles/src/ParticleTree.cpp +++ b/libraries/particles/src/ParticleTree.cpp @@ -633,7 +633,6 @@ dataAt += sizeof(OCTREE_PACKET_SENT_TIME); uint16_t numberOfIds = 0; // placeholder for now memcpy(&numberOfIds, dataAt, sizeof(numberOfIds)); -qDebug() << "\t\t\t numberOfIds: " << numberOfIds; dataAt += sizeof(numberOfIds); processedBytes += sizeof(numberOfIds);