X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCListener.cpp diff --git a/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCListener.cpp b/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCListener.cpp new file mode 100644 index 0000000..f29e764 --- /dev/null +++ b/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCListener.cpp @@ -0,0 +1,92 @@ +/* + + Faust Project + + Copyright (C) 2011 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "OSCListener.h" +#include "Message.h" + +#include "osc/OscReceivedElements.h" +#include "ip/IpEndpointName.h" + +using namespace std; +using namespace osc; + +namespace oscfaust +{ + +//-------------------------------------------------------------------------- +OSCListener::OSCListener(MessageProcessor *mp, int port) + : fSocket(0), fMsgHandler(mp), + fRunning(false), fPort(port) +{ + fSocket = new UdpListeningReceiveSocket(IpEndpointName( IpEndpointName::ANY_ADDRESS, fPort ), this); + fPort = 0; +} + +OSCListener::~OSCListener() { stop(); delete fSocket; } + +//-------------------------------------------------------------------------- +void OSCListener::run() +{ + fRunning = true; + while (fRunning) { + try { + if (fPort) { + delete fSocket; + fSocket = new UdpListeningReceiveSocket(IpEndpointName( IpEndpointName::ANY_ADDRESS, fPort ), this); + fPort = 0; + } + fSocket->Run(); + } + catch (osc::Exception e) { + cerr << "osc error: " << e.what() << endl; + } + } +} + +//-------------------------------------------------------------------------- +void OSCListener::ProcessMessage( const osc::ReceivedMessage& m, const IpEndpointName& src ) +{ + Message* msg = new Message(m.AddressPattern()); + msg->setSrcIP (src.address); + ReceivedMessageArgumentIterator i = m.ArgumentsBegin(); + while (i != m.ArgumentsEnd()) { + if (i->IsString()) { + msg->add(i->AsStringUnchecked()); + } + else if (i->IsInt32()) { + msg->add(i->AsInt32Unchecked()); + } + else if (i->IsFloat()) { + msg->add(i->AsFloatUnchecked()); + } + i++; + } + fMsgHandler->processMessage (msg); + delete msg; +} + +} // end namespoace