1 package org.ximtec.igesture.io.tuio.tuio2D.handler;
2
3 import java.util.Enumeration;
4 import java.util.Vector;
5
6 import org.ximtec.igesture.io.tuio.TuioListener;
7 import org.ximtec.igesture.io.tuio.TuioTime;
8 import org.ximtec.igesture.io.tuio.handler.AbstractTuioObjectHandler;
9 import org.ximtec.igesture.io.tuio.tuio2D.TuioObject;
10
11
12 import com.illposed.osc.OSCMessage;
13
14
15
16
17
18
19 public class TuioObjectHandler extends AbstractTuioObjectHandler<TuioObject> {
20
21
22 public TuioObjectHandler()
23 {
24
25 }
26
27 public void acceptMessage(OSCMessage message, TuioTime currentTime) {
28 Object[] args = message.getArguments();
29 String command = (String)args[0];
30
31 if (command.equals("set")) {
32
33 long s_id = ((Integer)args[1]).longValue();
34 int c_id = ((Integer)args[2]).intValue();
35 float xpos = ((Float)args[3]).floatValue();
36 float ypos = ((Float)args[4]).floatValue();
37 float angle = ((Float)args[5]).floatValue();
38 float xspeed = ((Float)args[6]).floatValue();
39 float yspeed = ((Float)args[7]).floatValue();
40 float rspeed = ((Float)args[8]).floatValue();
41 float maccel = ((Float)args[9]).floatValue();
42 float raccel = ((Float)args[10]).floatValue();
43
44 if (objectList.get(s_id) == null) {
45
46 TuioObject addObject = new TuioObject(s_id,c_id,xpos,ypos,angle);
47 frameObjects.addElement(addObject);
48
49 } else {
50
51 TuioObject tobj = objectList.get(s_id);
52 if (tobj==null) return;
53 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)) {
54
55 TuioObject updateObject = new TuioObject(s_id,c_id,xpos,ypos,angle);
56 updateObject.update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel);
57 frameObjects.addElement(updateObject);
58 }
59
60 }
61
62 } else if (command.equals("alive")) {
63
64 newObjectList.clear();
65 for (int i=1;i<args.length;i++) {
66
67 long s_id = ((Integer)args[i]).longValue();
68 newObjectList.addElement(s_id);
69
70 if (aliveObjectList.contains(s_id))
71 aliveObjectList.removeElement(s_id);
72 }
73
74
75 for (int i=0;i<aliveObjectList.size();i++) {
76 TuioObject removeObject = objectList.get(aliveObjectList.elementAt(i));
77 if (removeObject==null) continue;
78 removeObject.remove(currentTime);
79 frameObjects.addElement(removeObject);
80 }
81
82 } else if (command.equals("fseq")) {
83
84 long fseq = ((Integer)args[1]).longValue();
85 boolean lateFrame = false;
86
87 if (fseq>0) {
88 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime();
89 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame=fseq;
90 else lateFrame = true;
91 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) {
92 currentTime = TuioTime.getSessionTime();
93 }
94
95 if (!lateFrame) {
96 Enumeration<TuioObject> frameEnum = frameObjects.elements();
97 while(frameEnum.hasMoreElements()) {
98 TuioObject tobj = frameEnum.nextElement();
99
100 switch (tobj.getTuioState()) {
101 case TuioObject.TUIO_REMOVED:
102 TuioObject removeObject = tobj;
103 removeObject.remove(currentTime);
104 for (int i=0;i<listenerList.size();i++) {
105 TuioListener listener = (TuioListener)listenerList.elementAt(i);
106 if (listener!=null) listener.removeTuioObject(removeObject);
107 }
108 objectList.remove(removeObject.getSessionID());
109 break;
110
111 case TuioObject.TUIO_ADDED:
112 TuioObject addObject = new TuioObject(currentTime,tobj.getSessionID(),tobj.getSymbolID(),tobj.getX(),tobj.getY(),tobj.getAngle());
113 objectList.put(addObject.getSessionID(),addObject);
114 for (int i=0;i<listenerList.size();i++) {
115 TuioListener listener = (TuioListener)listenerList.elementAt(i);
116 if (listener!=null) listener.addTuioObject(addObject);
117 }
118 break;
119
120 default:
121 TuioObject updateObject = objectList.get(tobj.getSessionID());
122 if ( (tobj.getX()!=updateObject.getX() && tobj.getXSpeed()==0) || (tobj.getY()!=updateObject.getY() && tobj.getYSpeed()==0) )
123 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle());
124 else
125 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle(),tobj.getXSpeed(),tobj.getYSpeed(),tobj.getRotationSpeed(),tobj.getMotionAccel(),tobj.getRotationAccel());
126
127 for (int i=0;i<listenerList.size();i++) {
128 TuioListener listener = (TuioListener)listenerList.elementAt(i);
129 if (listener!=null) listener.updateTuioObject(updateObject);
130 }
131 }
132 }
133
134 for (int i=0;i<listenerList.size();i++) {
135 TuioListener listener = (TuioListener)listenerList.elementAt(i);
136 if (listener!=null) listener.refresh(new TuioTime(currentTime));
137 }
138
139 Vector<Long> buffer = aliveObjectList;
140 aliveObjectList = newObjectList;
141
142 newObjectList = buffer;
143 }
144 frameObjects.clear();
145 }
146 }
147 }