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/OSCStream.cpp diff --git a/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCStream.cpp b/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCStream.cpp new file mode 100644 index 0000000..afe09c5 --- /dev/null +++ b/interpretor/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCStream.cpp @@ -0,0 +1,105 @@ +/* + Copyright (c) Grame 2009 + + This library is free software; you can redistribute it and modify it under + the terms of the GNU Library General Public License as published by the + Free Software Foundation version 2 of the License, or 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 Library General Public License + for more details. + + You should have received a copy of the GNU Library 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 "OSCStream.h" + +using namespace std; + +namespace oscfaust +{ + +OSCStream* _oscout = 0; // OSC standard output stream +OSCStream* _oscerr = 0; // OSC standard input stream + +static UdpSocket* _socket = 0; // a shared transmit socket + + +//-------------------------------------------------------------------------- +OSCStream::OSCStream () + : fState(kIdle), fPort(1024), fAddress(kLocalhost), fOutStream(fBuffer, kOutBufferSize), fSocket(_socket) +{ + if (!fSocket) cerr << "warning: incorrect OSCStream, _socket not initialized" << endl; +} + +//-------------------------------------------------------------------------- +bool OSCStream::start () +{ + _socket = new UdpSocket; + _oscout = new OSCStream(_socket); + _oscerr = new OSCStream(_socket); + return (_socket && _oscout && _oscerr); +} + +//-------------------------------------------------------------------------- +void OSCStream::stop () +{ + delete _socket; + delete _oscout; + delete _oscerr; + _oscout = _oscerr = 0; + _socket = 0; +} + +//-------------------------------------------------------------------------- +void OSCStream::setAddress (const string& address) +{ + IpEndpointName dst (address.c_str()); + setAddress (dst.address); +} + +//-------------------------------------------------------------------------- +OSCStream& OSCStream::start(const char * address) +{ + stream().Clear(); + if (!stream().IsReady()) cerr << "OSCStream OutboundPacketStream not ready" << endl; + stream() << osc::BeginMessage( address ) ; + fState = kInProgress; + return *this; +} + +//-------------------------------------------------------------------------- +OSCStream& OSCStream::end() +{ + if (state() == kInProgress) { + stream() << osc::EndMessage; + if (fSocket) + fSocket->SendTo (IpEndpointName (fAddress, fPort), stream().Data(), stream().Size() ); + fState = kIdle; + } + return *this; +} + +//-------------------------------------------------------------------------- +OSCStream& operator <<(OSCStream& s, const string& val) +{ + s.stream() << val.c_str(); + return s; +} + +//-------------------------------------------------------------------------- +OSCStream& operator <<(OSCStream& s, const OSCErr& val) { return s.start(val.fAddress); } +OSCStream& operator <<(OSCStream& s, const OSCWarn& val) { return s.start(val.fAddress); } +OSCStream& operator <<(OSCStream& s, const OSCStart& val) { return s.start(val.fAddress); } +OSCStream& operator <<(OSCStream& s, const OSCEnd val) { return s.end(); } + +} // end namespace +