front_idill/extern/fajran-npTuioClient/src/client.cpp
author bastiena
Fri, 06 Apr 2012 11:48:00 +0200
changeset 24 2bdf5d51d434
parent 21 e4e5f02787a1
child 27 6c08d4d7219e
permissions -rw-r--r--
Front IDILL : TuioPoint class header modified in order to manage 3D points TuioContainer class header modified in order to manage 3D points TuioCursor class header modified in order to manage 3D points TuioClient class header modified in order to manage 3D points TuioClient class modified in order to manage 3D points client class header modified in order to manage 3D points client class modified in order to manage 3D points

//   
// Copyright (C) 2009  Fajran Iman Rusadi
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program 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 General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#include "client.h"

#include <TuioClient.h>
#include <TuioListener.h>
#include <TuioObject.h>
#include <TuioCursor.h>

static inline void call(TuioEvent type, long sid, int fid, float x, float y, float a)
{
	TuioEventData data;
	data.type = type;
	data.sid = sid;
	data.fid = fid;
	data.x = x;
	data.y = y;
	data.a = a;
	tuio_callback(data);
}

/*
* Surcharg� par alexandre.bastien@iri.centrepompidou.fr
*/
static inline void call(TuioEvent type, long sid, int fid, float x, float y, float z, float a)
{
	TuioEventData data;
	data.type = type;
	data.sid = sid;
	data.fid = fid;
	data.x = x;
	data.y = y;
	data.z = z;
	data.a = a;
	tuio_callback(data);
}

class Listener : public TuioListener
{
public:
	Listener() { };
	~Listener() { };

	void addTuioObject(TuioObject *object)
	{
		call(TE_OBJECT_ADD,
			object->getSessionID(), object->getFiducialID(),
			object->getX(), object->getY(), object->getAngle());
	}

	void updateTuioObject(TuioObject *object)
	{
		call(TE_OBJECT_UPDATE,
			object->getSessionID(), object->getFiducialID(),
			object->getX(), object->getY(), object->getAngle());
	}

	void removeTuioObject(TuioObject *object)
	{
		call(TE_OBJECT_REMOVE,
			object->getSessionID(), object->getFiducialID(),
			object->getX(), object->getY(), object->getAngle());
	}
	
	/*
	* Modifi� par alexandre.bastien@iri.centrepompidou.fr
	*/
	void addTuioCursor(TuioCursor *cursor)
	{
		call(TE_CURSOR_ADD,
			cursor->getSessionID(), cursor->getFingerID(),
			cursor->getX(), cursor->getY(), cursor->getZ(), 0);
	}

	/*
	* Modifi� par alexandre.bastien@iri.centrepompidou.fr
	*/
	void updateTuioCursor(TuioCursor *cursor)
	{
		call(TE_CURSOR_UPDATE,
			cursor->getSessionID(), cursor->getFingerID(),
			cursor->getX(), cursor->getY(), cursor->getZ(), 0);
	}

	/*
	* Modifi� par alexandre.bastien@iri.centrepompidou.fr
	*/
	void removeTuioCursor(TuioCursor *cursor)
	{
		call(TE_CURSOR_REMOVE,
			cursor->getSessionID(), cursor->getFingerID(),
			cursor->getX(), cursor->getY(), cursor->getZ(), 0);
	}
	
	void refresh(long timestamp) 
	{
	}
};

static TuioClient* client = 0;
static Listener* listener = 0;

void tuio_start(int port)
{
	if (!client) {
		listener = new Listener();

		client = new TuioClient(port);
		client->addTuioListener(listener);
		client->start();
	}
}

void tuio_stop()
{
	client->stop();
	delete listener;
	delete client;

	client = 0;
	listener = 0;
}