diff -r 858e90c7cbaa -r 6c08d4d7219e front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp --- a/front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp Fri Apr 06 18:36:40 2012 +0200 +++ b/front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp Thu Apr 12 13:09:46 2012 +0200 @@ -30,6 +30,8 @@ static_cast(obj)->socket->Run(); return 0; }; + +using namespace std; TuioClient::TuioClient() { TuioClient(3333); @@ -52,7 +54,7 @@ locked = false; running = false; - currentFrame = lastFrame = maxFingerID = -1; + currentFrame = lastFrame = maxFingerID = maxStringID = -1; } TuioClient::~TuioClient() { @@ -68,17 +70,20 @@ } } -void TuioClient::ProcessMessage( const ReceivedMessage& msg, const IpEndpointName& remoteEndpoint) { - try { +void TuioClient::ProcessMessage( const ReceivedMessage& msg, const IpEndpointName& remoteEndpoint) +{ + try + { ReceivedMessageArgumentStream args = msg.ArgumentStream(); ReceivedMessage::const_iterator arg = msg.ArgumentsBegin(); - if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 ){ - + if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 ) + { const char* cmd; args >> cmd; - if( strcmp( cmd, "set" ) == 0 ){ + if( strcmp( cmd, "set" ) == 0 ) + { if ((currentFrame0)) return; int32 s_id, f_id; @@ -90,7 +95,8 @@ 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); @@ -98,21 +104,24 @@ 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) ) { + } + 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 ){ + } + else if( strcmp( cmd, "alive" ) == 0 ) + { if ((currentFrame0)) return; int32 s_id; - while(!args.Eos()) { + 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); @@ -120,11 +129,14 @@ args >> EndMessage; std::list::iterator alive_iter; - for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); 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++) { + for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++) + { TuioObject *deleteObject = (*tobj); - if(deleteObject->getSessionID()==*alive_iter) { + if(deleteObject->getSessionID()==*alive_iter) + { deleteObject->remove(); for (std::list::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) (*listener)->removeTuioObject(deleteObject); @@ -133,20 +145,20 @@ break; } } - } - aliveObjectList = objectBuffer; objectBuffer.clear(); - } else if( strcmp( cmd, "fseq" ) == 0 ){ - + } + else if( strcmp( cmd, "fseq" ) == 0 ) + { if(currentFrame>0) lastFrame = currentFrame; args >> currentFrame >> EndMessage; - if ((currentFrame>=lastFrame) || (currentFrame<0)) { - + if ((currentFrame>=lastFrame) || (currentFrame<0)) + { long currentTime = lastTime; - if (currentFrame>lastFrame) { + if (currentFrame>lastFrame) + { currentTime = getCurrentTime()-startTime; lastTime = currentTime; } @@ -158,36 +170,40 @@ (*listener)->refresh(currentTime); } } - } else if( strcmp( msg.AddressPattern(), "/tuio/3Dcur" ) == 0 ) { + } + else if( strcmp( msg.AddressPattern(), "/tuio/3Dcur" ) == 0 ) + { const char* cmd; args >> cmd; - if( strcmp( cmd, "set" ) == 0 ){ + 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; - if (tcur == cursorList.end()) { - + if (tcur == cursorList.end()) + { int f_id = (int)cursorList.size(); - if ((int)(cursorList.size())<=maxFingerID) { + 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++) { + 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; + } + 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); @@ -196,82 +212,87 @@ (*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) ) { + } + 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 ){ + } + else if( strcmp( cmd, "alive" ) == 0 ) + { if ((currentFrame0)) return; int32 s_id; - while(!args.Eos()) { + 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++) { + for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++) + { std::list::iterator tcur; - for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++) { + for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++) + { TuioCursor *deleteCursor = (*tcur); - if(deleteCursor->getSessionID()==*alive_iter) { - + 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) { + if (deleteCursor->getFingerID()==maxFingerID) + { maxFingerID = -1; delete deleteCursor; - if (cursorList.size()>0) { + if (cursorList.size()>0) + { std::list::iterator clist; - for (clist=cursorList.begin(); clist != cursorList.end(); 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++) { + 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()getFingerID()0) lastFrame = currentFrame; args >> currentFrame >> EndMessage; - if ((currentFrame>=lastFrame) || (currentFrame<0)) { + if ((currentFrame>=lastFrame) || (currentFrame<0)) + { long currentTime = lastTime; - if (currentFrame>lastFrame) { + 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); @@ -280,7 +301,241 @@ } } } - } catch( Exception& e ){ + 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()) + { + 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; + + 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); + + 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 ((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"; } } @@ -350,6 +605,13 @@ 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; +} + std::list TuioClient::getTuioObjects() { return objectList; } @@ -358,6 +620,10 @@ return cursorList; } +std::list TuioClient::getTuioStrings() { + return stringList; +} + long TuioClient::getCurrentTime() { #ifdef WIN32