-/*
- 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
-
-*/
-
-#ifndef __OSCStream__
-#define __OSCStream__
-
-#include <string>
-#include <vector>
-
-#include "osc/OscOutboundPacketStream.h"
-#include "ip/UdpSocket.h"
-
-namespace oscfaust
-{
-
-//--------------------------------------------------------------------------
-typedef struct OSCStart {
- const char* fAddress;
- OSCStart() {}
- OSCStart(const char* a) : fAddress(a) {}
-} OSCStart;
-
-typedef struct OSCErr : public OSCStart {
- OSCErr() : OSCStart("error:") {}
-} OSCErr;
-
-typedef struct OSCWarn : public OSCStart {
- OSCWarn() : OSCStart("warning:") {}
-} OSCWarn;
-
-typedef struct OSCEnd {} OSCEnd;
-
-#define kLocalhost 0x7f000001
-
-//--------------------------------------------------------------------------
-/*!
-\brief OSC output streams
-*/
-class OSCStream
-{
- enum { kOutBufferSize = 16384 };
- enum state { kIdle, kInProgress };
-
- state fState;
- int fPort; // the destination UDP port
- unsigned long fAddress; // the destination IP address
- char fBuffer[kOutBufferSize];
-
- osc::OutboundPacketStream fOutStream;
- UdpSocket* fSocket;
-
-// void initSocket();
-
- public:
- static bool start();
- static void stop();
-
- OSCStream();
- OSCStream(UdpSocket* socket)
- : fState(kIdle), fPort(1024), fAddress(kLocalhost), fOutStream(fBuffer, kOutBufferSize), fSocket(socket) {}
- virtual ~OSCStream() {}
-
- osc::OutboundPacketStream& stream() { return fOutStream; }
- int getPort () const { return fPort; }
- unsigned long getAddress () const { return fAddress; }
- UdpSocket* socket() { return fSocket; }
- int state() const { return fState; }
-
- OSCStream& start(const char * address);
- OSCStream& end();
-
- void setPort (int port) { fPort = port; }
- void setAddress (unsigned long address) { fAddress = address; }
- void setAddress (const std::string& address);
-};
-
- OSCStream& operator <<(OSCStream& s, OSCEnd val);
- OSCStream& operator <<(OSCStream& s, const OSCStart& val);
- OSCStream& operator <<(OSCStream& s, const OSCErr& val);
- OSCStream& operator <<(OSCStream& s, const OSCWarn& val);
- OSCStream& operator <<(OSCStream& s, const std::string& val);
-template <typename T> OSCStream& operator <<(OSCStream& s, T val) { s.stream() << val; return s; }
-template <typename T> OSCStream& operator <<(OSCStream& s, const std::vector<T>& val)
- {
- for (unsigned int i =0; i < val.size(); i++) s << val[i];
- return s;
- }
-
-
-extern OSCStream* _oscout; // OSC standard output stream
-extern OSCStream* _oscerr; // OSC standard input stream
-
-#define oscout (*_oscout)
-#define oscerr (*_oscerr)
-
-} // end namespace
-
-#endif