topical media & game development
lib-of-vs-addons-ofxOsc-src-ofxOscReceiver.h / h
/*
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 <http://www.gnu.org/licenses/>.
*/
ifndef _ofxOscRECEIVER_H
define _ofxOscRECEIVER_H
include <deque>
include <ofMain.h>
ifdef TARGET_WIN32
// threads
include <windows.h>
else
// threads
include <pthread.h>
endif
// osc
include <OscTypes.h>
include <OscPacketListener.h>
include <UdpSocket.h>
// 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
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.