From beee875e88069d7e29777998999e888f9c588330 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 10:46:05 -0700 Subject: [PATCH 01/18] add a new AudioInjector class that can be leveraged from eve and injector --- libraries/shared/src/AudioInjector.cpp | 83 ++++++++++++++++++++++++++ libraries/shared/src/AudioInjector.h | 35 +++++++++++ 2 files changed, 118 insertions(+) create mode 100644 libraries/shared/src/AudioInjector.cpp create mode 100644 libraries/shared/src/AudioInjector.h diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp new file mode 100644 index 0000000000..fac26a78cf --- /dev/null +++ b/libraries/shared/src/AudioInjector.cpp @@ -0,0 +1,83 @@ +// +// AudioInjector.cpp +// hifi +// +// Created by Stephen Birarda on 4/23/13. +// +// + +#include +#include + +#include "SharedUtil.h" +#include "PacketHeaders.h" + +#include "AudioInjector.h" + +const int BUFFER_LENGTH_BYTES = 512; +const int BUFFER_LENGTH_SAMPLES = BUFFER_LENGTH_BYTES / sizeof(int16_t); +const float SAMPLE_RATE = 22050.0; +const float BUFFER_SEND_INTERVAL_USECS = (BUFFER_LENGTH_SAMPLES / SAMPLE_RATE) * 1000000; + +AudioInjector::AudioInjector(const char* filename) : + _bearing(0), + _attenuationModifier(255) +{ + _position[0] = 0.0f; + _position[1] = 0.0f; + _position[2] = 0.0f; + + std::fstream sourceFile; + + sourceFile.open(filename, std::ios::in | std::ios::binary); + sourceFile.seekg(0, std::ios::end); + + _numTotalBytesAudio = sourceFile.tellg(); + sourceFile.seekg(0, std::ios::beg); + long sizeOfShortArray = _numTotalBytesAudio / 2; + _audioSampleArray = new int16_t[sizeOfShortArray]; + + sourceFile.read((char *)_audioSampleArray, _numTotalBytesAudio); +} + +AudioInjector::~AudioInjector() { + delete[] _audioSampleArray; +} + +void AudioInjector::setPosition(float* position) { + _position[0] = position[0]; + _position[1] = position[1]; + _position[2] = position[2]; +} + +void AudioInjector::injectAudio(UDPSocket *injectorSocket, sockaddr *destinationSocket) { + timeval startTime; + + // one byte for header, 3 positional floats, 1 bearing float, 1 attenuation modifier byte + int leadingBytes = 1 + (sizeof(float) * 4) + 1; + unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes]; + + dataPacket[0] = PACKET_HEADER_INJECT_AUDIO; + unsigned char *currentPacketPtr = dataPacket + 1; + + for (int i = 0; i < 3; i++) { + memcpy(currentPacketPtr, &_position[i], sizeof(float)); + currentPacketPtr += sizeof(float); + } + + memcpy(currentPacketPtr, &_bearing, sizeof(float)); + currentPacketPtr += sizeof(float); + + *currentPacketPtr = _attenuationModifier; + currentPacketPtr++; + + for (int i = 0; i < _numTotalBytesAudio; i += BUFFER_LENGTH_SAMPLES) { + gettimeofday(&startTime, NULL); + + memcpy(currentPacketPtr, _audioSampleArray + i, BUFFER_LENGTH_BYTES); + injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket)); + + double usecToSleep = usecTimestamp(&startTime) + BUFFER_SEND_INTERVAL_USECS - usecTimestampNow(); + usleep(usecToSleep); + } +} diff --git a/libraries/shared/src/AudioInjector.h b/libraries/shared/src/AudioInjector.h new file mode 100644 index 0000000000..2456a95c57 --- /dev/null +++ b/libraries/shared/src/AudioInjector.h @@ -0,0 +1,35 @@ +// +// AudioInjector.h +// hifi +// +// Created by Stephen Birarda on 4/23/13. +// +// + +#ifndef __hifi__AudioInjector__ +#define __hifi__AudioInjector__ + +#include +#include + +#include "UDPSocket.h" + +class AudioInjector { +public: + AudioInjector(const char* filename); + ~AudioInjector(); + + void setPosition(float* position); + void setBearing(float bearing) { _bearing = bearing; } + void setAttenuationModifier(unsigned char attenuationModifier) { _attenuationModifier = attenuationModifier; } + + void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket); +private: + int16_t* _audioSampleArray; + int _numTotalBytesAudio; + float _position[3]; + float _bearing; + unsigned char _attenuationModifier; +}; + +#endif /* defined(__hifi__AudioInjector__) */ From 88fe04bcd1eaf79287ccb6a98c636eb01ef043d4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 11:48:01 -0700 Subject: [PATCH 02/18] hook up the injector to the new AudioInjector class --- injector/src/injector.cpp | 129 ++++++++----------------- libraries/shared/src/AudioInjector.cpp | 23 +++-- 2 files changed, 57 insertions(+), 95 deletions(-) diff --git a/injector/src/injector.cpp b/injector/src/injector.cpp index 3f6bb7f689..39981d277b 100644 --- a/injector/src/injector.cpp +++ b/injector/src/injector.cpp @@ -1,5 +1,5 @@ // -// injector.cpp +// main.cpp // Audio Injector // // Created by Leonardo Murillo on 3/5/13. @@ -11,39 +11,27 @@ #include #include #include -#include -#include -#include #include #include #include -#include "UDPSocket.h" -#include "UDPSocket.cpp" + + #include #include - +#include +#include char EC2_WEST_AUDIO_SERVER[] = "54.241.92.53"; const int AUDIO_UDP_LISTEN_PORT = 55443; -const int BUFFER_LENGTH_BYTES = 512; -const int BUFFER_LENGTH_SAMPLES = BUFFER_LENGTH_BYTES / sizeof(int16_t); -const float SAMPLE_RATE = 22050.0; -const float BUFFER_SEND_INTERVAL_USECS = (BUFFER_LENGTH_SAMPLES / SAMPLE_RATE) * 1000000; // Command line parameter defaults bool loopAudio = true; float sleepIntervalMin = 1.00; float sleepIntervalMax = 2.00; -float positionInUniverse[] = {0, 0, 0, 0}; -unsigned char attenuationModifier = 255; -char *sourceAudioFile; +char *sourceAudioFile = NULL; const char *allowedParameters = ":rb::t::c::a::f:"; - -char *charBuffer; -int16_t *buffer; -long length; - -UDPSocket *streamSocket; +float floatArguments[4] = {0.0f, 0.0f, 0.0f, 0.0f}; +unsigned char attenuationModifier = 255; void usage(void) { @@ -62,19 +50,19 @@ bool processParameters(int parameterCount, char* parameterData[]) while ((p = getopt(parameterCount, parameterData, allowedParameters)) != -1) { switch (p) { case 'r': - loopAudio = false; + ::loopAudio = false; std::cout << "[DEBUG] Random sleep mode enabled" << std::endl; break; case 'b': - sleepIntervalMin = atof(optarg); + ::sleepIntervalMin = atof(optarg); std::cout << "[DEBUG] Min delay between plays " << sleepIntervalMin << "sec" << std::endl; break; case 't': - sleepIntervalMax = atof(optarg); + ::sleepIntervalMax = atof(optarg); std::cout << "[DEBUG] Max delay between plays " << sleepIntervalMax << "sec" << std::endl; break; case 'f': - sourceAudioFile = optarg; + ::sourceAudioFile = optarg; std::cout << "[DEBUG] Opening file: " << sourceAudioFile << std::endl; break; case 'c': @@ -84,7 +72,7 @@ bool processParameters(int parameterCount, char* parameterData[]) int i = 0; while (std::getline(ss, token, ',')) { - positionInUniverse[i] = atof(token.c_str()); + ::floatArguments[i] = atof(token.c_str()); ++i; if (i == 4) { break; @@ -94,7 +82,7 @@ bool processParameters(int parameterCount, char* parameterData[]) break; } case 'a': - attenuationModifier = atoi(optarg); + ::attenuationModifier = atoi(optarg); std::cout << "[DEBUG] Attenuation modifier: " << optarg << std::endl; break; default: @@ -105,77 +93,42 @@ bool processParameters(int parameterCount, char* parameterData[]) return true; }; -void loadFile(void) { - std::fstream sourceFile; - sourceFile.open(sourceAudioFile, std::ios::in | std::ios::binary); - sourceFile.seekg(0, std::ios::end); - length = sourceFile.tellg(); - sourceFile.seekg(0, std::ios::beg); - long sizeOfShortArray = length / 2; - buffer = new int16_t[sizeOfShortArray]; - sourceFile.read((char *)buffer, length); -} - -void stream(void) -{ - timeval startTime; - - int leadingBytes = 1 + (sizeof(float) * 4); - unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes]; - - dataPacket[0] = PACKET_HEADER_INJECT_AUDIO; - unsigned char *currentPacketPtr = dataPacket + 1; - - for (int p = 0; p < 4; p++) { - memcpy(currentPacketPtr, &positionInUniverse[p], sizeof(float)); - currentPacketPtr += sizeof(float); - } - - *currentPacketPtr = attenuationModifier; - currentPacketPtr++; - - for (int i = 0; i < length; i += BUFFER_LENGTH_SAMPLES) { - gettimeofday(&startTime, NULL); - memcpy(currentPacketPtr, &buffer[i], BUFFER_LENGTH_BYTES); - streamSocket->send(EC2_WEST_AUDIO_SERVER, AUDIO_UDP_LISTEN_PORT, dataPacket, sizeof(dataPacket)); - double usecToSleep = usecTimestamp(&startTime) + BUFFER_SEND_INTERVAL_USECS - usecTimestampNow(); - usleep(usecToSleep); - } -}; - -int main(int argc, char* argv[]) -{ +int main(int argc, char* argv[]) { srand(time(0)); int AUDIO_UDP_SEND_PORT = 1500 + (rand() % (int)(1500 - 2000 + 1)); - streamSocket = new UDPSocket(AUDIO_UDP_SEND_PORT); + UDPSocket streamSocket = UDPSocket(AUDIO_UDP_SEND_PORT); - if (processParameters(argc, argv)) { - if (sourceAudioFile) { - loadFile(); - } else { + sockaddr_in mixerSocket; + mixerSocket.sin_family = AF_INET; + mixerSocket.sin_addr.s_addr = inet_addr(EC2_WEST_AUDIO_SERVER); + mixerSocket.sin_port = htons((uint16_t)AUDIO_UDP_LISTEN_PORT); + + if (processParameters(argc, argv)) { + if (::sourceAudioFile == NULL) { std::cout << "[FATAL] Source audio file not specified" << std::endl; exit(-1); - } - - for (int i = 0; i < sizeof(positionInUniverse)/sizeof(positionInUniverse[0]); ++i) { - std::cout << "Position " << positionInUniverse[i] << std::endl; - } - - float delay; - int usecDelay; - while (true) { - stream(); + } else { + AudioInjector injector = AudioInjector(sourceAudioFile); - if (loopAudio) { - delay = 0; - } else { - delay = randFloatInRange(sleepIntervalMin, sleepIntervalMax); + injector.setPosition(::floatArguments); + injector.setBearing(*(::floatArguments + 3)); + injector.setAttenuationModifier(::attenuationModifier); + + float delay = 0; + int usecDelay = 0; + + while (true) { + injector.injectAudio(&streamSocket, (sockaddr*) &mixerSocket); + + if (!::loopAudio) { + delay = randFloatInRange(::sleepIntervalMin, ::sleepIntervalMax); + usecDelay = delay * 1000 * 1000; + usleep(usecDelay); + } } - usecDelay = delay * 1000 * 1000; - usleep(usecDelay); - } + } } return 0; } diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index fac26a78cf..5cd7500bdd 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -65,19 +65,28 @@ void AudioInjector::injectAudio(UDPSocket *injectorSocket, sockaddr *destination currentPacketPtr += sizeof(float); } - memcpy(currentPacketPtr, &_bearing, sizeof(float)); - currentPacketPtr += sizeof(float); - *currentPacketPtr = _attenuationModifier; currentPacketPtr++; - for (int i = 0; i < _numTotalBytesAudio; i += BUFFER_LENGTH_SAMPLES) { + memcpy(currentPacketPtr, &_bearing, sizeof(float)); + currentPacketPtr += sizeof(float); + + for (int i = 0; i < _numTotalBytesAudio; i += BUFFER_LENGTH_BYTES) { gettimeofday(&startTime, NULL); - memcpy(currentPacketPtr, _audioSampleArray + i, BUFFER_LENGTH_BYTES); + int numBytesToCopy = BUFFER_LENGTH_BYTES; + + if (_numTotalBytesAudio - i < BUFFER_LENGTH_BYTES) { + numBytesToCopy = _numTotalBytesAudio - i; + memset(currentPacketPtr + numBytesToCopy, 0, BUFFER_LENGTH_BYTES - numBytesToCopy); + } + + memcpy(currentPacketPtr, _audioSampleArray + (i / 2), numBytesToCopy); injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket)); - double usecToSleep = usecTimestamp(&startTime) + BUFFER_SEND_INTERVAL_USECS - usecTimestampNow(); - usleep(usecToSleep); + double usecToSleep = BUFFER_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&startTime)); + if (usecToSleep > 0) { + usleep(usecToSleep); + } } } From 1688e2f5c32f82df31e860c41acb6cf967ecbaed Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 11:49:37 -0700 Subject: [PATCH 03/18] replace injector with TARGET_NAME in CMakeLists --- injector/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/injector/CMakeLists.txt b/injector/CMakeLists.txt index 6e3e61326c..6bea5b51d3 100644 --- a/injector/CMakeLists.txt +++ b/injector/CMakeLists.txt @@ -14,4 +14,4 @@ link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) # link the threads library find_package(Threads REQUIRED) -target_link_libraries(injector ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) \ No newline at end of file From 7ae320d7e1f095b6d573575f5647956d70e52da6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:37:49 -0700 Subject: [PATCH 04/18] intial version of eve that says WALL-E every so often --- domain-server/src/main.cpp | 2 +- eve/src/main.cpp | 56 ++++++++++++++++- injector/src/{injector.cpp => main.cpp} | 0 interface/src/Head.cpp | 2 - libraries/shared/src/AgentList.cpp | 6 +- libraries/shared/src/AgentList.h | 2 +- libraries/shared/src/AudioInjector.cpp | 83 ++++++++++++++----------- 7 files changed, 105 insertions(+), 46 deletions(-) rename injector/src/{injector.cpp => main.cpp} (100%) diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index fceedc6678..52631a3c25 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -133,7 +133,7 @@ int main(int argc, const char * argv[]) if (DEBUG_TO_SELF || !agent->matches((sockaddr *)&agentPublicAddress, (sockaddr *)&agentLocalAddress, agentType)) { - if (memchr(SOLO_AGENT_TYPES_STRING, agent->getType(), 1) == NULL) { + if (memchr(SOLO_AGENT_TYPES, agent->getType(), sizeof(SOLO_AGENT_TYPES)) == NULL) { // this is an agent of which there can be multiple, just add them to the packet // don't send avatar agents to other avatars, that will come from avatar mixer if (agentType != AGENT_TYPE_AVATAR || agent->getType() != AGENT_TYPE_AVATAR) { diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 1478f3d1b2..a86a04456f 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -13,14 +13,22 @@ #include #include #include +#include const int EVE_AGENT_LIST_PORT = 55441; const float DATA_SEND_INTERVAL_MSECS = 10; +const float MIN_AUDIO_SEND_INTERVAL_SECS = 10; +const int MIN_ITERATIONS_BETWEEN_AUDIO_SENDS = (MIN_AUDIO_SEND_INTERVAL_SECS * 1000) / DATA_SEND_INTERVAL_MSECS; +const int MAX_AUDIO_SEND_INTERVAL_SECS = 15; +const float MAX_ITERATIONS_BETWEEN_AUDIO_SENDS = (MAX_AUDIO_SEND_INTERVAL_SECS * 1000) / DATA_SEND_INTERVAL_MSECS; bool stopReceiveAgentDataThread; +bool injectAudioThreadRunning = false; -void *receiveAgentData(void *args) -{ +int TEMP_AUDIO_LISTEN_PORT = 55439; +UDPSocket audioSocket = UDPSocket(TEMP_AUDIO_LISTEN_PORT); + +void *receiveAgentData(void *args) { sockaddr senderAddress; ssize_t bytesReceived; unsigned char incomingPacket[MAX_PACKET_SIZE]; @@ -54,7 +62,33 @@ void *receiveAgentData(void *args) return NULL; } +void *injectAudio(void *args) { + ::injectAudioThreadRunning = true; + + AudioInjector *eveAudioInjector = (AudioInjector *)args; + + // look for an audio mixer in our agent list + Agent *audioMixer = AgentList::getInstance()->soloAgentOfType(AGENT_TYPE_AUDIO_MIXER); + + if (audioMixer != NULL) { + // until the audio mixer is setup for ping-reply, activate the public socket if it's not active + if (audioMixer->getActiveSocket() == NULL) { + audioMixer->activatePublicSocket(); + } + + // we have an active audio mixer we can send data to + eveAudioInjector->injectAudio(&::audioSocket, audioMixer->getActiveSocket()); + } + + ::injectAudioThreadRunning = false; + pthread_exit(0); + return NULL; +} + int main(int argc, char* argv[]) { + // new seed for random audio sleep times + srand(time(0)); + // create an AgentList instance to handle communication with other agents AgentList *agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, EVE_AGENT_LIST_PORT); @@ -84,6 +118,9 @@ int main(int argc, char* argv[]) { 0.25, eve.getBodyPosition()[2] + 0.1)); + // read eve's audio data + AudioInjector eveAudioInjector = AudioInjector("eve.raw"); + unsigned char broadcastPacket[MAX_PACKET_SIZE]; broadcastPacket[0] = PACKET_HEADER_HEAD_DATA; @@ -92,6 +129,9 @@ int main(int argc, char* argv[]) { timeval thisSend; double numMicrosecondsSleep = 0; + int numIterationsLeftBeforeAudioSend = 0; + pthread_t injectAudioThread; + while (true) { // update the thisSend timeval to the current time gettimeofday(&thisSend, NULL); @@ -104,11 +144,21 @@ int main(int argc, char* argv[]) { // use the getBroadcastData method in the AvatarData class to populate the broadcastPacket buffer numBytesToSend = eve.getBroadcastData((broadcastPacket + 1)); - // use the UDPSocket instance attached to our agent list to send avatar data to mixer agentList->getAgentSocket().send(avatarMixer->getActiveSocket(), broadcastPacket, numBytesToSend); } + if (numIterationsLeftBeforeAudioSend == 0) { + if (!::injectAudioThreadRunning) { + pthread_create(&injectAudioThread, NULL, injectAudio, (void*) &eveAudioInjector); + + numIterationsLeftBeforeAudioSend = randIntInRange(MIN_ITERATIONS_BETWEEN_AUDIO_SENDS, + MAX_ITERATIONS_BETWEEN_AUDIO_SENDS); + } + } else { + numIterationsLeftBeforeAudioSend--; + } + // sleep for the correct amount of time to have data send be consistently timed if ((numMicrosecondsSleep = (DATA_SEND_INTERVAL_MSECS * 1000) - (usecTimestampNow() - usecTimestamp(&thisSend))) > 0) { usleep(numMicrosecondsSleep); diff --git a/injector/src/injector.cpp b/injector/src/main.cpp similarity index 100% rename from injector/src/injector.cpp rename to injector/src/main.cpp diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index d1bbf5e65b..89690fc491 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -35,8 +35,6 @@ float browThickness = 0.16; bool usingBigSphereCollisionTest = true; - - char iris_texture_file[] = "resources/images/green_eye.png"; vector iris_texture; diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index 5744c0780a..923052beb3 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -24,7 +24,7 @@ using shared_lib::printLog; -const char SOLO_AGENT_TYPES_STRING[] = { +const char SOLO_AGENT_TYPES[3] = { AGENT_TYPE_AVATAR_MIXER, AGENT_TYPE_AUDIO_MIXER, AGENT_TYPE_VOXEL @@ -305,8 +305,8 @@ void AgentList::handlePingReply(sockaddr *agentAddress) { } } -Agent* AgentList::soloAgentOfType(char agentType) { - if (memchr(SOLO_AGENT_TYPES_STRING, agentType, 1)) { +Agent* AgentList::soloAgentOfType(char agentType) { + if (memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES)) != NULL) { for(std::vector::iterator agent = agents.begin(); agent != agents.end(); agent++) { if (agent->getType() == agentType) { return &*agent; diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index f62d527116..d7459aafd3 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -22,7 +22,7 @@ const int MAX_PACKET_SIZE = 1500; const unsigned int AGENT_SOCKET_LISTEN_PORT = 40103; const int AGENT_SILENCE_THRESHOLD_USECS = 2 * 1000000; -extern const char SOLO_AGENT_TYPES_STRING[]; +extern const char SOLO_AGENT_TYPES[]; extern char DOMAIN_HOSTNAME[]; extern char DOMAIN_IP[100]; // IP Address will be re-set by lookup on startup diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 5cd7500bdd..e96d7288fc 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -16,10 +16,11 @@ const int BUFFER_LENGTH_BYTES = 512; const int BUFFER_LENGTH_SAMPLES = BUFFER_LENGTH_BYTES / sizeof(int16_t); -const float SAMPLE_RATE = 22050.0; +const float SAMPLE_RATE = 22050.0f; const float BUFFER_SEND_INTERVAL_USECS = (BUFFER_LENGTH_SAMPLES / SAMPLE_RATE) * 1000000; AudioInjector::AudioInjector(const char* filename) : + _numTotalBytesAudio(0), _bearing(0), _attenuationModifier(255) { @@ -33,11 +34,18 @@ AudioInjector::AudioInjector(const char* filename) : sourceFile.seekg(0, std::ios::end); _numTotalBytesAudio = sourceFile.tellg(); - sourceFile.seekg(0, std::ios::beg); - long sizeOfShortArray = _numTotalBytesAudio / 2; - _audioSampleArray = new int16_t[sizeOfShortArray]; + if (_numTotalBytesAudio == -1) { + printf("Error reading audio data from file %s\n", filename); + _audioSampleArray = NULL; + } else { + printf("Read %d bytes from audio file\n", _numTotalBytesAudio); + sourceFile.seekg(0, std::ios::beg); + long sizeOfShortArray = _numTotalBytesAudio / 2; + _audioSampleArray = new int16_t[sizeOfShortArray]; + + sourceFile.read((char *)_audioSampleArray, _numTotalBytesAudio); + } - sourceFile.read((char *)_audioSampleArray, _numTotalBytesAudio); } AudioInjector::~AudioInjector() { @@ -51,42 +59,45 @@ void AudioInjector::setPosition(float* position) { } void AudioInjector::injectAudio(UDPSocket *injectorSocket, sockaddr *destinationSocket) { - timeval startTime; - - // one byte for header, 3 positional floats, 1 bearing float, 1 attenuation modifier byte - int leadingBytes = 1 + (sizeof(float) * 4) + 1; - unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes]; - - dataPacket[0] = PACKET_HEADER_INJECT_AUDIO; - unsigned char *currentPacketPtr = dataPacket + 1; - - for (int i = 0; i < 3; i++) { - memcpy(currentPacketPtr, &_position[i], sizeof(float)); - currentPacketPtr += sizeof(float); - } - - *currentPacketPtr = _attenuationModifier; - currentPacketPtr++; - - memcpy(currentPacketPtr, &_bearing, sizeof(float)); - currentPacketPtr += sizeof(float); - - for (int i = 0; i < _numTotalBytesAudio; i += BUFFER_LENGTH_BYTES) { - gettimeofday(&startTime, NULL); + if (_audioSampleArray != NULL) { + timeval startTime; - int numBytesToCopy = BUFFER_LENGTH_BYTES; + // one byte for header, 3 positional floats, 1 bearing float, 1 attenuation modifier byte + int leadingBytes = 1 + (sizeof(float) * 4) + 1; + unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes]; - if (_numTotalBytesAudio - i < BUFFER_LENGTH_BYTES) { - numBytesToCopy = _numTotalBytesAudio - i; - memset(currentPacketPtr + numBytesToCopy, 0, BUFFER_LENGTH_BYTES - numBytesToCopy); + dataPacket[0] = PACKET_HEADER_INJECT_AUDIO; + unsigned char *currentPacketPtr = dataPacket + 1; + + for (int i = 0; i < 3; i++) { + memcpy(currentPacketPtr, &_position[i], sizeof(float)); + currentPacketPtr += sizeof(float); } - memcpy(currentPacketPtr, _audioSampleArray + (i / 2), numBytesToCopy); - injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket)); + *currentPacketPtr = _attenuationModifier; + currentPacketPtr++; - double usecToSleep = BUFFER_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&startTime)); - if (usecToSleep > 0) { - usleep(usecToSleep); + memcpy(currentPacketPtr, &_bearing, sizeof(float)); + currentPacketPtr += sizeof(float); + + for (int i = 0; i < _numTotalBytesAudio; i += BUFFER_LENGTH_BYTES) { + gettimeofday(&startTime, NULL); + + int numBytesToCopy = BUFFER_LENGTH_BYTES; + + if (_numTotalBytesAudio - i < BUFFER_LENGTH_BYTES) { + numBytesToCopy = _numTotalBytesAudio - i; + memset(currentPacketPtr + numBytesToCopy, 0, BUFFER_LENGTH_BYTES - numBytesToCopy); + } + + memcpy(currentPacketPtr, _audioSampleArray + (i / 2), numBytesToCopy); + + injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket)); + + double usecToSleep = BUFFER_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&startTime)); + if (usecToSleep > 0) { + usleep(usecToSleep); + } } } } From ddc74984b5007c4b98b6611a0a15bce86fefde3c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:52:25 -0700 Subject: [PATCH 05/18] fix pointer var declarations, AudioInjector constructor in eve main --- eve/src/main.cpp | 14 +++++++------- libraries/shared/src/AudioInjector.cpp | 1 - 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index a86a04456f..087b28e635 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -33,8 +33,8 @@ void *receiveAgentData(void *args) { ssize_t bytesReceived; unsigned char incomingPacket[MAX_PACKET_SIZE]; - AgentList *agentList = AgentList::getInstance(); - Agent *avatarMixer = NULL; + AgentList* agentList = AgentList::getInstance(); + Agent* avatarMixer = NULL; while (!::stopReceiveAgentDataThread) { if (agentList->getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) { @@ -65,10 +65,10 @@ void *receiveAgentData(void *args) { void *injectAudio(void *args) { ::injectAudioThreadRunning = true; - AudioInjector *eveAudioInjector = (AudioInjector *)args; + AudioInjector* eveAudioInjector = (AudioInjector *)args; // look for an audio mixer in our agent list - Agent *audioMixer = AgentList::getInstance()->soloAgentOfType(AGENT_TYPE_AUDIO_MIXER); + Agent* audioMixer = AgentList::getInstance()->soloAgentOfType(AGENT_TYPE_AUDIO_MIXER); if (audioMixer != NULL) { // until the audio mixer is setup for ping-reply, activate the public socket if it's not active @@ -85,12 +85,12 @@ void *injectAudio(void *args) { return NULL; } -int main(int argc, char* argv[]) { +int main(int argc, const char* argv[]) { // new seed for random audio sleep times srand(time(0)); // create an AgentList instance to handle communication with other agents - AgentList *agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, EVE_AGENT_LIST_PORT); + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, EVE_AGENT_LIST_PORT); // start telling the domain server that we are alive agentList->startDomainServerCheckInThread(); @@ -119,7 +119,7 @@ int main(int argc, char* argv[]) { eve.getBodyPosition()[2] + 0.1)); // read eve's audio data - AudioInjector eveAudioInjector = AudioInjector("eve.raw"); + AudioInjector eveAudioInjector("eve.raw"); unsigned char broadcastPacket[MAX_PACKET_SIZE]; broadcastPacket[0] = PACKET_HEADER_HEAD_DATA; diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index e96d7288fc..046127c50a 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -45,7 +45,6 @@ AudioInjector::AudioInjector(const char* filename) : sourceFile.read((char *)_audioSampleArray, _numTotalBytesAudio); } - } AudioInjector::~AudioInjector() { From 9d7e29e06f82a38f85d5758dcfbb3daa23376018 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:53:24 -0700 Subject: [PATCH 06/18] fix constructors in eve main and injector main --- eve/src/main.cpp | 2 +- injector/src/main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 087b28e635..5a16556e06 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -26,7 +26,7 @@ bool stopReceiveAgentDataThread; bool injectAudioThreadRunning = false; int TEMP_AUDIO_LISTEN_PORT = 55439; -UDPSocket audioSocket = UDPSocket(TEMP_AUDIO_LISTEN_PORT); +UDPSocket audioSocket(TEMP_AUDIO_LISTEN_PORT); void *receiveAgentData(void *args) { sockaddr senderAddress; diff --git a/injector/src/main.cpp b/injector/src/main.cpp index 39981d277b..2822f608f9 100644 --- a/injector/src/main.cpp +++ b/injector/src/main.cpp @@ -98,7 +98,7 @@ int main(int argc, char* argv[]) { srand(time(0)); int AUDIO_UDP_SEND_PORT = 1500 + (rand() % (int)(1500 - 2000 + 1)); - UDPSocket streamSocket = UDPSocket(AUDIO_UDP_SEND_PORT); + UDPSocket streamSocket(AUDIO_UDP_SEND_PORT); sockaddr_in mixerSocket; mixerSocket.sin_family = AF_INET; @@ -110,7 +110,7 @@ int main(int argc, char* argv[]) { std::cout << "[FATAL] Source audio file not specified" << std::endl; exit(-1); } else { - AudioInjector injector = AudioInjector(sourceAudioFile); + AudioInjector injector(sourceAudioFile); injector.setPosition(::floatArguments); injector.setBearing(*(::floatArguments + 3)); From fd6fb60d2498b0c6aed99a424bd6acdcb9150cf7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:55:42 -0700 Subject: [PATCH 07/18] fix pointer var declarations in AudioInjector class --- libraries/shared/src/AudioInjector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 046127c50a..25ea16e18a 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -57,7 +57,7 @@ void AudioInjector::setPosition(float* position) { _position[2] = position[2]; } -void AudioInjector::injectAudio(UDPSocket *injectorSocket, sockaddr *destinationSocket) { +void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) { if (_audioSampleArray != NULL) { timeval startTime; From ed5afb353795156623c600c504b6a4caaa0c69d1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:57:41 -0700 Subject: [PATCH 08/18] add const to injectAudio method --- libraries/shared/src/AudioInjector.cpp | 2 +- libraries/shared/src/AudioInjector.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 25ea16e18a..15151f2cef 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -57,7 +57,7 @@ void AudioInjector::setPosition(float* position) { _position[2] = position[2]; } -void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) { +const void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) { if (_audioSampleArray != NULL) { timeval startTime; diff --git a/libraries/shared/src/AudioInjector.h b/libraries/shared/src/AudioInjector.h index 2456a95c57..220b00bb55 100644 --- a/libraries/shared/src/AudioInjector.h +++ b/libraries/shared/src/AudioInjector.h @@ -23,7 +23,7 @@ public: void setBearing(float bearing) { _bearing = bearing; } void setAttenuationModifier(unsigned char attenuationModifier) { _attenuationModifier = attenuationModifier; } - void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket); + const void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket); private: int16_t* _audioSampleArray; int _numTotalBytesAudio; From 49f9dfe03c93f7fd95b6d26d6636fb4e313a6af7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 13:59:59 -0700 Subject: [PATCH 09/18] make argv a const so Brad quiets down --- eve/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 5a16556e06..a228454f22 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -85,7 +85,7 @@ void *injectAudio(void *args) { return NULL; } -int main(int argc, const char* argv[]) { +int main(const int argc, const char* argv[]) { // new seed for random audio sleep times srand(time(0)); From 620615599f8f5168688a2dbd5317facfe0396e12 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 14:01:19 -0700 Subject: [PATCH 10/18] fix the const for injectAudio --- libraries/shared/src/AudioInjector.cpp | 2 +- libraries/shared/src/AudioInjector.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 15151f2cef..6b0ba7203e 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -57,7 +57,7 @@ void AudioInjector::setPosition(float* position) { _position[2] = position[2]; } -const void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) { +void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) const { if (_audioSampleArray != NULL) { timeval startTime; diff --git a/libraries/shared/src/AudioInjector.h b/libraries/shared/src/AudioInjector.h index 220b00bb55..2515dcfcdc 100644 --- a/libraries/shared/src/AudioInjector.h +++ b/libraries/shared/src/AudioInjector.h @@ -23,7 +23,7 @@ public: void setBearing(float bearing) { _bearing = bearing; } void setAttenuationModifier(unsigned char attenuationModifier) { _attenuationModifier = attenuationModifier; } - const void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket); + void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) const; private: int16_t* _audioSampleArray; int _numTotalBytesAudio; From 32b1e88a0a4c24c7abc9fe857cca70fe74f7fe74 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 14:03:20 -0700 Subject: [PATCH 11/18] add ALL THE CONSTS --- injector/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/injector/src/main.cpp b/injector/src/main.cpp index 2822f608f9..7de6b030be 100644 --- a/injector/src/main.cpp +++ b/injector/src/main.cpp @@ -93,7 +93,7 @@ bool processParameters(int parameterCount, char* parameterData[]) return true; }; -int main(int argc, char* argv[]) { +int main(const int argc, const char* argv[]) { srand(time(0)); int AUDIO_UDP_SEND_PORT = 1500 + (rand() % (int)(1500 - 2000 + 1)); From 8a222da42fbf5467d26dadbc843eaa2686185b82 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 14:05:24 -0700 Subject: [PATCH 12/18] const int is unnecessary --- eve/src/main.cpp | 2 +- injector/src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index a228454f22..5a16556e06 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -85,7 +85,7 @@ void *injectAudio(void *args) { return NULL; } -int main(const int argc, const char* argv[]) { +int main(int argc, const char* argv[]) { // new seed for random audio sleep times srand(time(0)); diff --git a/injector/src/main.cpp b/injector/src/main.cpp index 7de6b030be..b110f7553c 100644 --- a/injector/src/main.cpp +++ b/injector/src/main.cpp @@ -93,7 +93,7 @@ bool processParameters(int parameterCount, char* parameterData[]) return true; }; -int main(const int argc, const char* argv[]) { +int main(int argc, const char* argv[]) { srand(time(0)); int AUDIO_UDP_SEND_PORT = 1500 + (rand() % (int)(1500 - 2000 + 1)); From ceefda8ce12c4f8440fd479cb6037dd68d9df7d2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 14:09:09 -0700 Subject: [PATCH 13/18] add cstring for memset and memcpy --- libraries/shared/src/AudioInjector.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 6b0ba7203e..6e65c168d0 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -8,6 +8,7 @@ #include #include +#include #include "SharedUtil.h" #include "PacketHeaders.h" From 3344016212a0f87f36820bad53e71f5daf6754d5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 14:12:21 -0700 Subject: [PATCH 14/18] SOLO_AGENT_TYPES needs a defined size --- libraries/shared/src/AgentList.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index d7459aafd3..76d6917168 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -22,7 +22,7 @@ const int MAX_PACKET_SIZE = 1500; const unsigned int AGENT_SOCKET_LISTEN_PORT = 40103; const int AGENT_SILENCE_THRESHOLD_USECS = 2 * 1000000; -extern const char SOLO_AGENT_TYPES[]; +extern const char SOLO_AGENT_TYPES[3]; extern char DOMAIN_HOSTNAME[]; extern char DOMAIN_IP[100]; // IP Address will be re-set by lookup on startup From 2b7095925d5932efb8edfd7fe7da96ee84cb4d18 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 15:45:29 -0700 Subject: [PATCH 15/18] add randomization of eve's position, face eve down z-axis --- eve/src/main.cpp | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 5a16556e06..ed4ec36e98 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -15,8 +15,9 @@ #include #include -const int EVE_AGENT_LIST_PORT = 55441; -const float DATA_SEND_INTERVAL_MSECS = 10; +const float RANDOM_POSITION_MAX_DIMENSION = 5.0f; + +const float DATA_SEND_INTERVAL_MSECS = 15; const float MIN_AUDIO_SEND_INTERVAL_SECS = 10; const int MIN_ITERATIONS_BETWEEN_AUDIO_SENDS = (MIN_AUDIO_SEND_INTERVAL_SECS * 1000) / DATA_SEND_INTERVAL_MSECS; const int MAX_AUDIO_SEND_INTERVAL_SECS = 15; @@ -26,7 +27,7 @@ bool stopReceiveAgentDataThread; bool injectAudioThreadRunning = false; int TEMP_AUDIO_LISTEN_PORT = 55439; -UDPSocket audioSocket(TEMP_AUDIO_LISTEN_PORT); +// UDPSocket audioSocket(TEMP_AUDIO_LISTEN_PORT); void *receiveAgentData(void *args) { sockaddr senderAddress; @@ -77,7 +78,7 @@ void *injectAudio(void *args) { } // we have an active audio mixer we can send data to - eveAudioInjector->injectAudio(&::audioSocket, audioMixer->getActiveSocket()); +// eveAudioInjector->injectAudio(&::audioSocket, audioMixer->getActiveSocket()); } ::injectAudioThreadRunning = false; @@ -90,7 +91,7 @@ int main(int argc, const char* argv[]) { srand(time(0)); // create an AgentList instance to handle communication with other agents - AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, EVE_AGENT_LIST_PORT); + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, 55441); // start telling the domain server that we are alive agentList->startDomainServerCheckInThread(); @@ -108,10 +109,14 @@ int main(int argc, const char* argv[]) { AvatarData eve = AvatarData(); // move eve away from the origin - eve.setBodyPosition(glm::vec3(3, 0, -3)); + // pick a random point inside a 10x10 grid - // turn her back towards the origin - eve.setBodyYaw(-45); + eve.setBodyPosition(glm::vec3(randFloatInRange(-RANDOM_POSITION_MAX_DIMENSION, RANDOM_POSITION_MAX_DIMENSION), + 0, + randFloatInRange(-RANDOM_POSITION_MAX_DIMENSION, RANDOM_POSITION_MAX_DIMENSION))); + + // face any instance of eve down the z-axis + eve.setBodyYaw(0); // put her hand out so somebody can shake it eve.setHandPosition(glm::vec3(eve.getBodyPosition()[0] - 0.2, @@ -129,8 +134,8 @@ int main(int argc, const char* argv[]) { timeval thisSend; double numMicrosecondsSleep = 0; - int numIterationsLeftBeforeAudioSend = 0; - pthread_t injectAudioThread; +// int numIterationsLeftBeforeAudioSend = 0; +// pthread_t injectAudioThread; while (true) { // update the thisSend timeval to the current time @@ -147,17 +152,18 @@ int main(int argc, const char* argv[]) { // use the UDPSocket instance attached to our agent list to send avatar data to mixer agentList->getAgentSocket().send(avatarMixer->getActiveSocket(), broadcastPacket, numBytesToSend); } - - if (numIterationsLeftBeforeAudioSend == 0) { - if (!::injectAudioThreadRunning) { - pthread_create(&injectAudioThread, NULL, injectAudio, (void*) &eveAudioInjector); - - numIterationsLeftBeforeAudioSend = randIntInRange(MIN_ITERATIONS_BETWEEN_AUDIO_SENDS, - MAX_ITERATIONS_BETWEEN_AUDIO_SENDS); - } - } else { - numIterationsLeftBeforeAudioSend--; - } + + // temporarily disable Eve's audio sending until the file is actually available on EC2 box +// if (numIterationsLeftBeforeAudioSend == 0) { +// if (!::injectAudioThreadRunning) { +// pthread_create(&injectAudioThread, NULL, injectAudio, (void*) &eveAudioInjector); +// +// numIterationsLeftBeforeAudioSend = randIntInRange(MIN_ITERATIONS_BETWEEN_AUDIO_SENDS, +// MAX_ITERATIONS_BETWEEN_AUDIO_SENDS); +// } +// } else { +// numIterationsLeftBeforeAudioSend--; +// } // sleep for the correct amount of time to have data send be consistently timed if ((numMicrosecondsSleep = (DATA_SEND_INTERVAL_MSECS * 1000) - (usecTimestampNow() - usecTimestamp(&thisSend))) > 0) { From a4244da27efded4db93731827214555afc88cb28 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 15:46:57 -0700 Subject: [PATCH 16/18] add randomization of eve's listening port on launch --- eve/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index ed4ec36e98..d1a82b860d 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -91,7 +91,7 @@ int main(int argc, const char* argv[]) { srand(time(0)); // create an AgentList instance to handle communication with other agents - AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, 55441); + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, randIntInRange(1500, 65000)); // start telling the domain server that we are alive agentList->startDomainServerCheckInThread(); From 11986ca00f6d87727ef15af89f395f4db08547ed Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 15:58:06 -0700 Subject: [PATCH 17/18] add IP address to DS information output --- libraries/shared/src/AgentList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index 923052beb3..15c4abdd85 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -428,7 +428,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)); - printLog("Domain server: %s \n", DOMAIN_HOSTNAME); + printLog("Domain server: %s - %s\n", DOMAIN_HOSTNAME, DOMAIN_IP); } else { printLog("Failed lookup domainserver\n"); From 0014b045affddff54bce901f84edb0617284fe06 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Apr 2013 17:35:00 -0700 Subject: [PATCH 18/18] hard code eve's listen port again so she shows up on EC2 --- eve/src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index d1a82b860d..6dfe9ea606 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -15,6 +15,8 @@ #include #include +const int EVE_AGENT_LISTEN_PORT = 55441; + const float RANDOM_POSITION_MAX_DIMENSION = 5.0f; const float DATA_SEND_INTERVAL_MSECS = 15; @@ -91,7 +93,7 @@ int main(int argc, const char* argv[]) { srand(time(0)); // create an AgentList instance to handle communication with other agents - AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, randIntInRange(1500, 65000)); + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AVATAR, EVE_AGENT_LISTEN_PORT); // start telling the domain server that we are alive agentList->startDomainServerCheckInThread();