diff -r 6c08d4d7219e -r 9ccef81f02ab front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp --- 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 + Copyright (c) 2005-2008 Martin Kaltenbrunner 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(obj)->socket->Run(); - return 0; + static_cast(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 ((currentFrame0)) return; + if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 ) + { + const char* cmd; + args >> cmd; + + if( strcmp( cmd, "set" ) == 0 ) + { + if ((currentFrame0)) 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::iterator tobj; - for (tobj=objectList.begin(); tobj!= objectList.end(); tobj++) - if((*tobj)->getSessionID()==(long)s_id) break; + std::list::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::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::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->updateTuioObject((*tobj)); - } - } - else if( strcmp( cmd, "alive" ) == 0 ) - { - if ((currentFrame0)) return; + for (std::list::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->updateTuioObject((*tobj)); + } + } + else if( strcmp( cmd, "alive" ) == 0 ) + { + if ((currentFrame0)) return; - int32 s_id; - while(!args.Eos()) - { - args >> s_id; - objectBuffer.push_back((long)s_id); - std::list::iterator iter; - iter = find(aliveObjectList.begin(), aliveObjectList.end(), (long)s_id); - if (iter != aliveObjectList.end()) aliveObjectList.erase(iter); - } - args >> EndMessage; - - std::list::iterator alive_iter; - for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); alive_iter++) - { - std::list::iterator tobj; - for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++) - { - TuioObject *deleteObject = (*tobj); - if(deleteObject->getSessionID()==*alive_iter) - { - deleteObject->remove(); - for (std::list::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::iterator iter; + iter = find(aliveObjectList.begin(), aliveObjectList.end(), (long)s_id); + if (iter != aliveObjectList.end()) aliveObjectList.erase(iter); + } + args >> EndMessage; + + std::list::iterator alive_iter; + for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); alive_iter++) + { + std::list::iterator tobj; + for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++) + { + TuioObject *deleteObject = (*tobj); + if(deleteObject->getSessionID()==*alive_iter) + { + deleteObject->remove(); + for (std::list::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::iterator refreshObject=objectList.begin(); refreshObject!=objectList.end(); refreshObject++) - if ((*refreshObject)->getUpdateTime()==TUIO_UNDEFINED) (*refreshObject)->setUpdateTime(currentTime); - - for (std::list::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 ((currentFrame0)) return; + if ((currentFrame>=lastFrame) || (currentFrame<0)) + { + long currentTime = lastTime; + if (currentFrame>lastFrame) + { + currentTime = getCurrentTime()-startTime; + lastTime = currentTime; + } + + for (std::list::iterator refreshObject=objectList.begin(); refreshObject!=objectList.end(); refreshObject++) + if ((*refreshObject)->getUpdateTime()==TUIO_UNDEFINED) (*refreshObject)->setUpdateTime(currentTime); + + for (std::list::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 ((currentFrame0)) 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::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::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::iterator closestCursor = freeCursorList.begin(); - //Modifié par alexandre.bastien@iri.centrepompidou.fr - for(std::list::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::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->updateTuioCursor((*tcur)); - } - } - else if( strcmp( cmd, "alive" ) == 0 ) - { - if ((currentFrame0)) return; + if (tcur == cursorList.end()) + { + int f_id = (int)cursorList.size(); + if ((int)(cursorList.size())<=maxFingerID) + { + std::list::iterator closestCursor = freeCursorList.begin(); + //Modifié par alexandre.bastien@iri.centrepompidou.fr + for(std::list::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::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->updateTuioCursor((*tcur)); + } + } + else if( strcmp( cmd, "alive" ) == 0 ) + { + if ((currentFrame0)) return; - int32 s_id; - while(!args.Eos()) - { - args >> s_id; - cursorBuffer.push_back((long)s_id); - std::list::iterator iter; - iter = find(aliveCursorList.begin(), aliveCursorList.end(), (long)s_id); - if (iter != aliveCursorList.end()) aliveCursorList.erase(iter); - } - args >> EndMessage; - std::list::iterator alive_iter; - for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++) - { - std::list::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::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::iterator clist; - for (clist=cursorList.begin(); clist != cursorList.end(); clist++) - { - int f_id = (*clist)->getFingerID(); - if (f_id>maxFingerID) maxFingerID=f_id; - } - std::list::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()0) lastFrame = currentFrame; - args >> currentFrame >> EndMessage; + int32 s_id; + while(!args.Eos()) + { + args >> s_id; + cursorBuffer.push_back((long)s_id); + std::list::iterator iter; + iter = find(aliveCursorList.begin(), aliveCursorList.end(), (long)s_id); + if (iter != aliveCursorList.end()) aliveCursorList.erase(iter); + } + args >> EndMessage; + std::list::iterator alive_iter; + for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++) + { + std::list::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::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::iterator clist; + for (clist=cursorList.begin(); clist != cursorList.end(); clist++) + { + int f_id = (*clist)->getFingerID(); + if (f_id>maxFingerID) maxFingerID=f_id; + } + std::list::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()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::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::iterator refreshCursor=cursorList.begin(); refreshCursor!=cursorList.end(); refreshCursor++) + if ((*refreshCursor)->getUpdateTime()==TUIO_UNDEFINED) (*refreshCursor)->setUpdateTime(currentTime); - for (std::list::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 ((currentFrame0)) return; + for (std::list::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 ((currentFrame0)) return; - int32 s_id; - const char* code; - args >> s_id >> code >> EndMessage; - std::list::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::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::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::iterator closestString = freeStringList.begin();// + //Modifié par alexandre.bastien@iri.centrepompidou.fr - //for(std::list::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::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->updateTuioString((*tstr)); - } - } - else if( strcmp( cmd, "alive" ) == 0 ) - { - if ((currentFrame0)) return; + //for(std::list::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::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->updateTuioString((*tstr)); + } + } + else if( strcmp( cmd, "alive" ) == 0 ) + { + if ((currentFrame0)) return; - int32 s_id; - while(!args.Eos()) - { - args >> s_id; - stringBuffer.push_back((long)s_id); - std::list::iterator iter; - iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); - if (iter != aliveStringList.end()) aliveStringList.erase(iter); - } - args >> EndMessage; - std::list::iterator alive_iter; - for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++) - { - std::list::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::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::iterator clist;// - for (clist=stringList.begin(); clist != stringList.end(); clist++)// - {// - int s_id = (*clist)->getStringID();// - if (s_id>maxStringID) maxStringID=s_id;// - }// - std::list::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()0) lastFrame = currentFrame; - args >> currentFrame >> EndMessage; + int32 s_id; + while(!args.Eos()) + { + args >> s_id; + stringBuffer.push_back((long)s_id); + std::list::iterator iter; + iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); + if (iter != aliveStringList.end()) aliveStringList.erase(iter); + } + args >> EndMessage; + std::list::iterator alive_iter; + for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++) + { + std::list::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::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::iterator clist;// + for (clist=stringList.begin(); clist != stringList.end(); clist++)// + {// + int s_id = (*clist)->getStringID();// + if (s_id>maxStringID) maxStringID=s_id;// + }// + std::list::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()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::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::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++) + if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime); - for (std::list::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 ((currentFrame0)) return; - int32 s_id; - const char* code; - args >> s_id >> code >> EndMessage; - std::list::iterator tstr; - for (tstr=stringList.begin(); tstr != stringList.end(); tstr++) - if((*tstr)->getSessionID()==(long)s_id) break; + for (std::list::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 ((currentFrame0)) return; + int32 s_id; + const char* code; + args >> s_id >> code >> EndMessage; + std::list::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->addTuioString(addString); - - - } - else if ( ((*tstr)->getCode()!=code) ) - { - (*tstr)->update(code); - for (std::list::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->updateTuioString((*tstr)); - } - } - else if( strcmp( cmd, "alive" ) == 0 ) - { - if ((currentFrame0)) return; - - int32 s_id; - while(!args.Eos()) - { - args >> s_id; - stringBuffer.push_back((long)s_id); - std::list::iterator iter; - iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); - if (iter != aliveStringList.end()) aliveStringList.erase(iter); - } - args >> EndMessage; - - std::list::iterator alive_iter; - for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++) - { - std::list::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) - (*listener)->removeTuioString(deleteString); - - if (stringList.size()>0) - { - std::list::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->addTuioString(addString); + + + } + else if ( ((*tstr)->getCode()!=code) ) + { + (*tstr)->update(code); + for (std::list::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->updateTuioString((*tstr)); + } + } + else if( strcmp( cmd, "alive" ) == 0 ) + { + if ((currentFrame0)) return; + + int32 s_id; + while(!args.Eos()) + { + args >> s_id; + stringBuffer.push_back((long)s_id); + std::list::iterator iter; + iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); + if (iter != aliveStringList.end()) aliveStringList.erase(iter); + } + args >> EndMessage; + + std::list::iterator alive_iter; + for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++) + { + std::list::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::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) + (*listener)->removeTuioString(deleteString); + + if (stringList.size()>0) + { + std::list::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::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::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++) + if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime); - for (std::list::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::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::iterator result = find(listenerList.begin(),listenerList.end(),listener); - if (result!=listenerList.end()) listenerList.remove(listener); + std::list::iterator result = find(listenerList.begin(),listenerList.end(),listener); + if (result!=listenerList.end()) listenerList.remove(listener); } TuioObject* TuioClient::getTuioObject(long s_id) { - for (std::list::iterator iter=objectList.begin(); iter != objectList.end(); iter++) - if((*iter)->getSessionID()==s_id) return (*iter); - - return NULL; + for (std::list::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::iterator iter=cursorList.begin(); iter != cursorList.end(); iter++) - if((*iter)->getSessionID()==s_id) return (*iter); - - return NULL; + for (std::list::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::iterator iter=stringList.begin(); iter != stringList.end(); iter++) - if((*iter)->getSessionID()==s_id) return (*iter); - - return NULL; + for (std::list::iterator iter=stringList.begin(); iter != stringList.end(); iter++) + if((*iter)->getSessionID()==s_id) return (*iter); + + return NULL; } std::list TuioClient::getTuioObjects() { - return objectList; + return objectList; } std::list TuioClient::getTuioCursors() { - return cursorList; + return cursorList; } std::list 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; }