--- 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<TuioClient*>(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 ((currentFrame<lastFrame) && (currentFrame>0)) 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<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) ) {
+ }
+ 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 ){
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
if ((currentFrame<lastFrame) && (currentFrame>0)) return;
int32 s_id;
- while(!args.Eos()) {
+ 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);
@@ -120,11 +129,14 @@
args >> EndMessage;
std::list<long>::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<TuioObject*>::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<TuioListener*>::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 ((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;
- 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<TuioCursor*>::iterator closestCursor = freeCursorList.begin();
//Modifié par alexandre.bastien@iri.centrepompidou.fr
- for(std::list<TuioCursor*>::iterator testCursor = freeCursorList.begin();testCursor!= freeCursorList.end(); testCursor++) {
+ 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;
+ }
+ 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<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
(*listener)->updateTuioCursor((*tcur));
}
-
- } else if( strcmp( cmd, "alive" ) == 0 ){
+ }
+ else if( strcmp( cmd, "alive" ) == 0 )
+ {
if ((currentFrame<lastFrame) && (currentFrame>0)) return;
int32 s_id;
- while(!args.Eos()) {
+ 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++) {
+ for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++)
+ {
std::list<TuioCursor*>::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<TuioListener*>::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<TuioCursor*>::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<TuioCursor*>::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()<maxFingerID) freeCursorList.push_back(deleteCursor);
-
+ }
+ }
+ else if (deleteCursor->getFingerID()<maxFingerID) freeCursorList.push_back(deleteCursor);
break;
}
}
-
}
-
aliveCursorList = cursorBuffer;
cursorBuffer.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;
}
-
for (std::list<TuioCursor*>::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 ((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())
+ {
+ 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;
+
+ 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);
+
+ 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 ((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";
}
}
@@ -350,6 +605,13 @@
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;
+}
+
std::list<TuioObject*> TuioClient::getTuioObjects() {
return objectList;
}
@@ -358,6 +620,10 @@
return cursorList;
}
+std::list<TuioString*> TuioClient::getTuioStrings() {
+ return stringList;
+}
+
long TuioClient::getCurrentTime() {
#ifdef WIN32