From a4be44c2c5174219b0d335e6a034bd8597a6b715 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 16 Oct 2013 17:28:42 -0700 Subject: [PATCH] remove the injector target --- CMakeLists.txt | 1 - injector/CMakeLists.txt | 22 ---- injector/src/main.cpp | 244 ---------------------------------------- 3 files changed, 267 deletions(-) delete mode 100644 injector/CMakeLists.txt delete mode 100644 injector/src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 279f6a6776..7964413d2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,6 @@ add_subdirectory(animation-server) add_subdirectory(assignment-client) add_subdirectory(domain-server) add_subdirectory(interface) -add_subdirectory(injector) add_subdirectory(pairing-server) add_subdirectory(space-server) add_subdirectory(voxel-edit) \ No newline at end of file diff --git a/injector/CMakeLists.txt b/injector/CMakeLists.txt deleted file mode 100644 index ae9ed3d8ad..0000000000 --- a/injector/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -set(ROOT_DIR ..) -set(MACRO_DIR ${ROOT_DIR}/cmake/macros) - -# setup for find modules -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules/") - -set(TARGET_NAME injector) - -include(${MACRO_DIR}/SetupHifiProject.cmake) -setup_hifi_project(${TARGET_NAME} TRUE) - -# set up the external glm library -include(${MACRO_DIR}/IncludeGLM.cmake) -include_glm(${TARGET_NAME} ${ROOT_DIR}) - -# link the shared hifi library -include(${MACRO_DIR}/LinkHifiLibrary.cmake) -link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file diff --git a/injector/src/main.cpp b/injector/src/main.cpp deleted file mode 100644 index 9caad19e60..0000000000 --- a/injector/src/main.cpp +++ /dev/null @@ -1,244 +0,0 @@ -// -// main.cpp -// Audio Injector -// -// Created by Leonardo Murillo on 3/5/13. -// Copyright (c) 2013 Leonardo Murillo. All rights reserved. -// - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -const int AVATAR_MIXER_DATA_SEND_INTERVAL_MSECS = 15; - -const int DEFAULT_INJECTOR_VOLUME = 0xFF; - -enum { - INJECTOR_POSITION_X, - INJECTOR_POSITION_Y, - INJECTOR_POSITION_Z, - INJECTOR_YAW -}; - -// Command line parameter defaults -bool shouldLoopAudio = true; -bool hasInjectedAudioOnce = false; -float sleepIntervalMin = 1.00; -float sleepIntervalMax = 2.00; -char *sourceAudioFile = NULL; -const char *allowedParameters = ":sc::a::f::t::r:l"; -float floatArguments[4] = {0.0f, 0.0f, 0.0f, 0.0f}; -unsigned char volume = DEFAULT_INJECTOR_VOLUME; -float triggerDistance = 0.0f; -float radius = 0.0f; -bool wantsLocalDomain = false; - - -void usage(void) { - std::cout << "High Fidelity - Interface audio injector" << std::endl; - std::cout << " -s Single play mode. If not specified will default to constant loop." << std::endl; - std::cout << " -c FLOAT,FLOAT,FLOAT,FLOAT X,Y,Z,YAW position in universe where audio will be originating from and direction. Defaults to 0,0,0,0" << std::endl; - std::cout << " -a 0-255 Attenuation curve modifier, defaults to 255" << std::endl; - std::cout << " -f FILENAME Name of audio source file. Required - RAW format, 22050hz 16bit signed mono" << std::endl; - std::cout << " -t FLOAT Trigger distance for injection. If not specified will loop constantly" << std::endl; - std::cout << " -r FLOAT Radius for spherical source. If not specified injected audio is point source" << std::endl; - std::cout << " -l Local domain mode." << std::endl; -} - -bool processParameters(int parameterCount, char* parameterData[]) { - int p; - while ((p = getopt(parameterCount, parameterData, allowedParameters)) != -1) { - switch (p) { - case 's': - ::shouldLoopAudio = false; - std::cout << "[DEBUG] Single play mode enabled" << std::endl; - break; - case 'f': - ::sourceAudioFile = optarg; - std::cout << "[DEBUG] Opening file: " << sourceAudioFile << std::endl; - break; - case 'c': - { - std::istringstream ss(optarg); - std::string token; - - int i = 0; - while (std::getline(ss, token, ',')) { - ::floatArguments[i] = atof(token.c_str()); - ++i; - if (i == 4) { - break; - } - } - - break; - } - case 'a': - ::volume = atoi(optarg); - std::cout << "[DEBUG] Attenuation modifier: " << optarg << std::endl; - break; - case 't': - ::triggerDistance = atof(optarg); - std::cout << "[DEBUG] Trigger distance: " << optarg << std::endl; - break; - case 'r': - ::radius = atof(optarg); - std::cout << "[DEBUG] Injector radius: " << optarg << std::endl; - break; - case 'l': - ::wantsLocalDomain = true; - break; - default: - usage(); - return false; - } - } - return true; -}; - -void createAvatarDataForNode(Node* node) { - if (!node->getLinkedData()) { - node->setLinkedData(new AvatarData(node)); - } -} - -int main(int argc, char* argv[]) { - - // new seed for random audio sleep times - srand(time(0)); - - int AUDIO_UDP_SEND_PORT = 1500 + (rand() % (int)(1500 - 2000 + 1)); - - if (processParameters(argc, argv)) { - if (::sourceAudioFile == NULL) { - std::cout << "[FATAL] Source audio file not specified" << std::endl; - exit(-1); - } else { - AudioInjector injector(sourceAudioFile); - - // create an NodeList instance to handle communication with other nodes - NodeList* nodeList = NodeList::createInstance(NODE_TYPE_AUDIO_INJECTOR, AUDIO_UDP_SEND_PORT); - - if (::wantsLocalDomain) { - printf("Local Domain MODE!\n"); - nodeList->setDomainIPToLocalhost(); - } - - // start the node list thread that will kill off nodes when they stop talking - nodeList->startSilentNodeRemovalThread(); - - injector.setPosition(glm::vec3(::floatArguments[INJECTOR_POSITION_X], - ::floatArguments[INJECTOR_POSITION_Y], - ::floatArguments[INJECTOR_POSITION_Z])); - injector.setOrientation(glm::quat(glm::vec3(0.0f, ::floatArguments[INJECTOR_YAW], 0.0f))); - injector.setVolume(::volume); - - if (::radius > 0) { - // if we were passed a cube side length, give that to the injector - injector.setRadius(::radius); - } - - // register the callback for node data creation - nodeList->linkedDataCreateCallback = createAvatarDataForNode; - - timeval lastSend = {}; - int numBytesPacketHeader = numBytesForPacketHeader((unsigned char*) &PACKET_TYPE_INJECT_AUDIO); - unsigned char* broadcastPacket = new unsigned char[numBytesPacketHeader]; - - timeval lastDomainServerCheckIn = {}; - - sockaddr senderAddress; - ssize_t bytesReceived; - unsigned char incomingPacket[MAX_PACKET_SIZE]; - - // the audio injector needs to know about the avatar mixer and the audio mixer - const char INJECTOR_NODES_OF_INTEREST[] = {NODE_TYPE_AUDIO_MIXER, NODE_TYPE_AVATAR_MIXER}; - - int bytesNodesOfInterest = (::triggerDistance > 0) - ? sizeof(INJECTOR_NODES_OF_INTEREST) - : sizeof(INJECTOR_NODES_OF_INTEREST) - 1; - - NodeList::getInstance()->setNodeTypesOfInterest(INJECTOR_NODES_OF_INTEREST, bytesNodesOfInterest); - - while (true) { - // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed - if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { - gettimeofday(&lastDomainServerCheckIn, NULL); - NodeList::getInstance()->sendDomainServerCheckIn(); - } - - while (nodeList->getNodeSocket()->receive(&senderAddress, incomingPacket, &bytesReceived) && - packetVersionMatch(incomingPacket)) { - switch (incomingPacket[0]) { - case PACKET_TYPE_BULK_AVATAR_DATA: // this is the positional data for other nodes - // pass that off to the nodeList processBulkNodeData method - nodeList->processBulkNodeData(&senderAddress, incomingPacket, bytesReceived); - break; - default: - // have the nodeList handle list of nodes from DS, replies from other nodes, etc. - nodeList->processNodeData(&senderAddress, incomingPacket, bytesReceived); - break; - } - } - - if (::triggerDistance) { - if (!injector.isInjectingAudio()) { - // enumerate the other nodes to decide if one is close enough that we should inject - for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { - AvatarData* avatarData = (AvatarData*) node->getLinkedData(); - - if (avatarData) { - glm::vec3 tempVector = injector.getPosition() - avatarData->getPosition(); - - if (glm::dot(tempVector, tempVector) <= ::triggerDistance) { - // use the AudioInjectionManager to thread this injector - AudioInjectionManager::threadInjector(&injector); - } - } - } - } - - // find the current avatar mixer - Node* avatarMixer = nodeList->soloNodeOfType(NODE_TYPE_AVATAR_MIXER); - - // make sure we actually have an avatar mixer with an active socket - if (avatarMixer && avatarMixer->getActiveSocket() != NULL - && (usecTimestampNow() - usecTimestamp(&lastSend) > AVATAR_MIXER_DATA_SEND_INTERVAL_MSECS)) { - - // update the lastSend timeval to the current time - gettimeofday(&lastSend, NULL); - - // use the UDPSocket instance attached to our node list to ask avatar mixer for a list of avatars - nodeList->getNodeSocket()->send(avatarMixer->getActiveSocket(), - broadcastPacket, - numBytesPacketHeader); - } - } else { - if (!injector.isInjectingAudio() && (::shouldLoopAudio || !::hasInjectedAudioOnce)) { - // use the AudioInjectionManager to thread this injector - AudioInjectionManager::threadInjector(&injector); - ::hasInjectedAudioOnce = true; - } - } - } - - // stop the node list's threads - nodeList->stopSilentNodeRemovalThread(); - } - } -} -