Sending packets to agents

This commit is contained in:
Leonardo Murillo 2013-04-09 14:01:57 -06:00
parent e0c31d68d1
commit 64e563ef7c

View file

@ -32,6 +32,7 @@
#include "avatar.h" #include "avatar.h"
std::vector<AvatarAgent> *avatarAgentList = new std::vector<AvatarAgent>; std::vector<AvatarAgent> *avatarAgentList = new std::vector<AvatarAgent>;
UDPSocket *avatarMixerSocket = new UDPSocket(AVATAR_LISTEN_PORT);
AvatarAgent *findAvatarAgentBySocket(sockaddr *activeSocket) { AvatarAgent *findAvatarAgentBySocket(sockaddr *activeSocket) {
@ -173,17 +174,17 @@ unsigned char *addAgentToBroadcastPacket(unsigned char *currentPosition, AvatarA
currentPosition += packSocket(currentPosition, agentToAdd->getActiveSocket()); currentPosition += packSocket(currentPosition, agentToAdd->getActiveSocket());
sprintf((char *)packetData, packetFormat, agentToAdd->getPitch(), sprintf((char *)packetData, PACKET_FORMAT, agentToAdd->getPitch(),
agentToAdd->getYaw(), agentToAdd->getYaw(),
agentToAdd->getRoll(), agentToAdd->getRoll(),
agentToAdd->getHeadPosition()['x'], agentToAdd->getHeadPositionX(),
agentToAdd->getHeadPosition()['y'], agentToAdd->getHeadPositionY(),
agentToAdd->getHeadPosition()['z'], agentToAdd->getHeadPositionZ(),
agentToAdd->getLoudness(), agentToAdd->getLoudness(),
agentToAdd->getAverageLoudness(), agentToAdd->getAverageLoudness(),
agentToAdd->getHandPosition()['x'], agentToAdd->getHandPositionX(),
agentToAdd->getHandPosition()['y'], agentToAdd->getHandPositionY(),
agentToAdd->getHandPosition()['z']); agentToAdd->getHandPositionZ());
memcpy(currentPosition, packetData, strlen((const char*)packetData)); memcpy(currentPosition, packetData, strlen((const char*)packetData));
currentPosition += strlen((const char*)packetData); currentPosition += strlen((const char*)packetData);
@ -205,6 +206,21 @@ void *sendAvatarData(void *args) {
startPointer = currentBufferPosition; startPointer = currentBufferPosition;
for (std::vector<AvatarAgent>::iterator avatarAgent = avatarAgentList->begin();
avatarAgent != avatarAgentList->end();
avatarAgent++) {
addAgentToBroadcastPacket(currentBufferPosition, &*avatarAgent);
}
for (std::vector<AvatarAgent>::iterator avatarAgent = avatarAgentList->begin();
avatarAgent != avatarAgentList->end();
avatarAgent++) {
avatarMixerSocket->send(avatarAgent->getActiveSocket(), broadcastPacket, strlen((const char *)broadcastPacket));
}
double usecToSleep = usecTimestamp(&startTime) + (BROADCAST_INTERVAL * 10000000) - usecTimestampNow(); double usecToSleep = usecTimestamp(&startTime) + (BROADCAST_INTERVAL * 10000000) - usecTimestampNow();
usleep(usecToSleep); usleep(usecToSleep);
@ -222,7 +238,6 @@ int main(int argc, char* argv[])
char *packetData = new char[MAX_PACKET_SIZE]; char *packetData = new char[MAX_PACKET_SIZE];
ssize_t receivedBytes = 0; ssize_t receivedBytes = 0;
UDPSocket *avatarMixerSocket = new UDPSocket(AVATAR_LISTEN_PORT);
AvatarAgent *matchingAgent = NULL; AvatarAgent *matchingAgent = NULL;
float *pitch; float *pitch;
@ -258,7 +273,15 @@ int main(int argc, char* argv[])
matchingAgent = findAvatarAgentBySocket(agentAddress); matchingAgent = findAvatarAgentBySocket(agentAddress);
if (matchingAgent) { if (matchingAgent) {
// We already have this agent on our list, just modify positional data // We already have this agent on our list, just modify positional data
matchingAgent->setPitch(*pitch);
matchingAgent->setYaw(*yaw);
matchingAgent->setRoll(*roll);
matchingAgent->setHeadPosition(*headPositionX, *headPositionY, *headPositionZ);
matchingAgent->setLoudness(*loudness);
matchingAgent->setAverageLoudness(*averageLoudness);
matchingAgent->setHandPosition(*handPositionX, *handPositionY, *handPositionZ);
} else { } else {
// This is a new agent, we need to add to the list // This is a new agent, we need to add to the list