From 1cf75b37f3c77d0202949e8391c5d95c6fd5abe9 Mon Sep 17 00:00:00 2001 From: Leonardo Murillo Date: Tue, 9 Apr 2013 15:30:30 -0600 Subject: [PATCH] Changes to interface side of code --- interface/src/main.cpp | 5 +++-- shared/src/AgentList.cpp | 24 +++++++++++++++++++++++- shared/src/AgentList.h | 1 + 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index b8e2c190e7..1e95b42cc7 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -532,11 +532,12 @@ void simulateHead(float frametime) myHead.setAverageLoudness(averageLoudness); #endif - // Send my streaming head data to agents that are nearby and need to see it! + // Send my stream of head/hand data to the avatar mixer const int MAX_BROADCAST_STRING = 200; + const int AVATAR_SERVER_PORT = 55444; char broadcast_string[MAX_BROADCAST_STRING]; int broadcast_bytes = myHead.getBroadcastData(broadcast_string); - agentList.broadcastToAgents(broadcast_string, broadcast_bytes,AgentList::AGENTS_OF_TYPE_VOXEL_AND_INTERFACE); + agentList.getAgentSocket().send(AVATAR_SERVER_IP, AVATAR_SERVER_PORT, broadcast_string, broadcast_bytes); // If I'm in paint mode, send a voxel out to VOXEL server agents. if (::paintOn) { diff --git a/shared/src/AgentList.cpp b/shared/src/AgentList.cpp index aa04d99c9a..03f5ff87c4 100644 --- a/shared/src/AgentList.cpp +++ b/shared/src/AgentList.cpp @@ -24,7 +24,9 @@ const char * SOLO_AGENT_TYPES_STRING = "MV"; char DOMAIN_HOSTNAME[] = "highfidelity.below92.com"; char DOMAIN_IP[100] = ""; // IP Address will be re-set by lookup on startup +char AVATAR_SERVER_IP[100] = ""; const int DOMAINSERVER_PORT = 40102; +const int AVATAR_SERVER_PORT = 55444; bool silentAgentThreadStopFlag = false; bool domainServerCheckinStopFlag = false; @@ -77,7 +79,7 @@ void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size } case PACKET_HEADER_HEAD_DATA: { // head data from another agent - updateAgentWithData(senderAddress, packetData, dataBytes); + updateDataForAllAgents(senderAddress, (unsigned char *)packetData, dataBytes); break; } case PACKET_HEADER_PING: { @@ -95,6 +97,25 @@ void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size } } +void AgentList::updateDataForAllAgents(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes) { + unsigned char *currentPosition = packetData + 1; + unsigned char *startPosition = packetData; + unsigned char *packetHolder = new unsigned char[(sizeof(float) * 11) + 1]; + packetHolder[0] = *(unsigned char *)PACKET_HEADER_HEAD_DATA; + packetHolder++; + uint16_t agentId; + sockaddr_in *agentActiveSocket = new sockaddr_in; + agentActiveSocket->sin_family = AF_INET; + + while ((currentPosition - startPosition) < dataBytes) { + currentPosition += unpackAgentId(currentPosition, &agentId); + currentPosition += unpackSocket(currentPosition, (sockaddr *)&agentActiveSocket); + memcpy(packetHolder, currentPosition, sizeof(float) * 11); + currentPosition += sizeof(float) * 11; + updateAgentWithData((sockaddr *)agentActiveSocket, packetHolder, (sizeof(float) * 11) + 1); + } +} + void AgentList::updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes) { // find the agent by the sockaddr int agentIndex = indexOfMatchingAgent(senderAddress); @@ -327,6 +348,7 @@ void *checkInWithDomainServer(void *args) { sockaddr_in tempAddress; memcpy(&tempAddress.sin_addr, pHostInfo->h_addr_list[0], pHostInfo->h_length); strcpy(DOMAIN_IP, inet_ntoa(tempAddress.sin_addr)); + strcpy(AVATAR_SERVER_IP, inet_ntoa(tempAddress.sin_addr)); printf("Domain server %s: \n", DOMAIN_HOSTNAME); } else { diff --git a/shared/src/AgentList.h b/shared/src/AgentList.h index ca6d844b48..4a3cd2f234 100644 --- a/shared/src/AgentList.h +++ b/shared/src/AgentList.h @@ -56,6 +56,7 @@ public: void increaseAgentId(); bool addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, char agentType, uint16_t agentId); void processAgentData(sockaddr *senderAddress, void *packetData, size_t dataBytes); + void updateDataForAllAgents(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes); void updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes); void broadcastToAgents(char *broadcastData, size_t dataBytes, const char* agentTypes); void pingAgents();