bool ofxOscReceiver::getParameter(ofAbstractParameter & parameter){ ofxOscMessage msg; if ( messages.size() == 0 ) return false; while(hasWaitingMessages()){ ofAbstractParameter * p = ¶meter; getNextMessage(&msg); vector<string> address = ofSplitString(msg.getAddress(),"/",true); for(int i=0;i<address.size();i++){ if(address[i]==p->getEscapedName()){ if(p->type()==typeid(ofParameterGroup).name()){ if(address.size()>i+1 && static_cast<ofParameterGroup*>(p)->contains(address[i+1])){ p = &static_cast<ofParameterGroup*>(p)->get(address[i+1]); } }else if(p->type()==typeid(ofParameter<int>).name() && msg.getArgType(0)==OFXOSC_TYPE_INT32){ p->cast<int>() = msg.getArgAsInt32(0); }else if(p->type()==typeid(ofParameter<float>).name() && msg.getArgType(0)==OFXOSC_TYPE_FLOAT){ ofParameter<float> * param = dynamic_cast<ofParameter<float>* >(p); float length = param->getMax() - param->getMin(); p->cast<float>() = ( msg.getArgAsFloat(0) * length ) + param->getMin(); }else if(p->type()==typeid(ofParameter<bool>).name() && msg.getArgType(0)==OFXOSC_TYPE_INT32){ p->cast<bool>() = msg.getArgAsInt32(0); }else if(msg.getArgType(0)==OFXOSC_TYPE_STRING){ p->fromString(msg.getArgAsString(0)); } } } } return true; }
void ofxDuration::update(ofEventArgs& args){ while(hasWaitingMessages()){ ofxOscMessage m; getNextMessage(&m); //duration will send an info package whenever play begins //we use this to set up all the track info if(m.getAddress() == "/duration/info"){ parseInfoMessage(m); } else { parseTrackMessage(m); } } }
//-------------------------------------------------------------- void oscReceiver::update() { if (hasWaitingMessages()) { while(getNextMessage(&m_oscMessage)) { // int indexArg = 0; ofLog() << "oscReceiver::update() - received " << m_oscMessage.getAddress(); if (m_oscMessage.getAddress() == OSC_MOD_SET_WEIGHT) { apparelModManager* pModManager = GLOBALS->getModManager(); if (pModManager) { // Name of the mod string instanceName = m_oscMessage.getArgAsString(0); // Get Mod instance apparelMod* pMod = pModManager->getMod(instanceName); // Exists ?? if (pMod && pMod->m_isWeightManual) { pMod->setWeight( m_oscMessage.getArgAsFloat(1) ); } } } else if (m_oscMessage.getAddress() == OSC_MOD_SET_PARAMETER) { apparelModManager* pModManager = GLOBALS->getModManager(); if (pModManager) { // Name of the mod string instanceName = m_oscMessage.getArgAsString(0); // Get Mod instance apparelMod* pMod = pModManager->getMod(instanceName); // Exists ?? if (pMod) { if (m_oscMessage.getNumArgs() == 3) { string parameterName = m_oscMessage.getArgAsString(1); ofAbstractParameter& modParam = pMod->getParameter(parameterName); setParameterValue(modParam, m_oscMessage, 2); //OFAPPLOG->println("instanceName="+instanceName+"/parameterName="+parameterName); // OFAPPLOG->println("value for "+instanceName+"/"+parameterName+"="+modParam.toString()); } // else if (m_oscMessage.getNumArgs() == 4) { string groupName = m_oscMessage.getArgAsString(1); string parameterName = m_oscMessage.getArgAsString(2); ofAbstractParameter& modGroupParam = pMod->getParameter(groupName); if (modGroupParam.type()==typeid(ofParameterGroup).name()) { setParameterValue(modGroupParam, m_oscMessage, 3); } } } } } } } }
void ofxTSPSReceiver::update( ofEventArgs &e ){ if(hasWaitingMessages()){ // check for waiting messages while( hasWaitingMessages() ){ // get the next message ofxOscMessage m; getNextMessage( &m ); if(m.getAddress() == "TSPS/scene/") { scene.idleTime = m.getArgAsFloat(0); scene.percentCovered = m.getArgAsFloat(1); } if (m.getAddress() == "TSPS/personEntered/" || m.getAddress() == "TSPS/personMoved/" || m.getAddress() == "TSPS/personUpdated/" || m.getAddress() == "TSPS/personWillLeave/"){ int id = m.getArgAsInt32(0); bool personIsNew = false; ofxTSPSPerson* person = personWithID( id ); if(person == NULL){ person = new ofxTSPSPerson(id, trackedPeople.size()); trackedPeople.push_back(person); personIsNew = true; } person->update( &m ); if(eventListener != NULL){ if (m.getAddress() == "TSPS/personEntered/" || personIsNew){ eventListener->personEntered(person, &scene); } else if (m.getAddress() == "TSPS/personMoved/"){ eventListener->personMoved(person, &scene); } else if (m.getAddress() == "TSPS/personUpdated/"){ eventListener->personUpdated(person, &scene); } else if (m.getAddress() == "TSPS/personWillLeave/"){ eventListener->personWillLeave(person, &scene); } } if(m.getAddress() == "TSPS/personWillLeave/"){ for (int i = trackedPeople.size() - 1; i >= 0; i--){ if (trackedPeople[i]->pid == person->pid){ trackedPeople.erase(trackedPeople.begin() + i); break; } } delete person; } } } } //clear orphaned blobs for(int i = trackedPeople.size()-1; i >= 0; i--) { if(ofGetElapsedTimeMillis()-trackedPeople[i]->updatedAt > personTimeout) { trackedPeople.erase(trackedPeople.begin() + i); eventListener->personWillLeave(trackedPeople[i], &scene); } } }
//-------------------------------------------------------------- void oscReceiver::update() { DeviceManager* pDeviceManager = Globals::instance()->mp_deviceManager; if (hasWaitingMessages()) { while(getNextMessage(&m_oscMessage)) { int indexArg = 0; if (m_oscMessage.getAddress() == OSC_ADDRESS_SET_DEVICE_PROP) { Device* pDevice = pDeviceManager->getDeviceById( m_oscMessage.getArgAsString(indexArg++) ); if (pDevice) { // Property string propName = m_oscMessage.getArgAsString(indexArg++); if (propName == "volMax") { pDevice->setSoundInputVolumeMaxOSC( m_oscMessage.getArgAsFloat(indexArg) ); } else if (propName == "volHistorySize") { pDevice->setSoundInputVolHistorySizeOSC( m_oscMessage.getArgAsInt32(indexArg) ); } else if (propName == "volHistoryTh") { pDevice->setSoundInputVolHistoryThOSC( m_oscMessage.getArgAsFloat(indexArg) ); } else if (propName == "enableStandbyMode") { pDevice->setEnableStandbyModeOSC( m_oscMessage.getArgAsInt32(indexArg)==1 ? true : false ); } else if (propName == "timeStandby") { //printf("timeStandby = %.3f - ", m_oscMessage.getArgAsFloat(indexArg)); pDevice->setTimeStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) ); } else if (propName == "sampleVolStandby") { pDevice->setSampleVolumeStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) ); } else if (propName == "nbLEDsStandby") { // pDevice->setNbLEDsStandbyOSC( m_oscMessage.getArgAsInt32(indexArg) ); } else if (propName == "speedStandby") { // pDevice->setSpeedStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) ); } } } else if (m_oscMessage.getAddress() == OSC_ADDRESS_SEND_PACKETS) { if (pDeviceManager) { string deviceId = m_oscMessage.getArgAsString(indexArg++); Device* pDevice = pDeviceManager->getDeviceById( deviceId ); // Not found, create the device now if (pDevice == 0) { // TODO : type ? -> factory if (Globals::instance()->mp_app->isSimulation == false) { int nbLEDs = m_oscMessage.getNumArgs() - indexArg; // WARNING with this printf("> New Device found ! id=%s, nbLEDs=%d\n", deviceId.c_str(), nbLEDs); DeviceEcho* pDeviceEcho = new DeviceEcho(deviceId, nbLEDs, 4.0f/float(nbLEDs-1)); pDeviceEcho->setupSenderOSC(m_oscMessage.getRemoteIp(), 1235); pDeviceEcho->loadXML("Config/devices/"); // Add device to list pDeviceManager->addDevice(pDeviceEcho); // TEMP / TODO : attach to surface main if (Globals::instance()->mp_app->mp_surfaceMain) Globals::instance()->mp_app->mp_surfaceMain->addDevice(pDeviceEcho); // Create a node in visualisation scene Globals::instance()->mp_app->createDeviceNodeInScene(pDeviceEcho); // Update interface //Globals::instance()->mp_app->guiMarkUpdateLayout(); Globals::instance()->mp_app->guiUpdateListDevices(); Globals::instance()->mp_app->selectDevice(pDeviceEcho->m_id); // TODO : Send configuration parameters to it (if any) } } // Decode new message if (pDevice) { pDevice->onReceivePacketBegin(); int nbPackets = m_oscMessage.getNumArgs() - indexArg; // TODO : Be careful with this for (int i=0;i<nbPackets;i++) { m_packetTemp.m_volume = m_oscMessage.getArgAsFloat(indexArg++); // TODO : Other arguments to decode here // Send to device pDevice->onReceivePacket(&m_packetTemp); } pDevice->onReceivePacketEnd(); // Get the surface of device and update animation Surface* pSurface = Globals::instance()->mp_app->getSurfaceForDevice(pDevice); if (pSurface){ pSurface->onNewPacket( pDevice->getLastPacket(), pDevice->m_id ); } } } } // New Device plugged // printf("osc %s - %d arguments\n", m_oscMessage.getAddress().c_str(), m_oscMessage.getNumArgs()); // New Device event } } }