DWORD WINAPI #else void* #endif ofxOscReceiver::startThread( void* _socket ) { UdpListeningReceiveSocket* socket = (UdpListeningReceiveSocket*)_socket; socket->Run(); #ifdef TARGET_WIN32 return 0; #else return NULL; #endif }
void * MLOSCListenerStartThread(void *arg) { MLOSCListener* pL = static_cast<MLOSCListener*>(arg); UdpListeningReceiveSocket* pSocket = pL->mpSocket; try { pSocket->Run(); } catch( osc::Exception& e ) { std::cout << "MLOSCListener caught osc exception: " << e.what() << "\n"; } catch( std::runtime_error& e ) { std::cout << "MLOSCListener caught runtime_error exception: " << e.what() << "\n"; } // std::cout << "MLOSCListener: listener thread on port " << port << " terminated.\n"; return 0; }
void OscListener::shutdown() { if (mListen_socket) { mListen_socket->AsynchronousBreak(); while( ! mSocketHasShutdown ) { ci::sleep( 1 ); } mThread->join(); delete mListen_socket; mListen_socket = NULL; } }
MOboolean moNetOSCIn::Init() { int dev; MOuint i, n, n_dev, n_hosts; moText conf, dev_name; //========================== // CORRESPONDE A UN PREINIT //========================== // Loading config file. conf = m_pResourceManager->GetDataMan()->GetDataPath() + moSlash; conf += GetConfigName(); conf += moText(".cfg"); if (m_Config.LoadConfig(conf) != MO_CONFIG_OK ) { moText text = "Couldn't load netoscin config"; MODebug->Push(text); return false; } //========================== // INIT //========================== moDefineParamIndex( NETOSCIN_INLET, moText("inlet") ); moDefineParamIndex( NETOSCIN_OUTLET, moText("outlet") ); moDefineParamIndex( NETOSCIN_HOSTS , moText("hosts") ); moDefineParamIndex( NETOSCIN_PORT , moText("port") ); moDefineParamIndex( NETOSCIN_RECEIVEEVENTS, moText("receive_events") ); bool events_present; bool trackersystem_present; events_present = false; trackersystem_present = false; for( int i=0; i<m_Config.GetParam( moR(NETOSCIN_OUTLET) ).GetValuesCount(); i++) { moValue val( m_Config.GetParam( moR(NETOSCIN_OUTLET) ).GetValue(i)); if ( val.GetSubValue().Text()==moText("EVENTS")) { events_present = true; } if ( val.GetSubValue().Text()==moText("TRACKERSYSTEM")) { trackersystem_present = true; } } if (!events_present) { m_Config.GetParam( moR(NETOSCIN_OUTLET) ).AddValue( moValue( "EVENTS", "TXT", "DATA", "TXT" ).Ref() ); } if (!trackersystem_present) { m_Config.GetParam( moR(NETOSCIN_OUTLET) ).AddValue( moValue( "EVENTS", "TXT", "DATA", "TXT" ).Ref() ); } moMoldeoObject::Init(); for(int a=0; a <GetOutlets()->Count(); a++) { if ( m_Outlets[a]->GetConnectorLabelName() == moText("EVENTS") ) { m_pEvents = m_Outlets[a]; } } // Reading hosts names and ports. n = m_Config.GetParamIndex("hosts"); n_hosts = m_Config.GetValuesCount(n); host_name.Init(n_hosts, moText("")); host_port.Init(n_hosts, 0); for(i = 0; i < n_hosts; i++) { host_name.Set(i, m_Config.GetParam(n).GetValue(i).GetSubValue(0).Text()); host_port.Set(i, m_Config.GetParam(n).GetValue(i).GetSubValue(1).Int()); } for(i = 0; i < n_hosts; i++) { moOscPacketListener* pListener = NULL; pListener = new moOscPacketListener(); if (pListener) { /* if ( host_name[i] == moText("all") ) { if (host_port[i]>0) pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, host_port[i] ), pListener ) ); else pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, IpEndpointName::ANY_PORT ), pListener ) ); } else if ( host_name[i] != moText("") ) { moTextArray ipNumbers; unsigned long ipaddress = 0; unsigned long i1=0, i2=0, i3=0, i4=0; ipNumbers = host_name[i].Explode("."); if (ipNumbers.Count()==4) { i1 = atoi(ipNumbers[0]); i2 = atoi(ipNumbers[1]); i3 = atoi(ipNumbers[2]); i4 = atoi(ipNumbers[3]); ipaddress = (i1 << 24) & (i2<<16) & (i3<<8) & i4; } else { ipaddress = IpEndpointName::ANY_ADDRESS; } if (host_port[i]>0) pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( ipaddress, host_port[i] ), pListener ) ); else pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( ipaddress, IpEndpointName::ANY_PORT ), pListener ) ); } else { pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, IpEndpointName::ANY_PORT ), pListener ) ); } */ UdpListeningReceiveSocket *socket = NULL; try { socket = new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, host_port[i] ), pListener ); } catch (std::exception &e) { MODebug2->Error(moText("could not bind to UDP port ")); socket = NULL; } if (socket!=NULL) { if (!socket->IsBound()) { delete socket; socket = NULL; MODebug2->Error( moText("NETOSCIN UDP socket not connected:") + + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } else { MODebug2->Message( moText("NetOSCIn listening to OSC messages on UDP port ")); pListener->Set(socket); } } if (socket) { m_OscPacketListeners.Add( pListener ); if (pListener->CreateThread()) { MODebug2->Message( moText(" NETOSCIN OK: HOST NAME:") + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } else { MODebug2->Error( moText("NETOSCIN:") + + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } } } } return true; }
void OscListener::threadSocket() { mListen_socket->Run(); mSocketHasShutdown = true; }