Changes to interface side of code

This commit is contained in:
Leonardo Murillo 2013-04-09 15:30:30 -06:00
parent 6bff444f15
commit 1cf75b37f3
3 changed files with 27 additions and 3 deletions

View file

@ -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) {

View file

@ -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 {

View file

@ -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();