--- a/front_processing/extern/TUIO_JAVA/src/TUIO/TuioClient.java Fri Mar 09 18:15:12 2012 +0100
+++ b/front_processing/extern/TUIO_JAVA/src/TUIO/TuioClient.java Thu Mar 15 13:33:21 2012 +0100
@@ -38,6 +38,8 @@
*/
public class TuioClient implements OSCListener {
+ public String comm;
+
private int port = 3333;
private OSCPortIn oscPort;
private boolean connected = false;
@@ -47,13 +49,20 @@
private Hashtable<Long,TuioCursor> cursorList = new Hashtable<Long,TuioCursor>();
private Vector<Long> aliveCursorList = new Vector<Long>();
private Vector<Long> newCursorList = new Vector<Long>();
+ private Hashtable<Long,TuioString> stringList = new Hashtable<Long,TuioString>();
+ private Vector<Long> aliveStringList = new Vector<Long>();
+ private Vector<Long> newStringList = new Vector<Long>();
private Vector<TuioObject> frameObjects = new Vector<TuioObject>();
private Vector<TuioCursor> frameCursors = new Vector<TuioCursor>();
+ private Vector<TuioString> frameStrings = new Vector<TuioString>();
private Vector<TuioCursor> freeCursorList = new Vector<TuioCursor>();
private int maxCursorID = -1;
+ private Vector<TuioString> freeStringList = new Vector<TuioString>();
+ private int maxStringID = -1;
+
private long currentFrame = 0;
private TuioTime currentTime;
@@ -86,7 +95,8 @@
try {
oscPort = new OSCPortIn(port);
oscPort.addListener("/tuio/2Dobj",this);
- oscPort.addListener("/tuio/2Dcur",this);
+ oscPort.addListener("/tuio/3Dcur",this);
+ oscPort.addListener("/tuio/_siP",this);
oscPort.startListening();
connected = true;
} catch (Exception e) {
@@ -153,7 +163,16 @@
*/
public Vector<TuioCursor> getTuioCursors() {
return new Vector<TuioCursor>(cursorList.values());
- }
+ }
+
+ /**
+ * Returns a Vector of all currently active TuioStrings
+ *
+ * @return a Vector of all currently active TuioStrings
+ */
+ public Vector<TuioString> getTuioStrings() {
+ return new Vector<TuioString>(stringList.values());
+ }
/**
* Returns the TuioObject corresponding to the provided Session ID
@@ -173,6 +192,16 @@
*/
public TuioCursor getTuioCursor(long s_id) {
return cursorList.get(s_id);
+ }
+
+ /**
+ * Returns the TuioString corresponding to the provided Session ID
+ * or NULL if the Session ID does not refer to an active TuioString
+ *
+ * @return an active TuioString corresponding to the provided Session ID or NULL
+ */
+ public TuioString getTuioString(long s_id) {
+ return stringList.get(s_id);
}
/**
@@ -305,30 +334,31 @@
}
frameObjects.clear();
}
- } else if (address.equals("/tuio/2Dcur")) {
+ } else if (address.equals("/tuio/3Dcur")) {
if (command.equals("set")) {
long s_id = ((Integer)args[1]).longValue();
float xpos = ((Float)args[2]).floatValue();
float ypos = ((Float)args[3]).floatValue();
- float xspeed = ((Float)args[4]).floatValue();
- float yspeed = ((Float)args[5]).floatValue();
- float maccel = ((Float)args[6]).floatValue();
+ float zpos = ((Float)args[4]).floatValue();
+ float xspeed = ((Float)args[5]).floatValue();
+ float yspeed = ((Float)args[6]).floatValue();
+ float maccel = ((Float)args[7]).floatValue();
if (cursorList.get(s_id) == null) {
- TuioCursor addCursor = new TuioCursor(s_id, -1 ,xpos,ypos);
+ TuioCursor addCursor = new TuioCursor(s_id, -1 ,xpos,ypos,zpos);
frameCursors.addElement(addCursor);
} else {
TuioCursor tcur = cursorList.get(s_id);
if (tcur==null) return;
- if ((tcur.xpos!=xpos) || (tcur.ypos!=ypos) || (tcur.x_speed!=xspeed) || (tcur.y_speed!=yspeed) || (tcur.motion_accel!=maccel)) {
+ if ((tcur.xpos!=xpos) || (tcur.ypos!=ypos) || (tcur.zpos!=zpos) || (tcur.x_speed!=xspeed) || (tcur.y_speed!=yspeed) || (tcur.motion_accel!=maccel)) {
- TuioCursor updateCursor = new TuioCursor(s_id,tcur.getCursorID(),xpos,ypos);
- updateCursor.update(xpos,ypos,xspeed,yspeed,maccel);
+ TuioCursor updateCursor = new TuioCursor(s_id,tcur.getCursorID(),xpos,ypos,zpos);
+ updateCursor.update(xpos,ypos,zpos,xspeed,yspeed,maccel);
frameCursors.addElement(updateCursor);
}
}
@@ -420,7 +450,7 @@
freeCursorList.removeElement(closestCursor);
} else maxCursorID = c_id;
- TuioCursor addCursor = new TuioCursor(currentTime,tcur.getSessionID(),c_id,tcur.getX(),tcur.getY());
+ TuioCursor addCursor = new TuioCursor(currentTime,tcur.getSessionID(),c_id,tcur.getX(),tcur.getY(),tcur.getZ());
cursorList.put(addCursor.getSessionID(),addCursor);
for (int i=0;i<listenerList.size();i++) {
@@ -432,10 +462,10 @@
default:
TuioCursor updateCursor = cursorList.get(tcur.getSessionID());
- if ( (tcur.getX()!=updateCursor.getX() && tcur.getXSpeed()==0) || (tcur.getY()!=updateCursor.getY() && tcur.getYSpeed()==0) )
- updateCursor.update(currentTime,tcur.getX(),tcur.getY());
+ if ( (tcur.getX()!=updateCursor.getX() && tcur.getXSpeed()==0) || (tcur.getY()!=updateCursor.getY() && tcur.getYSpeed()==0) || (tcur.getZ()!=updateCursor.getZ()) )
+ updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ());
else
- updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getXSpeed(),tcur.getYSpeed(),tcur.getMotionAccel());
+ updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ(),tcur.getXSpeed(),tcur.getYSpeed(),tcur.getMotionAccel());
for (int i=0;i<listenerList.size();i++) {
TuioListener listener = (TuioListener)listenerList.elementAt(i);
@@ -457,7 +487,157 @@
frameCursors.clear();
}
+ } else if (address.equals("/tuio/_siP")) {
+ if (command.equals("set")) {
+
+ long s_id = ((Integer)args[1]).longValue();
+ String msg = args[2].toString();
+
+ if (stringList.get(s_id) == null) {
+
+ TuioString addString = new TuioString(s_id, -1, msg);
+ frameStrings.addElement(addString);
+
+ } else {
+
+ TuioString tstr = stringList.get(s_id);
+ if (tstr==null) return;
+ if (!tstr.getMessage().equals(msg)) {
+
+ TuioString updateString = new TuioString(s_id,tstr.getStringID(),msg);
+ updateString.update(msg);
+ frameStrings.addElement(updateString);
+ }
+ }
+
+ //System.out.println("set cur " + s_id+" "+xpos+" "+ypos+" "+xspeed+" "+yspeed+" "+maccel);
+
+ } else if (command.equals("alive")) {
+
+ newStringList.clear();
+ for (int i=1;i<args.length;i++) {
+ // get the message content
+ long s_id = ((Integer)args[i]).longValue();
+ newStringList.addElement(s_id);
+ // reduce the cursor list to the lost cursors
+ if (aliveStringList.contains(s_id))
+ aliveStringList.removeElement(s_id);
+ }
+
+ // remove the remaining cursors
+ for (int i=0;i<aliveStringList.size();i++) {
+ TuioString removeString = stringList.get(aliveStringList.elementAt(i));
+ if (removeString==null) continue;
+ removeString.remove(currentTime);
+ frameStrings.addElement(removeString);
+ }
+
+ } else if (command.equals("fseq")) {
+ long fseq = ((Integer)args[1]).longValue();
+ boolean lateFrame = false;
+
+ if (fseq>0) {
+ if (fseq>currentFrame) currentTime = TuioTime.getSessionTime();
+ if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq;
+ else lateFrame = true;
+ } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) {
+ currentTime = TuioTime.getSessionTime();
+ }
+ if (!lateFrame) {
+
+ Enumeration<TuioString> frameEnum = frameStrings.elements();
+ while(frameEnum.hasMoreElements()) {
+ TuioString tstr = frameEnum.nextElement();
+
+ switch (tstr.getTuioState()) {
+ case TuioString.TUIO_REMOVED:
+
+ TuioString removeString = tstr;
+ removeString.remove(currentTime);
+
+ for (int i=0;i<listenerList.size();i++) {
+ TuioListener listener = (TuioListener)listenerList.elementAt(i);
+ if (listener!=null) listener.removeTuioString(removeString);
+ }
+
+ stringList.remove(removeString.getSessionID());
+
+ if (removeString.getStringID()==maxStringID) {
+ maxStringID = -1;
+ if (stringList.size()>0) {
+ Enumeration<TuioString> slist = stringList.elements();
+ while (slist.hasMoreElements()) {
+ int sl_id = slist.nextElement().getStringID();
+ if (sl_id>maxStringID) maxStringID=sl_id;
+ }
+
+ Enumeration<TuioString> flist = freeStringList.elements();
+ while (flist.hasMoreElements()) {
+ int sl_id = flist.nextElement().getStringID();
+ if (sl_id>=maxStringID) freeStringList.removeElement(sl_id);
+ }
+ } else freeStringList.clear();
+ } else if (removeString.getStringID()<maxStringID) {
+ freeStringList.addElement(removeString);
+ }
+
+ break;
+
+ case TuioString.TUIO_ADDED:
+
+ int sl_id = stringList.size();
+ if ((stringList.size()<=maxStringID) && (freeStringList.size()>0)) {
+ TuioString closestString = freeStringList.firstElement();
+ Enumeration<TuioString> testList = freeStringList.elements();
+ while (testList.hasMoreElements()) {
+ TuioString testString = testList.nextElement();
+ //if (testString.getDistance(tstr)<closestString.getDistance(tstr))
+ closestString = testString;
+ }
+ sl_id = closestString.getStringID();
+ freeStringList.removeElement(closestString);
+ } else maxStringID = sl_id;
+
+ TuioString addString = new TuioString(currentTime,tstr.getSessionID(),sl_id,tstr.getMessage());
+ stringList.put(addString.getSessionID(),addString);
+
+ for (int i=0;i<listenerList.size();i++) {
+ TuioListener listener = (TuioListener)listenerList.elementAt(i);
+ if (listener!=null) listener.addTuioString(addString);
+ }
+ break;
+
+ default:
+
+ TuioString updateString = stringList.get(tstr.getSessionID());
+ if ( tstr.getMessage()!=updateString.getMessage() )
+ updateString.update(currentTime,tstr.getMessage());
+ else
+ updateString.update(currentTime,tstr.getMessage());
+
+ for (int i=0;i<listenerList.size();i++) {
+ TuioListener listener = (TuioListener)listenerList.elementAt(i);
+ if (listener!=null) listener.updateTuioString(updateString);
+ }
+ }
+ }
+
+ for (int i=0;i<listenerList.size();i++) {
+ TuioListener listener = (TuioListener)listenerList.elementAt(i);
+ if (listener!=null) listener.refresh(new TuioTime(currentTime));
+ }
+
+ Vector<Long> buffer = aliveStringList;
+ aliveStringList = newStringList;
+ // recycling the vector
+ newStringList = buffer;
+ }
+
+ frameStrings.clear();
+ }
}
+
+
}
}