--- a/front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp Thu Apr 12 13:09:46 2012 +0200
+++ b/front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp Thu Apr 12 15:33:25 2012 +0200
@@ -1,8 +1,8 @@
/*
- TUIO C++ Library - part of the reacTIVision project
- http://reactivision.sourceforge.net/
+ TUIO C++ Library - part of the reacTIVision project
+ http://reactivision.sourceforge.net/
- Copyright (c) 2005-2008 Martin Kaltenbrunner <mkalten@iua.upf.edu>
+ Copyright (c) 2005-2008 Martin Kaltenbrunner <mkalten@iua.upf.edu>
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
@@ -19,6 +19,10 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+/*
+ Modified by alexandre.bastien@iri.centrepompidou.fr to manage TUIO strings.
+*/
+
#include "TuioClient.h"
#ifndef WIN32
@@ -27,613 +31,613 @@
static DWORD WINAPI ThreadFunc( LPVOID obj )
#endif
{
- static_cast<TuioClient*>(obj)->socket->Run();
- return 0;
+ static_cast<TuioClient*>(obj)->socket->Run();
+ return 0;
};
using namespace std;
-
+
TuioClient::TuioClient() {
- TuioClient(3333);
+ TuioClient(3333);
}
TuioClient::TuioClient(int port) {
- try {
- socket = new UdpListeningReceiveSocket(IpEndpointName( IpEndpointName::ANY_ADDRESS, port ), this );
- } catch (std::exception &e) {
- std::cout << "could not bind to UDP port " << port << std::endl;
- socket = NULL;
- }
-
- if (socket!=NULL) {
- if (!socket->IsBound()) {
- delete socket;
- socket = NULL;
- } else std::cout << "listening to TUIO messages on UDP port " << port << std::endl;
- }
+ try {
+ socket = new UdpListeningReceiveSocket(IpEndpointName( IpEndpointName::ANY_ADDRESS, port ), this );
+ } catch (std::exception &e) {
+ std::cout << "could not bind to UDP port " << port << std::endl;
+ socket = NULL;
+ }
+
+ if (socket!=NULL) {
+ if (!socket->IsBound()) {
+ delete socket;
+ socket = NULL;
+ } else std::cout << "listening to TUIO messages on UDP port " << port << std::endl;
+ }
- locked = false;
- running = false;
- currentFrame = lastFrame = maxFingerID = maxStringID = -1;
+ locked = false;
+ running = false;
+ currentFrame = lastFrame = maxFingerID = maxStringID = -1;
}
TuioClient::~TuioClient() {
- delete socket;
+ delete socket;
}
void TuioClient::ProcessBundle( const ReceivedBundle& b, const IpEndpointName& remoteEndpoint) {
- for( ReceivedBundle::const_iterator i = b.ElementsBegin(); i != b.ElementsEnd(); ++i ){
- if( i->IsBundle() )
- ProcessBundle( ReceivedBundle(*i), remoteEndpoint);
- else
- ProcessMessage( ReceivedMessage(*i), remoteEndpoint);
- }
+ for( ReceivedBundle::const_iterator i = b.ElementsBegin(); i != b.ElementsEnd(); ++i ){
+ if( i->IsBundle() )
+ ProcessBundle( ReceivedBundle(*i), remoteEndpoint);
+ else
+ ProcessMessage( ReceivedMessage(*i), remoteEndpoint);
+ }
}
void TuioClient::ProcessMessage( const ReceivedMessage& msg, const IpEndpointName& remoteEndpoint)
{
- try
- {
- ReceivedMessageArgumentStream args = msg.ArgumentStream();
- ReceivedMessage::const_iterator arg = msg.ArgumentsBegin();
+ try
+ {
+ ReceivedMessageArgumentStream args = msg.ArgumentStream();
+ ReceivedMessage::const_iterator arg = msg.ArgumentsBegin();
- if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 )
- {
- const char* cmd;
- args >> cmd;
-
- if( strcmp( cmd, "set" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 )
+ {
+ const char* cmd;
+ args >> cmd;
+
+ if( strcmp( cmd, "set" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id, f_id;
- float xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel;
+ int32 s_id, f_id;
+ float xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel;
- args >> s_id >> f_id >> xpos >> ypos >> angle >> xspeed >> yspeed >> rspeed >> maccel >> raccel >> EndMessage;
+ args >> s_id >> f_id >> xpos >> ypos >> angle >> xspeed >> yspeed >> rspeed >> maccel >> raccel >> EndMessage;
- std::list<TuioObject*>::iterator tobj;
- for (tobj=objectList.begin(); tobj!= objectList.end(); tobj++)
- if((*tobj)->getSessionID()==(long)s_id) break;
+ std::list<TuioObject*>::iterator tobj;
+ for (tobj=objectList.begin(); tobj!= objectList.end(); tobj++)
+ if((*tobj)->getSessionID()==(long)s_id) break;
- if (tobj == objectList.end())
- {
+ if (tobj == objectList.end())
+ {
- TuioObject *addObject = new TuioObject((long)s_id,(int)f_id,xpos,ypos,angle);
- objectList.push_back(addObject);
-
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->addTuioObject(addObject);
+ TuioObject *addObject = new TuioObject((long)s_id,(int)f_id,xpos,ypos,angle);
+ objectList.push_back(addObject);
+
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->addTuioObject(addObject);
- }
- else if ( ((*tobj)->getX()!=xpos) || ((*tobj)->getY()!=ypos) || ((*tobj)->getAngle()!=angle) || ((*tobj)->getXSpeed()!=xspeed) || ((*tobj)->getYSpeed()!=yspeed) || ((*tobj)->getRotationSpeed()!=rspeed) || ((*tobj)->getMotionAccel()!=maccel) || ((*tobj)->getRotationAccel()!=raccel) )
- {
- (*tobj)->update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel);
+ }
+ else if ( ((*tobj)->getX()!=xpos) || ((*tobj)->getY()!=ypos) || ((*tobj)->getAngle()!=angle) || ((*tobj)->getXSpeed()!=xspeed) || ((*tobj)->getYSpeed()!=yspeed) || ((*tobj)->getRotationSpeed()!=rspeed) || ((*tobj)->getMotionAccel()!=maccel) || ((*tobj)->getRotationAccel()!=raccel) )
+ {
+ (*tobj)->update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->updateTuioObject((*tobj));
- }
- }
- else if( strcmp( cmd, "alive" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->updateTuioObject((*tobj));
+ }
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- while(!args.Eos())
- {
- args >> s_id;
- objectBuffer.push_back((long)s_id);
- std::list<long>::iterator iter;
- iter = find(aliveObjectList.begin(), aliveObjectList.end(), (long)s_id);
- if (iter != aliveObjectList.end()) aliveObjectList.erase(iter);
- }
- args >> EndMessage;
-
- std::list<long>::iterator alive_iter;
- for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); alive_iter++)
- {
- std::list<TuioObject*>::iterator tobj;
- for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++)
- {
- TuioObject *deleteObject = (*tobj);
- if(deleteObject->getSessionID()==*alive_iter)
- {
- deleteObject->remove();
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->removeTuioObject(deleteObject);
- objectList.erase(tobj);
- delete deleteObject;
- break;
- }
- }
- }
- aliveObjectList = objectBuffer;
- objectBuffer.clear();
- }
- else if( strcmp( cmd, "fseq" ) == 0 )
- {
- if(currentFrame>0) lastFrame = currentFrame;
- args >> currentFrame >> EndMessage;
+ int32 s_id;
+ while(!args.Eos())
+ {
+ args >> s_id;
+ objectBuffer.push_back((long)s_id);
+ std::list<long>::iterator iter;
+ iter = find(aliveObjectList.begin(), aliveObjectList.end(), (long)s_id);
+ if (iter != aliveObjectList.end()) aliveObjectList.erase(iter);
+ }
+ args >> EndMessage;
+
+ std::list<long>::iterator alive_iter;
+ for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); alive_iter++)
+ {
+ std::list<TuioObject*>::iterator tobj;
+ for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++)
+ {
+ TuioObject *deleteObject = (*tobj);
+ if(deleteObject->getSessionID()==*alive_iter)
+ {
+ deleteObject->remove();
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->removeTuioObject(deleteObject);
+ objectList.erase(tobj);
+ delete deleteObject;
+ break;
+ }
+ }
+ }
+ aliveObjectList = objectBuffer;
+ objectBuffer.clear();
+ }
+ else if( strcmp( cmd, "fseq" ) == 0 )
+ {
+ if(currentFrame>0) lastFrame = currentFrame;
+ args >> currentFrame >> EndMessage;
- if ((currentFrame>=lastFrame) || (currentFrame<0))
- {
- long currentTime = lastTime;
- if (currentFrame>lastFrame)
- {
- currentTime = getCurrentTime()-startTime;
- lastTime = currentTime;
- }
-
- for (std::list<TuioObject*>::iterator refreshObject=objectList.begin(); refreshObject!=objectList.end(); refreshObject++)
- if ((*refreshObject)->getUpdateTime()==TUIO_UNDEFINED) (*refreshObject)->setUpdateTime(currentTime);
-
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener!=listenerList.end(); listener++)
- (*listener)->refresh(currentTime);
- }
- }
- }
- else if( strcmp( msg.AddressPattern(), "/tuio/3Dcur" ) == 0 )
- {
- const char* cmd;
- args >> cmd;
-
- if( strcmp( cmd, "set" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ if ((currentFrame>=lastFrame) || (currentFrame<0))
+ {
+ long currentTime = lastTime;
+ if (currentFrame>lastFrame)
+ {
+ currentTime = getCurrentTime()-startTime;
+ lastTime = currentTime;
+ }
+
+ for (std::list<TuioObject*>::iterator refreshObject=objectList.begin(); refreshObject!=objectList.end(); refreshObject++)
+ if ((*refreshObject)->getUpdateTime()==TUIO_UNDEFINED) (*refreshObject)->setUpdateTime(currentTime);
+
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener!=listenerList.end(); listener++)
+ (*listener)->refresh(currentTime);
+ }
+ }
+ }
+ else if( strcmp( msg.AddressPattern(), "/tuio/3Dcur" ) == 0 )
+ {
+ const char* cmd;
+ args >> cmd;
+
+ if( strcmp( cmd, "set" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- float xpos, ypos, zpos, xspeed, yspeed, maccel;
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- args >> s_id >> xpos >> ypos >> zpos >> xspeed >> yspeed >> maccel >> EndMessage;
- std::list<TuioCursor*>::iterator tcur;
- for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
- if((*tcur)->getSessionID()==(long)s_id) break;
+ int32 s_id;
+ float xpos, ypos, zpos, xspeed, yspeed, maccel;
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ args >> s_id >> xpos >> ypos >> zpos >> xspeed >> yspeed >> maccel >> EndMessage;
+ std::list<TuioCursor*>::iterator tcur;
+ for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
+ if((*tcur)->getSessionID()==(long)s_id) break;
- if (tcur == cursorList.end())
- {
- int f_id = (int)cursorList.size();
- if ((int)(cursorList.size())<=maxFingerID)
- {
- std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin();
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- for(std::list<TuioCursor*>::iterator testCursor = freeCursorList.begin();testCursor!= freeCursorList.end(); testCursor++)
- {
- if((*testCursor)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
- }
- f_id = (*closestCursor)->getFingerID();
- freeCursorList.erase(closestCursor);
- delete *closestCursor;
- }
- else maxFingerID = f_id;
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- TuioCursor *addCursor = new TuioCursor((long)s_id,f_id,xpos,ypos,zpos);
- cursorList.push_back(addCursor);
-
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->addTuioCursor(addCursor);
-
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- }
- else if ( ((*tcur)->getX()!=xpos) || ((*tcur)->getY()!=ypos) || ((*tcur)->getZ()!=zpos) || ((*tcur)->getXSpeed()!=xspeed) || ((*tcur)->getYSpeed()!=yspeed) || ((*tcur)->getMotionAccel()!=maccel) )
- {
- (*tcur)->update(xpos,ypos,zpos,xspeed,yspeed,maccel);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->updateTuioCursor((*tcur));
- }
- }
- else if( strcmp( cmd, "alive" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ if (tcur == cursorList.end())
+ {
+ int f_id = (int)cursorList.size();
+ if ((int)(cursorList.size())<=maxFingerID)
+ {
+ std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin();
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ for(std::list<TuioCursor*>::iterator testCursor = freeCursorList.begin();testCursor!= freeCursorList.end(); testCursor++)
+ {
+ if((*testCursor)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
+ }
+ f_id = (*closestCursor)->getFingerID();
+ freeCursorList.erase(closestCursor);
+ delete *closestCursor;
+ }
+ else maxFingerID = f_id;
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ TuioCursor *addCursor = new TuioCursor((long)s_id,f_id,xpos,ypos,zpos);
+ cursorList.push_back(addCursor);
+
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->addTuioCursor(addCursor);
+
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ }
+ else if ( ((*tcur)->getX()!=xpos) || ((*tcur)->getY()!=ypos) || ((*tcur)->getZ()!=zpos) || ((*tcur)->getXSpeed()!=xspeed) || ((*tcur)->getYSpeed()!=yspeed) || ((*tcur)->getMotionAccel()!=maccel) )
+ {
+ (*tcur)->update(xpos,ypos,zpos,xspeed,yspeed,maccel);
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->updateTuioCursor((*tcur));
+ }
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- while(!args.Eos())
- {
- args >> s_id;
- cursorBuffer.push_back((long)s_id);
- std::list<long>::iterator iter;
- iter = find(aliveCursorList.begin(), aliveCursorList.end(), (long)s_id);
- if (iter != aliveCursorList.end()) aliveCursorList.erase(iter);
- }
- args >> EndMessage;
- std::list<long>::iterator alive_iter;
- for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++)
- {
- std::list<TuioCursor*>::iterator tcur;
- for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
- {
- TuioCursor *deleteCursor = (*tcur);
- if(deleteCursor->getSessionID()==*alive_iter)
- {
- cursorList.erase(tcur);
- deleteCursor->remove();
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->removeTuioCursor(deleteCursor);
-
- if (deleteCursor->getFingerID()==maxFingerID)
- {
- maxFingerID = -1;
- delete deleteCursor;
-
- if (cursorList.size()>0)
- {
- std::list<TuioCursor*>::iterator clist;
- for (clist=cursorList.begin(); clist != cursorList.end(); clist++)
- {
- int f_id = (*clist)->getFingerID();
- if (f_id>maxFingerID) maxFingerID=f_id;
- }
- std::list<TuioCursor*>::iterator flist;
- for (flist=freeCursorList.begin(); flist != freeCursorList.end(); flist++)
- {
- TuioCursor *freeCursor = (*flist);
- if (freeCursor->getFingerID()>maxFingerID) delete freeCursor;
- else freeCursorBuffer.push_back(freeCursor);
- }
- freeCursorList = freeCursorBuffer;
- freeCursorBuffer.clear();
- }
- }
- else if (deleteCursor->getFingerID()<maxFingerID) freeCursorList.push_back(deleteCursor);
- break;
- }
- }
- }
- aliveCursorList = cursorBuffer;
- cursorBuffer.clear();
- }
- else if( strcmp( cmd, "fseq" ) == 0 )
- {
- if(currentFrame>0) lastFrame = currentFrame;
- args >> currentFrame >> EndMessage;
+ int32 s_id;
+ while(!args.Eos())
+ {
+ args >> s_id;
+ cursorBuffer.push_back((long)s_id);
+ std::list<long>::iterator iter;
+ iter = find(aliveCursorList.begin(), aliveCursorList.end(), (long)s_id);
+ if (iter != aliveCursorList.end()) aliveCursorList.erase(iter);
+ }
+ args >> EndMessage;
+ std::list<long>::iterator alive_iter;
+ for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++)
+ {
+ std::list<TuioCursor*>::iterator tcur;
+ for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
+ {
+ TuioCursor *deleteCursor = (*tcur);
+ if(deleteCursor->getSessionID()==*alive_iter)
+ {
+ cursorList.erase(tcur);
+ deleteCursor->remove();
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->removeTuioCursor(deleteCursor);
+
+ if (deleteCursor->getFingerID()==maxFingerID)
+ {
+ maxFingerID = -1;
+ delete deleteCursor;
+
+ if (cursorList.size()>0)
+ {
+ std::list<TuioCursor*>::iterator clist;
+ for (clist=cursorList.begin(); clist != cursorList.end(); clist++)
+ {
+ int f_id = (*clist)->getFingerID();
+ if (f_id>maxFingerID) maxFingerID=f_id;
+ }
+ std::list<TuioCursor*>::iterator flist;
+ for (flist=freeCursorList.begin(); flist != freeCursorList.end(); flist++)
+ {
+ TuioCursor *freeCursor = (*flist);
+ if (freeCursor->getFingerID()>maxFingerID) delete freeCursor;
+ else freeCursorBuffer.push_back(freeCursor);
+ }
+ freeCursorList = freeCursorBuffer;
+ freeCursorBuffer.clear();
+ }
+ }
+ else if (deleteCursor->getFingerID()<maxFingerID) freeCursorList.push_back(deleteCursor);
+ break;
+ }
+ }
+ }
+ aliveCursorList = cursorBuffer;
+ cursorBuffer.clear();
+ }
+ else if( strcmp( cmd, "fseq" ) == 0 )
+ {
+ if(currentFrame>0) lastFrame = currentFrame;
+ args >> currentFrame >> EndMessage;
- if ((currentFrame>=lastFrame) || (currentFrame<0))
- {
- long currentTime = lastTime;
- if (currentFrame>lastFrame)
- {
- currentTime = getCurrentTime()-startTime;
- lastTime = currentTime;
- }
- for (std::list<TuioCursor*>::iterator refreshCursor=cursorList.begin(); refreshCursor!=cursorList.end(); refreshCursor++)
- if ((*refreshCursor)->getUpdateTime()==TUIO_UNDEFINED) (*refreshCursor)->setUpdateTime(currentTime);
+ if ((currentFrame>=lastFrame) || (currentFrame<0))
+ {
+ long currentTime = lastTime;
+ if (currentFrame>lastFrame)
+ {
+ currentTime = getCurrentTime()-startTime;
+ lastTime = currentTime;
+ }
+ for (std::list<TuioCursor*>::iterator refreshCursor=cursorList.begin(); refreshCursor!=cursorList.end(); refreshCursor++)
+ if ((*refreshCursor)->getUpdateTime()==TUIO_UNDEFINED) (*refreshCursor)->setUpdateTime(currentTime);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->refresh(currentTime);
- }
- }
- }
- else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
- {
- const char* cmd;
- args >> cmd;
-
- if( strcmp( cmd, "set" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->refresh(currentTime);
+ }
+ }
+ }
+ else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
+ {
+ const char* cmd;
+ args >> cmd;
+
+ if( strcmp( cmd, "set" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- const char* code;
- args >> s_id >> code >> EndMessage;
- std::list<TuioString*>::iterator tstr;
- for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
- if((*tstr)->getSessionID()==(long)s_id) break;
+ int32 s_id;
+ const char* code;
+ args >> s_id >> code >> EndMessage;
+ std::list<TuioString*>::iterator tstr;
+ for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
+ if((*tstr)->getSessionID()==(long)s_id) break;
- if (tstr == stringList.end())
- {
- int s_id = (int)stringList.size();//
- if ((int)(stringList.size())<=maxStringID)//
- {//
- std::list<TuioString*>::iterator closestString = freeStringList.begin();//
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ if (tstr == stringList.end())
+ {
+ int s_id = (int)stringList.size();//
+ if ((int)(stringList.size())<=maxStringID)//
+ {//
+ std::list<TuioString*>::iterator closestString = freeStringList.begin();//
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
- //for(std::list<TuioString*>::iterator testString = freeStringList.begin();testString!= freeStringList.end(); testString++)
- //{
- //if((*testString)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
- //}
- s_id = (*closestString)->getStringID();//
- freeStringList.erase(closestString);//
- delete *closestString;//
- }//
- else maxStringID = s_id;//
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- TuioString *addString = new TuioString((long)s_id,-1,code);
- stringList.push_back(addString);
-
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->addTuioString(addString);
-
- //Modifié par alexandre.bastien@iri.centrepompidou.fr
- }
- else if ( ((*tstr)->getCode()!=code) )
- {
- (*tstr)->update(code);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->updateTuioString((*tstr));
- }
- }
- else if( strcmp( cmd, "alive" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ //for(std::list<TuioString*>::iterator testString = freeStringList.begin();testString!= freeStringList.end(); testString++)
+ //{
+ //if((*testString)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
+ //}
+ s_id = (*closestString)->getStringID();//
+ freeStringList.erase(closestString);//
+ delete *closestString;//
+ }//
+ else maxStringID = s_id;//
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ TuioString *addString = new TuioString((long)s_id,-1,code);
+ stringList.push_back(addString);
+
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->addTuioString(addString);
+
+ //Modifié par alexandre.bastien@iri.centrepompidou.fr
+ }
+ else if ( ((*tstr)->getCode()!=code) )
+ {
+ (*tstr)->update(code);
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->updateTuioString((*tstr));
+ }
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- while(!args.Eos())
- {
- args >> s_id;
- stringBuffer.push_back((long)s_id);
- std::list<long>::iterator iter;
- iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id);
- if (iter != aliveStringList.end()) aliveStringList.erase(iter);
- }
- args >> EndMessage;
- std::list<long>::iterator alive_iter;
- for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
- {
- std::list<TuioString*>::iterator tstr;
- for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
- {
- TuioString *deleteString = (*tstr);
- if(deleteString->getSessionID()==*alive_iter)
- {
- stringList.erase(tstr);
- deleteString->remove();
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->removeTuioString(deleteString);
-
- if (deleteString->getStringID()==maxStringID)//
- {//
- maxStringID = -1;//
- delete deleteString;
-
- if (stringList.size()>0)
- {
- std::list<TuioString*>::iterator clist;//
- for (clist=stringList.begin(); clist != stringList.end(); clist++)//
- {//
- int s_id = (*clist)->getStringID();//
- if (s_id>maxStringID) maxStringID=s_id;//
- }//
- std::list<TuioString*>::iterator flist;
- for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
- {
- TuioString *freeString = (*flist);
- if (freeString->getStringID()>maxStringID) delete freeString;//
- else freeStringBuffer.push_back(freeString);//
- freeStringBuffer.push_back(freeString);
- }
- freeStringList = freeStringBuffer;
- freeStringBuffer.clear();
- }
- }//
- else if (deleteString->getStringID()<maxStringID) freeStringList.push_back(deleteString);//
- break;
- }
- }
- }
- aliveStringList = stringBuffer;
- stringBuffer.clear();
- }
- else if( strcmp( cmd, "fseq" ) == 0 )
- {
- if(currentFrame>0) lastFrame = currentFrame;
- args >> currentFrame >> EndMessage;
+ int32 s_id;
+ while(!args.Eos())
+ {
+ args >> s_id;
+ stringBuffer.push_back((long)s_id);
+ std::list<long>::iterator iter;
+ iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id);
+ if (iter != aliveStringList.end()) aliveStringList.erase(iter);
+ }
+ args >> EndMessage;
+ std::list<long>::iterator alive_iter;
+ for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
+ {
+ std::list<TuioString*>::iterator tstr;
+ for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
+ {
+ TuioString *deleteString = (*tstr);
+ if(deleteString->getSessionID()==*alive_iter)
+ {
+ stringList.erase(tstr);
+ deleteString->remove();
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->removeTuioString(deleteString);
+
+ if (deleteString->getStringID()==maxStringID)//
+ {//
+ maxStringID = -1;//
+ delete deleteString;
+
+ if (stringList.size()>0)
+ {
+ std::list<TuioString*>::iterator clist;//
+ for (clist=stringList.begin(); clist != stringList.end(); clist++)//
+ {//
+ int s_id = (*clist)->getStringID();//
+ if (s_id>maxStringID) maxStringID=s_id;//
+ }//
+ std::list<TuioString*>::iterator flist;
+ for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
+ {
+ TuioString *freeString = (*flist);
+ if (freeString->getStringID()>maxStringID) delete freeString;//
+ else freeStringBuffer.push_back(freeString);//
+ freeStringBuffer.push_back(freeString);
+ }
+ freeStringList = freeStringBuffer;
+ freeStringBuffer.clear();
+ }
+ }//
+ else if (deleteString->getStringID()<maxStringID) freeStringList.push_back(deleteString);//
+ break;
+ }
+ }
+ }
+ aliveStringList = stringBuffer;
+ stringBuffer.clear();
+ }
+ else if( strcmp( cmd, "fseq" ) == 0 )
+ {
+ if(currentFrame>0) lastFrame = currentFrame;
+ args >> currentFrame >> EndMessage;
- if ((currentFrame>=lastFrame) || (currentFrame<0))
- {
- long currentTime = lastTime;
- if (currentFrame>lastFrame)
- {
- currentTime = getCurrentTime()-startTime;
- lastTime = currentTime;
- }
- for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
- if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
+ if ((currentFrame>=lastFrame) || (currentFrame<0))
+ {
+ long currentTime = lastTime;
+ if (currentFrame>lastFrame)
+ {
+ currentTime = getCurrentTime()-startTime;
+ lastTime = currentTime;
+ }
+ for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
+ if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->refresh(currentTime);
- }
- }
- }
- //Ajouté par alexandre.bastien@iri.centrepompidou.fr
- /*else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
- {
- const char* cmd;
- args >> cmd;
-
- if( strcmp( cmd, "set" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
- int32 s_id;
- const char* code;
- args >> s_id >> code >> EndMessage;
- std::list<TuioString*>::iterator tstr;
- for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
- if((*tstr)->getSessionID()==(long)s_id) break;
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->refresh(currentTime);
+ }
+ }
+ }
+ //Ajouté par alexandre.bastien@iri.centrepompidou.fr
+ /*else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
+ {
+ const char* cmd;
+ args >> cmd;
+
+ if( strcmp( cmd, "set" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+ int32 s_id;
+ const char* code;
+ args >> s_id >> code >> EndMessage;
+ std::list<TuioString*>::iterator tstr;
+ for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
+ if((*tstr)->getSessionID()==(long)s_id) break;
- if (tstr == stringList.end())
- {
- TuioString *addString = new TuioString((long)s_id,code);
- stringList.push_back(addString);
-
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->addTuioString(addString);
-
-
- }
- else if ( ((*tstr)->getCode()!=code) )
- {
- (*tstr)->update(code);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->updateTuioString((*tstr));
- }
- }
- else if( strcmp( cmd, "alive" ) == 0 )
- {
- if ((currentFrame<lastFrame) && (currentFrame>0)) return;
-
- int32 s_id;
- while(!args.Eos())
- {
- args >> s_id;
- stringBuffer.push_back((long)s_id);
- std::list<long>::iterator iter;
- iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id);
- if (iter != aliveStringList.end()) aliveStringList.erase(iter);
- }
- args >> EndMessage;
-
- std::list<long>::iterator alive_iter;
- for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
- {
- std::list<TuioString*>::iterator tstr;
- for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
- {
- TuioString *deleteString = (*tstr);
- if(deleteString->getSessionID()==*alive_iter)
- {
- stringList.erase(tstr);
- deleteString->remove();
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->removeTuioString(deleteString);
-
- if (stringList.size()>0)
- {
- std::list<TuioString*>::iterator flist;
- for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
- {
- TuioString *freeString = (*flist);
- }
- freeStringList = freeStringBuffer;
- freeStringBuffer.clear();
- }
- }
- break;
- }
- }
- aliveStringList = stringBuffer;
- stringBuffer.clear();
- }
- else if( strcmp( cmd, "fseq" ) == 0 )
- {
- if(currentFrame>0) lastFrame = currentFrame;
- args >> currentFrame >> EndMessage;
+ if (tstr == stringList.end())
+ {
+ TuioString *addString = new TuioString((long)s_id,code);
+ stringList.push_back(addString);
+
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->addTuioString(addString);
+
+
+ }
+ else if ( ((*tstr)->getCode()!=code) )
+ {
+ (*tstr)->update(code);
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->updateTuioString((*tstr));
+ }
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
+ if ((currentFrame<lastFrame) && (currentFrame>0)) return;
+
+ int32 s_id;
+ while(!args.Eos())
+ {
+ args >> s_id;
+ stringBuffer.push_back((long)s_id);
+ std::list<long>::iterator iter;
+ iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id);
+ if (iter != aliveStringList.end()) aliveStringList.erase(iter);
+ }
+ args >> EndMessage;
+
+ std::list<long>::iterator alive_iter;
+ for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
+ {
+ std::list<TuioString*>::iterator tstr;
+ for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
+ {
+ TuioString *deleteString = (*tstr);
+ if(deleteString->getSessionID()==*alive_iter)
+ {
+ stringList.erase(tstr);
+ deleteString->remove();
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->removeTuioString(deleteString);
+
+ if (stringList.size()>0)
+ {
+ std::list<TuioString*>::iterator flist;
+ for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
+ {
+ TuioString *freeString = (*flist);
+ }
+ freeStringList = freeStringBuffer;
+ freeStringBuffer.clear();
+ }
+ }
+ break;
+ }
+ }
+ aliveStringList = stringBuffer;
+ stringBuffer.clear();
+ }
+ else if( strcmp( cmd, "fseq" ) == 0 )
+ {
+ if(currentFrame>0) lastFrame = currentFrame;
+ args >> currentFrame >> EndMessage;
- if ((currentFrame>=lastFrame) || (currentFrame<0))
- {
- long currentTime = lastTime;
- if (currentFrame>lastFrame)
- {
- currentTime = getCurrentTime()-startTime;
- lastTime = currentTime;
- }
-
- for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
- if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
+ if ((currentFrame>=lastFrame) || (currentFrame<0))
+ {
+ long currentTime = lastTime;
+ if (currentFrame>lastFrame)
+ {
+ currentTime = getCurrentTime()-startTime;
+ lastTime = currentTime;
+ }
+
+ for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
+ if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
- for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
- (*listener)->refresh(currentTime);
- }
- }
- }*/
- }
- catch( Exception& e )
- {
- std::cout << "error while parsing message: "<< msg.AddressPattern() << ": " << e.what() << "\n";
- }
+ for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
+ (*listener)->refresh(currentTime);
+ }
+ }
+ }*/
+ }
+ catch( Exception& e )
+ {
+ std::cout << "error while parsing message: "<< msg.AddressPattern() << ": " << e.what() << "\n";
+ }
}
void TuioClient::ProcessPacket( const char *data, int size, const IpEndpointName& remoteEndpoint ) {
- if (listenerList.size()==0) return;
- ReceivedPacket p( data, size );
- if(p.IsBundle()) ProcessBundle( ReceivedBundle(p), remoteEndpoint);
+ if (listenerList.size()==0) return;
+ ReceivedPacket p( data, size );
+ if(p.IsBundle()) ProcessBundle( ReceivedBundle(p), remoteEndpoint);
else ProcessMessage( ReceivedMessage(p), remoteEndpoint);
}
void TuioClient::start(bool lk) {
- if (socket==NULL) return;
+ if (socket==NULL) return;
- locked = lk;
- if (!locked) {
- #ifndef WIN32
- pthread_create(&thread , NULL, ThreadFunc, this);
- #else
- DWORD threadId;
- thread = CreateThread( 0, 0, ThreadFunc, this, 0, &threadId );
- #endif
- } else socket->Run();
-
- startTime = getCurrentTime();
- lastTime = 0;
+ locked = lk;
+ if (!locked) {
+ #ifndef WIN32
+ pthread_create(&thread , NULL, ThreadFunc, this);
+ #else
+ DWORD threadId;
+ thread = CreateThread( 0, 0, ThreadFunc, this, 0, &threadId );
+ #endif
+ } else socket->Run();
+
+ startTime = getCurrentTime();
+ lastTime = 0;
- running = true;
+ running = true;
}
void TuioClient::stop() {
- if (socket==NULL) return;
- socket->Break();
+ if (socket==NULL) return;
+ socket->Break();
- if (!locked) {
- #ifdef WIN32
- if( thread ) CloseHandle( thread );
- #endif
- thread = 0;
- locked = false;
- }
- running = false;
+ if (!locked) {
+ #ifdef WIN32
+ if( thread ) CloseHandle( thread );
+ #endif
+ thread = 0;
+ locked = false;
+ }
+ running = false;
}
void TuioClient::addTuioListener(TuioListener *listener) {
- listenerList.push_back(listener);
+ listenerList.push_back(listener);
}
void TuioClient::removeTuioListener(TuioListener *listener) {
- std::list<TuioListener*>::iterator result = find(listenerList.begin(),listenerList.end(),listener);
- if (result!=listenerList.end()) listenerList.remove(listener);
+ std::list<TuioListener*>::iterator result = find(listenerList.begin(),listenerList.end(),listener);
+ if (result!=listenerList.end()) listenerList.remove(listener);
}
TuioObject* TuioClient::getTuioObject(long s_id) {
- for (std::list<TuioObject*>::iterator iter=objectList.begin(); iter != objectList.end(); iter++)
- if((*iter)->getSessionID()==s_id) return (*iter);
-
- return NULL;
+ for (std::list<TuioObject*>::iterator iter=objectList.begin(); iter != objectList.end(); iter++)
+ if((*iter)->getSessionID()==s_id) return (*iter);
+
+ return NULL;
}
TuioCursor* TuioClient::getTuioCursor(long s_id) {
- for (std::list<TuioCursor*>::iterator iter=cursorList.begin(); iter != cursorList.end(); iter++)
- if((*iter)->getSessionID()==s_id) return (*iter);
-
- return NULL;
+ for (std::list<TuioCursor*>::iterator iter=cursorList.begin(); iter != cursorList.end(); iter++)
+ if((*iter)->getSessionID()==s_id) return (*iter);
+
+ return NULL;
}
TuioString* TuioClient::getTuioString(long s_id) {
- for (std::list<TuioString*>::iterator iter=stringList.begin(); iter != stringList.end(); iter++)
- if((*iter)->getSessionID()==s_id) return (*iter);
-
- return NULL;
+ for (std::list<TuioString*>::iterator iter=stringList.begin(); iter != stringList.end(); iter++)
+ if((*iter)->getSessionID()==s_id) return (*iter);
+
+ return NULL;
}
std::list<TuioObject*> TuioClient::getTuioObjects() {
- return objectList;
+ return objectList;
}
std::list<TuioCursor*> TuioClient::getTuioCursors() {
- return cursorList;
+ return cursorList;
}
std::list<TuioString*> TuioClient::getTuioStrings() {
- return stringList;
+ return stringList;
}
long TuioClient::getCurrentTime() {
-
- #ifdef WIN32
- long timestamp = GetTickCount();
- #else
- struct timeval tv;
- struct timezone tz;
- gettimeofday(&tv,&tz);
- long timestamp = (tv.tv_sec*1000)+(tv.tv_usec/1000);
- #endif
-
- return timestamp;
+
+ #ifdef WIN32
+ long timestamp = GetTickCount();
+ #else
+ struct timeval tv;
+ struct timezone tz;
+ gettimeofday(&tv,&tz);
+ long timestamp = (tv.tv_sec*1000)+(tv.tv_usec/1000);
+ #endif
+
+ return timestamp;
}