From e75add411c7da631aa2aafb08edc36fa9c2ea5ab Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 17 Apr 2013 16:57:04 -0700 Subject: [PATCH] use a constant number of BYTES_PER_AVATAR as an interim solution --- interface/src/main.cpp | 3 ++- libraries/avatars/src/AvatarData.cpp | 4 ++-- libraries/avatars/src/AvatarData.h | 2 ++ libraries/shared/src/AgentList.cpp | 7 +++---- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 9fb29cc6e2..8ca43cba20 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -74,6 +74,7 @@ #include #include #include +#include #include "ViewFrustum.h" @@ -1316,7 +1317,7 @@ void *networkReceive(void *args) AgentList::getInstance()->processBulkAgentData(&senderAddress, incomingPacket, bytesReceived, - (sizeof(float) * 3) + (sizeof(uint16_t) * 3)); + BYTES_PER_AVATAR); break; default: AgentList::getInstance()->processAgentData(&senderAddress, incomingPacket, bytesReceived); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index c29789029f..11eb01a50a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include "AvatarData.h" @@ -23,7 +24,7 @@ int packFloatAngleToTwoByte(unsigned char* buffer, float angle) { return sizeof(uint16_t); } -int unpackFloatAngleFromTwoByte(uint16_t *byteAnglePointer, float *destinationPointer) { +int unpackFloatAngleFromTwoByte(uint16_t* byteAnglePointer, float* destinationPointer) { *destinationPointer = (*byteAnglePointer / std::numeric_limits::max()) * 360.0 - 180; return sizeof(uint16_t); } @@ -61,7 +62,6 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { // called on the other agents - assigns it to my views of the others void AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { - // increment to push past the packet header sourceBuffer++; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 5e7f52a04d..bf0b150a54 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -15,6 +15,8 @@ #include +const int BYTES_PER_AVATAR = 30; + class AvatarData : public AgentData { public: AvatarData(); diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index 33716ec9f1..e4325df2a0 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -109,7 +109,7 @@ void AgentList::processBulkAgentData(sockaddr *senderAddress, unsigned char *pac unsigned char *startPosition = (unsigned char *)packetData; unsigned char *currentPosition = startPosition + 1; - unsigned char *packetHolder = new unsigned char[numBytesPerAgent + 1]; + unsigned char packetHolder[numBytesPerAgent + 1]; packetHolder[0] = PACKET_HEADER_HEAD_DATA; @@ -122,13 +122,12 @@ void AgentList::processBulkAgentData(sockaddr *senderAddress, unsigned char *pac int matchingAgentIndex = indexOfMatchingAgent(agentID); if (matchingAgentIndex >= 0) { + updateAgentWithData(&agents[matchingAgentIndex], packetHolder, numBytesPerAgent + 1); } currentPosition += numBytesPerAgent; } - - delete[] packetHolder; } void AgentList::updateAgentWithData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes) { @@ -148,7 +147,7 @@ void AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int linkedDataCreateCallback(agent); } } - + agent->getLinkedData()->parseData(packetData, dataBytes); }