/*
Copyright 2007, 2008 Damian Stewart damian@frey.co.nz
Distributed under the terms of the GNU Lesser General Public License v3
This file is part of the ofxOsc openFrameworks OSC addon.
ofxOsc 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 3 of the License, or
(at your option) any later version.
ofxOsc 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 General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ofxOsc. If not, see .
*/
#ifndef _ofxOscRECEIVER_H
#define _ofxOscRECEIVER_H
#include
#include
#ifdef TARGET_WIN32
// threads
#include
#else
// threads
#include
#endif
// osc
#include
#include
#include
// ofxOsc
#include "ofxOscMessage.h"
class ofxOscReceiver : public osc::OscPacketListener
{
public:
ofxOscReceiver();
~ofxOscReceiver();
/// listen_port is the port to listen for messages on
void setup( int listen_port );
/// returns true if there are any messages waiting for collection
bool hasWaitingMessages();
/// take the next message on the queue of received messages, copy its details into message, and
/// remove it from the queue. return false if there are no more messages to be got, otherwise
/// return true
bool getNextMessage( ofxOscMessage* );
protected:
/// process an incoming osc message and add it to the queue
virtual void ProcessMessage( const osc::ReceivedMessage &m, const IpEndpointName& remoteEndpoint );
private:
// start the listening thread
#ifdef TARGET_WIN32
static DWORD WINAPI startThread( void* listen_socket );
#else
static void* startThread( void* listen_socket );
#endif
// queue of osc messages
std::deque< ofxOscMessage* > messages;
// socket to listen on
UdpListeningReceiveSocket* listen_socket;
// mutex helpers
void grabMutex();
void releaseMutex();
#ifdef TARGET_WIN32
// thread to listen with
HANDLE thread;
// mutex for the thread queue
HANDLE mutex;
#else
// thread to listen with
pthread_t thread;
// mutex for the message queue
pthread_mutex_t mutex;
#endif
};
#endif