From 8f1135feb74340f511170106ce718697eb6a2724 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 17 Oct 2013 14:35:42 -0700 Subject: [PATCH] more repairs to Agent and AvatarData for UUID transition --- assignment-client/src/Agent.cpp | 19 ++++++++++------- interface/src/VoxelPacketProcessor.cpp | 1 + libraries/avatars/src/AvatarData.cpp | 21 +------------------ libraries/avatars/src/AvatarData.h | 1 - libraries/shared/src/NodeList.cpp | 2 +- .../voxels/src/VoxelEditPacketSender.cpp | 11 +++++++--- libraries/voxels/src/VoxelEditPacketSender.h | 4 +++- 7 files changed, 25 insertions(+), 34 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 3675788616..a8b085fe0b 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -182,14 +182,17 @@ void Agent::run() { NodeList::getInstance()->pingPublicAndLocalSocketsForInactiveNode(audioMixer); } - // allow the scripter's call back to setup visual data - emit willSendVisualDataCallback(); - - // release the queue of edit voxel messages. - voxelScripter.getVoxelPacketSender()->releaseQueuedMessages(); - - // since we're in non-threaded mode, call process so that the packets are sent - voxelScripter.getVoxelPacketSender()->process(); + if (voxelScripter.getVoxelPacketSender()->voxelServersExist()) { + // allow the scripter's call back to setup visual data + emit willSendVisualDataCallback(); + + // release the queue of edit voxel messages. + voxelScripter.getVoxelPacketSender()->releaseQueuedMessages(); + + // since we're in non-threaded mode, call process so that the packets are sent + voxelScripter.getVoxelPacketSender()->process(); + + } if (engine.hasUncaughtException()) { int line = engine.uncaughtExceptionLineNumber(); diff --git a/interface/src/VoxelPacketProcessor.cpp b/interface/src/VoxelPacketProcessor.cpp index 58c0f850d5..7d2c59eeb7 100644 --- a/interface/src/VoxelPacketProcessor.cpp +++ b/interface/src/VoxelPacketProcessor.cpp @@ -50,6 +50,7 @@ void VoxelPacketProcessor::processPacket(sockaddr& senderAddress, unsigned char* if (packetData[0] == PACKET_TYPE_ENVIRONMENT_DATA) { app->_environment.parseData(&senderAddress, packetData, messageLength); } else { + app->_voxels.setDataSourceID(0); app->_voxels.parseData(packetData, messageLength); app->_voxels.setDataSourceID(0); } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 8e6b1b2038..e9a4034b09 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -54,25 +54,6 @@ AvatarData::~AvatarData() { delete _handData; } -void AvatarData::sendData() { - - // called from Agent visual loop to send data - if (Node* avatarMixer = NodeList::getInstance()->soloNodeOfType(NODE_TYPE_AVATAR_MIXER)) { - unsigned char packet[MAX_PACKET_SIZE]; - - unsigned char* endOfPacket = packet; - endOfPacket += populateTypeAndVersion(endOfPacket, PACKET_TYPE_HEAD_DATA); - - QByteArray rfcUUID = NodeList::getInstance()->getOwnerUUID().toRfc4122(); - memcpy(endOfPacket, rfcUUID.constData(), rfcUUID.size()); - endOfPacket += rfcUUID.size(); - - int numPacketBytes = (endOfPacket - packet) + getBroadcastData(endOfPacket); - - NodeList::getInstance()->getNodeSocket()->send(avatarMixer->getActiveSocket(), packet, numPacketBytes); - } -} - int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { unsigned char* bufferStart = destinationBuffer; @@ -108,7 +89,7 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { // Follow mode info memcpy(destinationBuffer, _leaderUUID.toRfc4122().constData(), NUM_BYTES_RFC4122_UUID); - destinationBuffer += sizeof(NUM_BYTES_RFC4122_UUID); + destinationBuffer += NUM_BYTES_RFC4122_UUID; // Head rotation (NOTE: This needs to become a quaternion to save two bytes) destinationBuffer += packFloatAngleToTwoByte(destinationBuffer, _headData->_yaw); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 1914ae0d61..c621fbbe63 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -126,7 +126,6 @@ public: void setHandData(HandData* handData) { _handData = handData; } public slots: - void sendData(); void setWantLowResMoving(bool wantLowResMoving) { _wantLowResMoving = wantLowResMoving; } void setWantColor(bool wantColor) { _wantColor = wantColor; } void setWantDelta(bool wantDelta) { _wantDelta = wantDelta; } diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 567bd9b27d..f533ad996c 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -313,7 +313,7 @@ const uint32_t RFC_5389_MAGIC_COOKIE_NETWORK_ORDER = htonl(0x2112A442); const int NUM_BYTES_STUN_HEADER = 20; void NodeList::sendSTUNRequest() { - const char STUN_SERVER_HOSTNAME[] = "root.highfidelity.io"; + const char STUN_SERVER_HOSTNAME[] = "stun.highfidelity.io"; const unsigned short STUN_SERVER_PORT = 3478; unsigned char stunRequestPacket[NUM_BYTES_STUN_HEADER]; diff --git a/libraries/voxels/src/VoxelEditPacketSender.cpp b/libraries/voxels/src/VoxelEditPacketSender.cpp index 1b987fd2b9..11e4600f6b 100644 --- a/libraries/voxels/src/VoxelEditPacketSender.cpp +++ b/libraries/voxels/src/VoxelEditPacketSender.cpp @@ -107,10 +107,15 @@ void VoxelEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, unsigned ch NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER - if (node->getActiveSocket() && node->getType() == NODE_TYPE_VOXEL_SERVER && + if (node->getType() == NODE_TYPE_VOXEL_SERVER && ((node->getUUID() == nodeUUID) || (nodeUUID.isNull()))) { - sockaddr* nodeAddress = node->getActiveSocket(); - queuePacketForSending(*nodeAddress, buffer, length); + if (node->getActiveSocket()) { + sockaddr* nodeAddress = node->getActiveSocket(); + queuePacketForSending(*nodeAddress, buffer, length); + } else { + // we don't have an active socket for this node, ping it + nodeList->pingPublicAndLocalSocketsForInactiveNode(&(*node)); + } } } } diff --git a/libraries/voxels/src/VoxelEditPacketSender.h b/libraries/voxels/src/VoxelEditPacketSender.h index 7a5713d4c9..bb54009d1a 100644 --- a/libraries/voxels/src/VoxelEditPacketSender.h +++ b/libraries/voxels/src/VoxelEditPacketSender.h @@ -83,6 +83,8 @@ public: // the default number of pending messages we will store if no voxel servers are available static const int DEFAULT_MAX_PENDING_MESSAGES; + + bool voxelServersExist() const; private: bool _shouldSend; @@ -90,7 +92,7 @@ private: void queuePacketToNodes(unsigned char* buffer, ssize_t length); void initializePacket(EditPacketBuffer& packetBuffer, PACKET_TYPE type); void releaseQueuedPacket(EditPacketBuffer& packetBuffer); // releases specific queued packet - bool voxelServersExist() const; + void processPreServerExistsPackets(); // These are packets which are destined from know servers but haven't been released because they're still too small