35 * |
35 * |
36 * @author Martin Kaltenbrunner |
36 * @author Martin Kaltenbrunner |
37 * @version 1.4 |
37 * @version 1.4 |
38 */ |
38 */ |
39 public class TuioClient implements OSCListener { |
39 public class TuioClient implements OSCListener { |
40 |
40 |
41 public String comm; |
41 public String comm; |
42 |
42 |
43 private int port = 3333; |
43 private int port = 3333; |
44 private OSCPortIn oscPort; |
44 private OSCPortIn oscPort; |
45 private boolean connected = false; |
45 private boolean connected = false; |
46 private Hashtable<Long,TuioObject> objectList = new Hashtable<Long,TuioObject>(); |
46 private Hashtable<Long,TuioObject> objectList = new Hashtable<Long,TuioObject>(); |
47 private Vector<Long> aliveObjectList = new Vector<Long>(); |
47 private Vector<Long> aliveObjectList = new Vector<Long>(); |
48 private Vector<Long> newObjectList = new Vector<Long>(); |
48 private Vector<Long> newObjectList = new Vector<Long>(); |
49 private Hashtable<Long,TuioCursor> cursorList = new Hashtable<Long,TuioCursor>(); |
49 private Hashtable<Long,TuioCursor> cursorList = new Hashtable<Long,TuioCursor>(); |
50 private Vector<Long> aliveCursorList = new Vector<Long>(); |
50 private Vector<Long> aliveCursorList = new Vector<Long>(); |
51 private Vector<Long> newCursorList = new Vector<Long>(); |
51 private Vector<Long> newCursorList = new Vector<Long>(); |
52 private Hashtable<Long,TuioString> stringList = new Hashtable<Long,TuioString>(); |
52 private Hashtable<Long,TuioString> stringList = new Hashtable<Long,TuioString>(); |
53 private Vector<Long> aliveStringList = new Vector<Long>(); |
53 private Vector<Long> aliveStringList = new Vector<Long>(); |
54 private Vector<Long> newStringList = new Vector<Long>(); |
54 private Vector<Long> newStringList = new Vector<Long>(); |
55 |
55 |
56 private Vector<TuioObject> frameObjects = new Vector<TuioObject>(); |
56 private Vector<TuioObject> frameObjects = new Vector<TuioObject>(); |
57 private Vector<TuioCursor> frameCursors = new Vector<TuioCursor>(); |
57 private Vector<TuioCursor> frameCursors = new Vector<TuioCursor>(); |
58 private Vector<TuioString> frameStrings = new Vector<TuioString>(); |
58 private Vector<TuioString> frameStrings = new Vector<TuioString>(); |
59 |
59 |
60 private Vector<TuioCursor> freeCursorList = new Vector<TuioCursor>(); |
60 private Vector<TuioCursor> freeCursorList = new Vector<TuioCursor>(); |
61 private int maxCursorID = -1; |
61 private int maxCursorID = -1; |
62 |
62 |
63 private Vector<TuioString> freeStringList = new Vector<TuioString>(); |
63 private Vector<TuioString> freeStringList = new Vector<TuioString>(); |
64 private int maxStringID = -1; |
64 private int maxStringID = -1; |
65 |
65 |
66 private long currentFrame = 0; |
66 private long currentFrame = 0; |
67 private TuioTime currentTime; |
67 private TuioTime currentTime; |
68 |
68 |
69 private Vector<TuioListener> listenerList = new Vector<TuioListener>(); |
69 private Vector<TuioListener> listenerList = new Vector<TuioListener>(); |
70 |
70 |
71 /** |
71 /** |
72 * The default constructor creates a client that listens to the default TUIO port 3333 |
72 * The default constructor creates a client that listens to the default TUIO port 3333 |
73 */ |
73 */ |
74 public TuioClient() {} |
74 public TuioClient() {} |
75 |
75 |
76 /** |
76 /** |
77 * This constructor creates a client that listens to the provided port |
77 * This constructor creates a client that listens to the provided port |
78 * |
78 * |
79 * @param port the listening port number |
79 * @param port the listening port number |
80 */ |
80 */ |
81 public TuioClient(int port) { |
81 public TuioClient(int port) { |
82 this.port = port; |
82 this.port = port; |
83 } |
83 } |
84 |
84 |
85 /** |
85 /** |
86 * The TuioClient starts listening to TUIO messages on the configured UDP port |
86 * The TuioClient starts listening to TUIO messages on the configured UDP port |
87 * All reveived TUIO messages are decoded and the resulting TUIO events are broadcasted to all registered TuioListeners |
87 * All reveived TUIO messages are decoded and the resulting TUIO events are broadcasted to all registered TuioListeners |
88 */ |
88 */ |
89 public void connect() { |
89 public void connect() { |
90 |
90 |
91 TuioTime.initSession(); |
91 TuioTime.initSession(); |
92 currentTime = new TuioTime(); |
92 currentTime = new TuioTime(); |
93 currentTime.reset(); |
93 currentTime.reset(); |
94 |
94 |
95 try { |
95 try { |
96 oscPort = new OSCPortIn(port); |
96 oscPort = new OSCPortIn(port); |
97 oscPort.addListener("/tuio/2Dobj",this); |
97 oscPort.addListener("/tuio/2Dobj",this); |
98 oscPort.addListener("/tuio/3Dcur",this); |
98 oscPort.addListener("/tuio/3Dcur",this); |
99 oscPort.addListener("/tuio/_siP",this); |
99 oscPort.addListener("/tuio/_siP",this); |
100 oscPort.startListening(); |
100 oscPort.startListening(); |
101 connected = true; |
101 connected = true; |
102 } catch (Exception e) { |
102 } catch (Exception e) { |
103 System.out.println("TuioClient: failed to connect to port "+port); |
103 System.out.println("TuioClient: failed to connect to port "+port); |
104 connected = false; |
104 connected = false; |
105 } |
105 } |
106 } |
106 } |
107 |
107 |
108 /** |
108 /** |
109 * The TuioClient stops listening to TUIO messages on the configured UDP port |
109 * The TuioClient stops listening to TUIO messages on the configured UDP port |
110 */ |
110 */ |
111 public void disconnect() { |
111 public void disconnect() { |
112 oscPort.stopListening(); |
112 oscPort.stopListening(); |
113 try { Thread.sleep(100); } |
113 try { Thread.sleep(100); } |
114 catch (Exception e) {}; |
114 catch (Exception e) {}; |
115 oscPort.close(); |
115 oscPort.close(); |
116 connected = false; |
116 connected = false; |
117 } |
117 } |
118 |
118 |
119 /** |
119 /** |
120 * Returns true if this TuioClient is currently connected. |
120 * Returns true if this TuioClient is currently connected. |
121 * @return true if this TuioClient is currently connected |
121 * @return true if this TuioClient is currently connected |
122 */ |
122 */ |
123 public boolean isConnected() { return connected; } |
123 public boolean isConnected() { return connected; } |
124 |
124 |
125 /** |
125 /** |
126 * Adds the provided TuioListener to the list of registered TUIO event listeners |
126 * Adds the provided TuioListener to the list of registered TUIO event listeners |
127 * |
127 * |
128 * @param listener the TuioListener to add |
128 * @param listener the TuioListener to add |
129 */ |
129 */ |
130 public void addTuioListener(TuioListener listener) { |
130 public void addTuioListener(TuioListener listener) { |
131 listenerList.addElement(listener); |
131 listenerList.addElement(listener); |
132 } |
132 } |
133 |
133 |
134 /** |
134 /** |
135 * Removes the provided TuioListener from the list of registered TUIO event listeners |
135 * Removes the provided TuioListener from the list of registered TUIO event listeners |
136 * |
136 * |
137 * @param listener the TuioListener to remove |
137 * @param listener the TuioListener to remove |
138 */ |
138 */ |
139 public void removeTuioListener(TuioListener listener) { |
139 public void removeTuioListener(TuioListener listener) { |
140 listenerList.removeElement(listener); |
140 listenerList.removeElement(listener); |
141 } |
141 } |
142 |
142 |
143 /** |
143 /** |
144 * Removes all TuioListener from the list of registered TUIO event listeners |
144 * Removes all TuioListener from the list of registered TUIO event listeners |
145 */ |
145 */ |
146 public void removeAllTuioListeners() { |
146 public void removeAllTuioListeners() { |
147 listenerList.clear(); |
147 listenerList.clear(); |
148 } |
148 } |
149 |
149 |
150 /** |
150 /** |
151 * Returns a Vector of all currently active TuioObjects |
151 * Returns a Vector of all currently active TuioObjects |
152 * |
152 * |
153 * @return a Vector of all currently active TuioObjects |
153 * @return a Vector of all currently active TuioObjects |
154 */ |
154 */ |
155 public Vector<TuioObject> getTuioObjects() { |
155 public Vector<TuioObject> getTuioObjects() { |
156 return new Vector<TuioObject>(objectList.values()); |
156 return new Vector<TuioObject>(objectList.values()); |
157 } |
157 } |
158 |
158 |
159 /** |
159 /** |
160 * Returns a Vector of all currently active TuioCursors |
160 * Returns a Vector of all currently active TuioCursors |
161 * |
161 * |
162 * @return a Vector of all currently active TuioCursors |
162 * @return a Vector of all currently active TuioCursors |
163 */ |
163 */ |
164 public Vector<TuioCursor> getTuioCursors() { |
164 public Vector<TuioCursor> getTuioCursors() { |
165 return new Vector<TuioCursor>(cursorList.values()); |
165 return new Vector<TuioCursor>(cursorList.values()); |
166 } |
166 } |
167 |
167 |
168 /** |
168 /** |
169 * Returns a Vector of all currently active TuioStrings |
169 * Returns a Vector of all currently active TuioStrings |
170 * |
170 * |
171 * @return a Vector of all currently active TuioStrings |
171 * @return a Vector of all currently active TuioStrings |
172 */ |
172 */ |
173 public Vector<TuioString> getTuioStrings() { |
173 public Vector<TuioString> getTuioStrings() { |
174 return new Vector<TuioString>(stringList.values()); |
174 return new Vector<TuioString>(stringList.values()); |
175 } |
175 } |
176 |
176 |
177 /** |
177 /** |
178 * Returns the TuioObject corresponding to the provided Session ID |
178 * Returns the TuioObject corresponding to the provided Session ID |
179 * or NULL if the Session ID does not refer to an active TuioObject |
179 * or NULL if the Session ID does not refer to an active TuioObject |
180 * |
180 * |
181 * @return an active TuioObject corresponding to the provided Session ID or NULL |
181 * @return an active TuioObject corresponding to the provided Session ID or NULL |
182 */ |
182 */ |
183 public TuioObject getTuioObject(long s_id) { |
183 public TuioObject getTuioObject(long s_id) { |
184 return objectList.get(s_id); |
184 return objectList.get(s_id); |
185 } |
185 } |
186 |
186 |
187 /** |
187 /** |
188 * Returns the TuioCursor corresponding to the provided Session ID |
188 * Returns the TuioCursor corresponding to the provided Session ID |
189 * or NULL if the Session ID does not refer to an active TuioCursor |
189 * or NULL if the Session ID does not refer to an active TuioCursor |
190 * |
190 * |
191 * @return an active TuioCursor corresponding to the provided Session ID or NULL |
191 * @return an active TuioCursor corresponding to the provided Session ID or NULL |
192 */ |
192 */ |
193 public TuioCursor getTuioCursor(long s_id) { |
193 public TuioCursor getTuioCursor(long s_id) { |
194 return cursorList.get(s_id); |
194 return cursorList.get(s_id); |
195 } |
195 } |
196 |
196 |
197 /** |
197 /** |
198 * Returns the TuioString corresponding to the provided Session ID |
198 * Returns the TuioString corresponding to the provided Session ID |
199 * or NULL if the Session ID does not refer to an active TuioString |
199 * or NULL if the Session ID does not refer to an active TuioString |
200 * |
200 * |
201 * @return an active TuioString corresponding to the provided Session ID or NULL |
201 * @return an active TuioString corresponding to the provided Session ID or NULL |
202 */ |
202 */ |
203 public TuioString getTuioString(long s_id) { |
203 public TuioString getTuioString(long s_id) { |
204 return stringList.get(s_id); |
204 return stringList.get(s_id); |
205 } |
205 } |
206 |
206 |
207 /** |
207 /** |
208 * The OSC callback method where all TUIO messages are received and decoded |
208 * The OSC callback method where all TUIO messages are received and decoded |
209 * and where the TUIO event callbacks are dispatched |
209 * and where the TUIO event callbacks are dispatched |
210 * |
210 * |
211 * @param date the time stamp of the OSC bundle |
211 * @param date the time stamp of the OSC bundle |
212 * @param message the received OSC message |
212 * @param message the received OSC message |
213 */ |
213 */ |
214 public void acceptMessage(Date date, OSCMessage message) { |
214 public void acceptMessage(Date date, OSCMessage message) { |
215 |
215 |
216 Object[] args = message.getArguments(); |
216 Object[] args = message.getArguments(); |
217 String command = (String)args[0]; |
217 String command = (String)args[0]; |
218 String address = message.getAddress(); |
218 String address = message.getAddress(); |
219 |
219 |
220 if (address.equals("/tuio/2Dobj")) { |
220 if (address.equals("/tuio/2Dobj")) { |
221 |
221 |
222 if (command.equals("set")) { |
222 if (command.equals("set")) { |
223 |
223 |
224 long s_id = ((Integer)args[1]).longValue(); |
224 long s_id = ((Integer)args[1]).longValue(); |
225 int c_id = ((Integer)args[2]).intValue(); |
225 int c_id = ((Integer)args[2]).intValue(); |
226 float xpos = ((Float)args[3]).floatValue(); |
226 float xpos = ((Float)args[3]).floatValue(); |
227 float ypos = ((Float)args[4]).floatValue(); |
227 float ypos = ((Float)args[4]).floatValue(); |
228 float angle = ((Float)args[5]).floatValue(); |
228 float angle = ((Float)args[5]).floatValue(); |
229 float xspeed = ((Float)args[6]).floatValue(); |
229 float xspeed = ((Float)args[6]).floatValue(); |
230 float yspeed = ((Float)args[7]).floatValue(); |
230 float yspeed = ((Float)args[7]).floatValue(); |
231 float rspeed = ((Float)args[8]).floatValue(); |
231 float rspeed = ((Float)args[8]).floatValue(); |
232 float maccel = ((Float)args[9]).floatValue(); |
232 float maccel = ((Float)args[9]).floatValue(); |
233 float raccel = ((Float)args[10]).floatValue(); |
233 float raccel = ((Float)args[10]).floatValue(); |
234 |
234 |
235 if (objectList.get(s_id) == null) { |
235 if (objectList.get(s_id) == null) { |
236 |
236 |
237 TuioObject addObject = new TuioObject(s_id,c_id,xpos,ypos,angle); |
237 TuioObject addObject = new TuioObject(s_id,c_id,xpos,ypos,angle); |
238 frameObjects.addElement(addObject); |
238 frameObjects.addElement(addObject); |
239 |
239 |
240 } else { |
240 } else { |
241 |
241 |
242 TuioObject tobj = objectList.get(s_id); |
242 TuioObject tobj = objectList.get(s_id); |
243 if (tobj==null) return; |
243 if (tobj==null) return; |
244 if ((tobj.xpos!=xpos) || (tobj.ypos!=ypos) || (tobj.angle!=angle) || (tobj.x_speed!=xspeed) || (tobj.y_speed!=yspeed) || (tobj.rotation_speed!=rspeed) || (tobj.motion_accel!=maccel) || (tobj.rotation_accel!=raccel)) { |
244 if ((tobj.xpos!=xpos) || (tobj.ypos!=ypos) || (tobj.angle!=angle) || (tobj.x_speed!=xspeed) || (tobj.y_speed!=yspeed) || (tobj.rotation_speed!=rspeed) || (tobj.motion_accel!=maccel) || (tobj.rotation_accel!=raccel)) { |
245 |
245 |
246 TuioObject updateObject = new TuioObject(s_id,c_id,xpos,ypos,angle); |
246 TuioObject updateObject = new TuioObject(s_id,c_id,xpos,ypos,angle); |
247 updateObject.update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel); |
247 updateObject.update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel); |
248 frameObjects.addElement(updateObject); |
248 frameObjects.addElement(updateObject); |
249 } |
249 } |
250 |
250 |
251 } |
251 } |
252 |
252 |
253 } else if (command.equals("alive")) { |
253 } else if (command.equals("alive")) { |
254 |
254 |
255 newObjectList.clear(); |
255 newObjectList.clear(); |
256 for (int i=1;i<args.length;i++) { |
256 for (int i=1;i<args.length;i++) { |
257 // get the message content |
257 // get the message content |
258 long s_id = ((Integer)args[i]).longValue(); |
258 long s_id = ((Integer)args[i]).longValue(); |
259 newObjectList.addElement(s_id); |
259 newObjectList.addElement(s_id); |
260 // reduce the object list to the lost objects |
260 // reduce the object list to the lost objects |
261 if (aliveObjectList.contains(s_id)) |
261 if (aliveObjectList.contains(s_id)) |
262 aliveObjectList.removeElement(s_id); |
262 aliveObjectList.removeElement(s_id); |
263 } |
263 } |
264 |
264 |
265 // remove the remaining objects |
265 // remove the remaining objects |
266 for (int i=0;i<aliveObjectList.size();i++) { |
266 for (int i=0;i<aliveObjectList.size();i++) { |
267 TuioObject removeObject = objectList.get(aliveObjectList.elementAt(i)); |
267 TuioObject removeObject = objectList.get(aliveObjectList.elementAt(i)); |
268 if (removeObject==null) continue; |
268 if (removeObject==null) continue; |
269 removeObject.remove(currentTime); |
269 removeObject.remove(currentTime); |
270 frameObjects.addElement(removeObject); |
270 frameObjects.addElement(removeObject); |
271 } |
271 } |
272 |
272 |
273 } else if (command.equals("fseq")) { |
273 } else if (command.equals("fseq")) { |
274 |
274 |
275 long fseq = ((Integer)args[1]).longValue(); |
275 long fseq = ((Integer)args[1]).longValue(); |
276 boolean lateFrame = false; |
276 boolean lateFrame = false; |
277 |
277 |
278 if (fseq>0) { |
278 if (fseq>0) { |
279 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
279 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
280 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame=fseq; |
280 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame=fseq; |
281 else lateFrame = true; |
281 else lateFrame = true; |
282 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
282 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
283 currentTime = TuioTime.getSessionTime(); |
283 currentTime = TuioTime.getSessionTime(); |
284 } |
284 } |
285 |
285 |
286 if (!lateFrame) { |
286 if (!lateFrame) { |
287 Enumeration<TuioObject> frameEnum = frameObjects.elements(); |
287 Enumeration<TuioObject> frameEnum = frameObjects.elements(); |
288 while(frameEnum.hasMoreElements()) { |
288 while(frameEnum.hasMoreElements()) { |
289 TuioObject tobj = frameEnum.nextElement(); |
289 TuioObject tobj = frameEnum.nextElement(); |
290 |
290 |
291 switch (tobj.getTuioState()) { |
291 switch (tobj.getTuioState()) { |
292 case TuioObject.TUIO_REMOVED: |
292 case TuioObject.TUIO_REMOVED: |
293 TuioObject removeObject = tobj; |
293 TuioObject removeObject = tobj; |
294 removeObject.remove(currentTime); |
294 removeObject.remove(currentTime); |
295 for (int i=0;i<listenerList.size();i++) { |
295 for (int i=0;i<listenerList.size();i++) { |
296 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
296 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
297 if (listener!=null) listener.removeTuioObject(removeObject); |
297 if (listener!=null) listener.removeTuioObject(removeObject); |
298 } |
298 } |
299 objectList.remove(removeObject.getSessionID()); |
299 objectList.remove(removeObject.getSessionID()); |
300 break; |
300 break; |
301 |
301 |
302 case TuioObject.TUIO_ADDED: |
302 case TuioObject.TUIO_ADDED: |
303 TuioObject addObject = new TuioObject(currentTime,tobj.getSessionID(),tobj.getSymbolID(),tobj.getX(),tobj.getY(),tobj.getAngle()); |
303 TuioObject addObject = new TuioObject(currentTime,tobj.getSessionID(),tobj.getSymbolID(),tobj.getX(),tobj.getY(),tobj.getAngle()); |
304 objectList.put(addObject.getSessionID(),addObject); |
304 objectList.put(addObject.getSessionID(),addObject); |
305 for (int i=0;i<listenerList.size();i++) { |
305 for (int i=0;i<listenerList.size();i++) { |
306 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
306 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
307 if (listener!=null) listener.addTuioObject(addObject); |
307 if (listener!=null) listener.addTuioObject(addObject); |
308 } |
308 } |
309 break; |
309 break; |
310 |
310 |
311 default: |
311 default: |
312 TuioObject updateObject = objectList.get(tobj.getSessionID()); |
312 TuioObject updateObject = objectList.get(tobj.getSessionID()); |
313 if ( (tobj.getX()!=updateObject.getX() && tobj.getXSpeed()==0) || (tobj.getY()!=updateObject.getY() && tobj.getYSpeed()==0) ) |
313 if ( (tobj.getX()!=updateObject.getX() && tobj.getXSpeed()==0) || (tobj.getY()!=updateObject.getY() && tobj.getYSpeed()==0) ) |
314 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle()); |
314 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle()); |
315 else |
315 else |
316 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle(),tobj.getXSpeed(),tobj.getYSpeed(),tobj.getRotationSpeed(),tobj.getMotionAccel(),tobj.getRotationAccel()); |
316 updateObject.update(currentTime,tobj.getX(),tobj.getY(),tobj.getAngle(),tobj.getXSpeed(),tobj.getYSpeed(),tobj.getRotationSpeed(),tobj.getMotionAccel(),tobj.getRotationAccel()); |
317 |
317 |
318 for (int i=0;i<listenerList.size();i++) { |
318 for (int i=0;i<listenerList.size();i++) { |
319 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
319 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
320 if (listener!=null) listener.updateTuioObject(updateObject); |
320 if (listener!=null) listener.updateTuioObject(updateObject); |
321 } |
321 } |
322 } |
322 } |
323 } |
323 } |
324 |
324 |
325 for (int i=0;i<listenerList.size();i++) { |
325 for (int i=0;i<listenerList.size();i++) { |
326 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
326 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
327 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
327 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
328 } |
328 } |
329 |
329 |
330 Vector<Long> buffer = aliveObjectList; |
330 Vector<Long> buffer = aliveObjectList; |
331 aliveObjectList = newObjectList; |
331 aliveObjectList = newObjectList; |
332 // recycling the vector |
332 // recycling the vector |
333 newObjectList = buffer; |
333 newObjectList = buffer; |
334 } |
334 } |
335 frameObjects.clear(); |
335 frameObjects.clear(); |
336 } |
336 } |
337 } else if (address.equals("/tuio/3Dcur")) { |
337 } else if (address.equals("/tuio/3Dcur")) { |
338 |
338 |
339 if (command.equals("set")) { |
339 if (command.equals("set")) { |
340 |
340 |
341 long s_id = ((Integer)args[1]).longValue(); |
341 long s_id = ((Integer)args[1]).longValue(); |
342 float xpos = ((Float)args[2]).floatValue(); |
342 float xpos = ((Float)args[2]).floatValue(); |
343 float ypos = ((Float)args[3]).floatValue(); |
343 float ypos = ((Float)args[3]).floatValue(); |
344 float zpos = ((Float)args[4]).floatValue(); |
344 float zpos = ((Float)args[4]).floatValue(); |
345 float xspeed = ((Float)args[5]).floatValue(); |
345 float xspeed = ((Float)args[5]).floatValue(); |
346 float yspeed = ((Float)args[6]).floatValue(); |
346 float yspeed = ((Float)args[6]).floatValue(); |
347 float maccel = ((Float)args[7]).floatValue(); |
347 float maccel = ((Float)args[7]).floatValue(); |
348 |
348 |
349 if (cursorList.get(s_id) == null) { |
349 if (cursorList.get(s_id) == null) { |
350 |
350 |
351 TuioCursor addCursor = new TuioCursor(s_id, -1 ,xpos,ypos,zpos); |
351 TuioCursor addCursor = new TuioCursor(s_id, -1 ,xpos,ypos,zpos); |
352 frameCursors.addElement(addCursor); |
352 frameCursors.addElement(addCursor); |
353 |
353 |
354 } else { |
354 } else { |
355 |
355 |
356 TuioCursor tcur = cursorList.get(s_id); |
356 TuioCursor tcur = cursorList.get(s_id); |
357 if (tcur==null) return; |
357 if (tcur==null) return; |
358 if ((tcur.xpos!=xpos) || (tcur.ypos!=ypos) || (tcur.zpos!=zpos) || (tcur.x_speed!=xspeed) || (tcur.y_speed!=yspeed) || (tcur.motion_accel!=maccel)) { |
358 if ((tcur.xpos!=xpos) || (tcur.ypos!=ypos) || (tcur.zpos!=zpos) || (tcur.x_speed!=xspeed) || (tcur.y_speed!=yspeed) || (tcur.motion_accel!=maccel)) { |
359 |
359 |
360 TuioCursor updateCursor = new TuioCursor(s_id,tcur.getCursorID(),xpos,ypos,zpos); |
360 TuioCursor updateCursor = new TuioCursor(s_id,tcur.getCursorID(),xpos,ypos,zpos); |
361 updateCursor.update(xpos,ypos,zpos,xspeed,yspeed,maccel); |
361 updateCursor.update(xpos,ypos,zpos,xspeed,yspeed,maccel); |
362 frameCursors.addElement(updateCursor); |
362 frameCursors.addElement(updateCursor); |
363 } |
363 } |
364 } |
364 } |
365 |
365 |
366 //System.out.println("set cur " + s_id+" "+xpos+" "+ypos+" "+xspeed+" "+yspeed+" "+maccel); |
366 //System.out.println("set cur " + s_id+" "+xpos+" "+ypos+" "+xspeed+" "+yspeed+" "+maccel); |
367 |
367 |
368 } else if (command.equals("alive")) { |
368 } else if (command.equals("alive")) { |
369 |
369 |
370 newCursorList.clear(); |
370 newCursorList.clear(); |
371 for (int i=1;i<args.length;i++) { |
371 for (int i=1;i<args.length;i++) { |
372 // get the message content |
372 // get the message content |
373 long s_id = ((Integer)args[i]).longValue(); |
373 long s_id = ((Integer)args[i]).longValue(); |
374 newCursorList.addElement(s_id); |
374 newCursorList.addElement(s_id); |
375 // reduce the cursor list to the lost cursors |
375 // reduce the cursor list to the lost cursors |
376 if (aliveCursorList.contains(s_id)) |
376 if (aliveCursorList.contains(s_id)) |
377 aliveCursorList.removeElement(s_id); |
377 aliveCursorList.removeElement(s_id); |
378 } |
378 } |
379 |
379 |
380 // remove the remaining cursors |
380 // remove the remaining cursors |
381 for (int i=0;i<aliveCursorList.size();i++) { |
381 for (int i=0;i<aliveCursorList.size();i++) { |
382 TuioCursor removeCursor = cursorList.get(aliveCursorList.elementAt(i)); |
382 TuioCursor removeCursor = cursorList.get(aliveCursorList.elementAt(i)); |
383 if (removeCursor==null) continue; |
383 if (removeCursor==null) continue; |
384 removeCursor.remove(currentTime); |
384 removeCursor.remove(currentTime); |
385 frameCursors.addElement(removeCursor); |
385 frameCursors.addElement(removeCursor); |
386 } |
386 } |
387 |
387 |
388 } else if (command.equals("fseq")) { |
388 } else if (command.equals("fseq")) { |
389 long fseq = ((Integer)args[1]).longValue(); |
389 long fseq = ((Integer)args[1]).longValue(); |
390 boolean lateFrame = false; |
390 boolean lateFrame = false; |
391 |
391 |
392 if (fseq>0) { |
392 if (fseq>0) { |
393 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
393 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
394 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; |
394 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; |
395 else lateFrame = true; |
395 else lateFrame = true; |
396 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
396 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
397 currentTime = TuioTime.getSessionTime(); |
397 currentTime = TuioTime.getSessionTime(); |
398 } |
398 } |
399 if (!lateFrame) { |
399 if (!lateFrame) { |
400 |
400 |
401 Enumeration<TuioCursor> frameEnum = frameCursors.elements(); |
401 Enumeration<TuioCursor> frameEnum = frameCursors.elements(); |
402 while(frameEnum.hasMoreElements()) { |
402 while(frameEnum.hasMoreElements()) { |
403 TuioCursor tcur = frameEnum.nextElement(); |
403 TuioCursor tcur = frameEnum.nextElement(); |
404 |
404 |
405 switch (tcur.getTuioState()) { |
405 switch (tcur.getTuioState()) { |
406 case TuioCursor.TUIO_REMOVED: |
406 case TuioCursor.TUIO_REMOVED: |
407 |
407 |
408 TuioCursor removeCursor = tcur; |
408 TuioCursor removeCursor = tcur; |
409 removeCursor.remove(currentTime); |
409 removeCursor.remove(currentTime); |
410 |
410 |
411 for (int i=0;i<listenerList.size();i++) { |
411 for (int i=0;i<listenerList.size();i++) { |
412 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
412 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
413 if (listener!=null) listener.removeTuioCursor(removeCursor); |
413 if (listener!=null) listener.removeTuioCursor(removeCursor); |
414 } |
414 } |
415 |
415 |
416 cursorList.remove(removeCursor.getSessionID()); |
416 cursorList.remove(removeCursor.getSessionID()); |
417 |
417 |
418 if (removeCursor.getCursorID()==maxCursorID) { |
418 if (removeCursor.getCursorID()==maxCursorID) { |
419 maxCursorID = -1; |
419 maxCursorID = -1; |
420 if (cursorList.size()>0) { |
420 if (cursorList.size()>0) { |
421 Enumeration<TuioCursor> clist = cursorList.elements(); |
421 Enumeration<TuioCursor> clist = cursorList.elements(); |
422 while (clist.hasMoreElements()) { |
422 while (clist.hasMoreElements()) { |
423 int c_id = clist.nextElement().getCursorID(); |
423 int c_id = clist.nextElement().getCursorID(); |
424 if (c_id>maxCursorID) maxCursorID=c_id; |
424 if (c_id>maxCursorID) maxCursorID=c_id; |
425 } |
425 } |
426 |
426 |
427 Enumeration<TuioCursor> flist = freeCursorList.elements(); |
427 Enumeration<TuioCursor> flist = freeCursorList.elements(); |
428 while (flist.hasMoreElements()) { |
428 while (flist.hasMoreElements()) { |
429 int c_id = flist.nextElement().getCursorID(); |
429 int c_id = flist.nextElement().getCursorID(); |
430 if (c_id>=maxCursorID) freeCursorList.removeElement(c_id); |
430 if (c_id>=maxCursorID) freeCursorList.removeElement(c_id); |
431 } |
431 } |
432 } else freeCursorList.clear(); |
432 } else freeCursorList.clear(); |
433 } else if (removeCursor.getCursorID()<maxCursorID) { |
433 } else if (removeCursor.getCursorID()<maxCursorID) { |
434 freeCursorList.addElement(removeCursor); |
434 freeCursorList.addElement(removeCursor); |
435 } |
435 } |
436 |
436 |
437 break; |
437 break; |
438 |
438 |
439 case TuioCursor.TUIO_ADDED: |
439 case TuioCursor.TUIO_ADDED: |
440 |
440 |
441 int c_id = cursorList.size(); |
441 int c_id = cursorList.size(); |
442 if ((cursorList.size()<=maxCursorID) && (freeCursorList.size()>0)) { |
442 if ((cursorList.size()<=maxCursorID) && (freeCursorList.size()>0)) { |
443 TuioCursor closestCursor = freeCursorList.firstElement(); |
443 TuioCursor closestCursor = freeCursorList.firstElement(); |
444 Enumeration<TuioCursor> testList = freeCursorList.elements(); |
444 Enumeration<TuioCursor> testList = freeCursorList.elements(); |
445 while (testList.hasMoreElements()) { |
445 while (testList.hasMoreElements()) { |
446 TuioCursor testCursor = testList.nextElement(); |
446 TuioCursor testCursor = testList.nextElement(); |
447 if (testCursor.getDistance(tcur)<closestCursor.getDistance(tcur)) closestCursor = testCursor; |
447 if (testCursor.getDistance(tcur)<closestCursor.getDistance(tcur)) closestCursor = testCursor; |
448 } |
448 } |
449 c_id = closestCursor.getCursorID(); |
449 c_id = closestCursor.getCursorID(); |
450 freeCursorList.removeElement(closestCursor); |
450 freeCursorList.removeElement(closestCursor); |
451 } else maxCursorID = c_id; |
451 } else maxCursorID = c_id; |
452 |
452 |
453 TuioCursor addCursor = new TuioCursor(currentTime,tcur.getSessionID(),c_id,tcur.getX(),tcur.getY(),tcur.getZ()); |
453 TuioCursor addCursor = new TuioCursor(currentTime,tcur.getSessionID(),c_id,tcur.getX(),tcur.getY(),tcur.getZ()); |
454 cursorList.put(addCursor.getSessionID(),addCursor); |
454 cursorList.put(addCursor.getSessionID(),addCursor); |
455 |
455 |
456 for (int i=0;i<listenerList.size();i++) { |
456 for (int i=0;i<listenerList.size();i++) { |
457 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
457 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
458 if (listener!=null) listener.addTuioCursor(addCursor); |
458 if (listener!=null) listener.addTuioCursor(addCursor); |
459 } |
459 } |
460 break; |
460 break; |
461 |
461 |
462 default: |
462 default: |
463 |
463 |
464 TuioCursor updateCursor = cursorList.get(tcur.getSessionID()); |
464 TuioCursor updateCursor = cursorList.get(tcur.getSessionID()); |
465 if ( (tcur.getX()!=updateCursor.getX() && tcur.getXSpeed()==0) || (tcur.getY()!=updateCursor.getY() && tcur.getYSpeed()==0) || (tcur.getZ()!=updateCursor.getZ()) ) |
465 if ( (tcur.getX()!=updateCursor.getX() && tcur.getXSpeed()==0) || (tcur.getY()!=updateCursor.getY() && tcur.getYSpeed()==0) || (tcur.getZ()!=updateCursor.getZ()) ) |
466 updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ()); |
466 updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ()); |
467 else |
467 else |
468 updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ(),tcur.getXSpeed(),tcur.getYSpeed(),tcur.getMotionAccel()); |
468 updateCursor.update(currentTime,tcur.getX(),tcur.getY(),tcur.getZ(),tcur.getXSpeed(),tcur.getYSpeed(),tcur.getMotionAccel()); |
469 |
469 |
470 for (int i=0;i<listenerList.size();i++) { |
470 for (int i=0;i<listenerList.size();i++) { |
471 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
471 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
472 if (listener!=null) listener.updateTuioCursor(updateCursor); |
472 if (listener!=null) listener.updateTuioCursor(updateCursor); |
473 } |
473 } |
474 } |
474 } |
475 } |
475 } |
476 |
476 |
477 for (int i=0;i<listenerList.size();i++) { |
477 for (int i=0;i<listenerList.size();i++) { |
478 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
478 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
479 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
479 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
480 } |
480 } |
481 |
481 |
482 Vector<Long> buffer = aliveCursorList; |
482 Vector<Long> buffer = aliveCursorList; |
483 aliveCursorList = newCursorList; |
483 aliveCursorList = newCursorList; |
484 // recycling the vector |
484 // recycling the vector |
485 newCursorList = buffer; |
485 newCursorList = buffer; |
486 } |
486 } |
487 |
487 |
488 frameCursors.clear(); |
488 frameCursors.clear(); |
489 } |
489 } |
490 } else if (address.equals("/tuio/_siP")) { |
490 } else if (address.equals("/tuio/_siP")) { |
491 |
491 |
492 if (command.equals("set")) { |
492 if (command.equals("set")) { |
493 |
493 |
494 long s_id = ((Integer)args[1]).longValue(); |
494 long s_id = ((Integer)args[1]).longValue(); |
495 String msg = args[2].toString(); |
495 String msg = args[2].toString(); |
496 |
496 |
497 if (stringList.get(s_id) == null) { |
497 if (stringList.get(s_id) == null) { |
498 |
498 |
499 TuioString addString = new TuioString(s_id, -1, msg); |
499 TuioString addString = new TuioString(s_id, -1, msg); |
500 frameStrings.addElement(addString); |
500 frameStrings.addElement(addString); |
501 |
501 |
502 } else { |
502 } else { |
503 |
503 |
504 TuioString tstr = stringList.get(s_id); |
504 TuioString tstr = stringList.get(s_id); |
505 if (tstr==null) return; |
505 if (tstr==null) return; |
506 if (!tstr.getMessage().equals(msg)) { |
506 if (!tstr.getMessage().equals(msg)) { |
507 |
507 |
508 TuioString updateString = new TuioString(s_id,tstr.getStringID(),msg); |
508 TuioString updateString = new TuioString(s_id,tstr.getStringID(),msg); |
509 updateString.update(msg); |
509 updateString.update(msg); |
510 frameStrings.addElement(updateString); |
510 frameStrings.addElement(updateString); |
511 } |
511 } |
512 } |
512 } |
513 |
513 |
514 //System.out.println("set cur " + s_id+" "+xpos+" "+ypos+" "+xspeed+" "+yspeed+" "+maccel); |
514 //System.out.println("set cur " + s_id+" "+xpos+" "+ypos+" "+xspeed+" "+yspeed+" "+maccel); |
515 |
515 |
516 } else if (command.equals("alive")) { |
516 } else if (command.equals("alive")) { |
517 |
517 |
518 newStringList.clear(); |
518 newStringList.clear(); |
519 for (int i=1;i<args.length;i++) { |
519 for (int i=1;i<args.length;i++) { |
520 // get the message content |
520 // get the message content |
521 long s_id = ((Integer)args[i]).longValue(); |
521 long s_id = ((Integer)args[i]).longValue(); |
522 newStringList.addElement(s_id); |
522 newStringList.addElement(s_id); |
523 // reduce the cursor list to the lost cursors |
523 // reduce the cursor list to the lost cursors |
524 if (aliveStringList.contains(s_id)) |
524 if (aliveStringList.contains(s_id)) |
525 aliveStringList.removeElement(s_id); |
525 aliveStringList.removeElement(s_id); |
526 } |
526 } |
527 |
527 |
528 // remove the remaining cursors |
528 // remove the remaining cursors |
529 for (int i=0;i<aliveStringList.size();i++) { |
529 for (int i=0;i<aliveStringList.size();i++) { |
530 TuioString removeString = stringList.get(aliveStringList.elementAt(i)); |
530 TuioString removeString = stringList.get(aliveStringList.elementAt(i)); |
531 if (removeString==null) continue; |
531 if (removeString==null) continue; |
532 removeString.remove(currentTime); |
532 removeString.remove(currentTime); |
533 frameStrings.addElement(removeString); |
533 frameStrings.addElement(removeString); |
534 } |
534 } |
535 |
535 |
536 } else if (command.equals("fseq")) { |
536 } else if (command.equals("fseq")) { |
537 long fseq = ((Integer)args[1]).longValue(); |
537 long fseq = ((Integer)args[1]).longValue(); |
538 boolean lateFrame = false; |
538 boolean lateFrame = false; |
539 |
539 |
540 if (fseq>0) { |
540 if (fseq>0) { |
541 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
541 if (fseq>currentFrame) currentTime = TuioTime.getSessionTime(); |
542 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; |
542 if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; |
543 else lateFrame = true; |
543 else lateFrame = true; |
544 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
544 } else if (TuioTime.getSessionTime().subtract(currentTime).getTotalMilliseconds()>100) { |
545 currentTime = TuioTime.getSessionTime(); |
545 currentTime = TuioTime.getSessionTime(); |
546 } |
546 } |
547 if (!lateFrame) { |
547 if (!lateFrame) { |
548 |
548 |
549 Enumeration<TuioString> frameEnum = frameStrings.elements(); |
549 Enumeration<TuioString> frameEnum = frameStrings.elements(); |
550 while(frameEnum.hasMoreElements()) { |
550 while(frameEnum.hasMoreElements()) { |
551 TuioString tstr = frameEnum.nextElement(); |
551 TuioString tstr = frameEnum.nextElement(); |
552 |
552 |
553 switch (tstr.getTuioState()) { |
553 switch (tstr.getTuioState()) { |
554 case TuioString.TUIO_REMOVED: |
554 case TuioString.TUIO_REMOVED: |
555 |
555 |
556 TuioString removeString = tstr; |
556 TuioString removeString = tstr; |
557 removeString.remove(currentTime); |
557 removeString.remove(currentTime); |
558 |
558 |
559 for (int i=0;i<listenerList.size();i++) { |
559 for (int i=0;i<listenerList.size();i++) { |
560 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
560 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
561 if (listener!=null) listener.removeTuioString(removeString); |
561 if (listener!=null) listener.removeTuioString(removeString); |
562 } |
562 } |
563 |
563 |
564 stringList.remove(removeString.getSessionID()); |
564 stringList.remove(removeString.getSessionID()); |
565 |
565 |
566 if (removeString.getStringID()==maxStringID) { |
566 if (removeString.getStringID()==maxStringID) { |
567 maxStringID = -1; |
567 maxStringID = -1; |
568 if (stringList.size()>0) { |
568 if (stringList.size()>0) { |
569 Enumeration<TuioString> slist = stringList.elements(); |
569 Enumeration<TuioString> slist = stringList.elements(); |
570 while (slist.hasMoreElements()) { |
570 while (slist.hasMoreElements()) { |
571 int sl_id = slist.nextElement().getStringID(); |
571 int sl_id = slist.nextElement().getStringID(); |
572 if (sl_id>maxStringID) maxStringID=sl_id; |
572 if (sl_id>maxStringID) maxStringID=sl_id; |
573 } |
573 } |
574 |
574 |
575 Enumeration<TuioString> flist = freeStringList.elements(); |
575 Enumeration<TuioString> flist = freeStringList.elements(); |
576 while (flist.hasMoreElements()) { |
576 while (flist.hasMoreElements()) { |
577 int sl_id = flist.nextElement().getStringID(); |
577 int sl_id = flist.nextElement().getStringID(); |
578 if (sl_id>=maxStringID) freeStringList.removeElement(sl_id); |
578 if (sl_id>=maxStringID) freeStringList.removeElement(sl_id); |
579 } |
579 } |
580 } else freeStringList.clear(); |
580 } else freeStringList.clear(); |
581 } else if (removeString.getStringID()<maxStringID) { |
581 } else if (removeString.getStringID()<maxStringID) { |
582 freeStringList.addElement(removeString); |
582 freeStringList.addElement(removeString); |
583 } |
583 } |
584 |
584 |
585 break; |
585 break; |
586 |
586 |
587 case TuioString.TUIO_ADDED: |
587 case TuioString.TUIO_ADDED: |
588 |
588 |
589 int sl_id = stringList.size(); |
589 int sl_id = stringList.size(); |
590 if ((stringList.size()<=maxStringID) && (freeStringList.size()>0)) { |
590 if ((stringList.size()<=maxStringID) && (freeStringList.size()>0)) { |
591 TuioString closestString = freeStringList.firstElement(); |
591 TuioString closestString = freeStringList.firstElement(); |
592 Enumeration<TuioString> testList = freeStringList.elements(); |
592 Enumeration<TuioString> testList = freeStringList.elements(); |
593 while (testList.hasMoreElements()) { |
593 while (testList.hasMoreElements()) { |
594 TuioString testString = testList.nextElement(); |
594 TuioString testString = testList.nextElement(); |
595 //if (testString.getDistance(tstr)<closestString.getDistance(tstr)) |
595 //if (testString.getDistance(tstr)<closestString.getDistance(tstr)) |
596 closestString = testString; |
596 closestString = testString; |
597 } |
597 } |
598 sl_id = closestString.getStringID(); |
598 sl_id = closestString.getStringID(); |
599 freeStringList.removeElement(closestString); |
599 freeStringList.removeElement(closestString); |
600 } else maxStringID = sl_id; |
600 } else maxStringID = sl_id; |
601 |
601 |
602 TuioString addString = new TuioString(currentTime,tstr.getSessionID(),sl_id,tstr.getMessage()); |
602 TuioString addString = new TuioString(currentTime,tstr.getSessionID(),sl_id,tstr.getMessage()); |
603 stringList.put(addString.getSessionID(),addString); |
603 stringList.put(addString.getSessionID(),addString); |
604 |
604 |
605 for (int i=0;i<listenerList.size();i++) { |
605 for (int i=0;i<listenerList.size();i++) { |
606 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
606 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
607 if (listener!=null) listener.addTuioString(addString); |
607 if (listener!=null) listener.addTuioString(addString); |
608 } |
608 } |
609 break; |
609 break; |
610 |
610 |
611 default: |
611 default: |
612 |
612 |
613 TuioString updateString = stringList.get(tstr.getSessionID()); |
613 TuioString updateString = stringList.get(tstr.getSessionID()); |
614 if ( tstr.getMessage()!=updateString.getMessage() ) |
614 if ( tstr.getMessage()!=updateString.getMessage() ) |
615 updateString.update(currentTime,tstr.getMessage()); |
615 updateString.update(currentTime,tstr.getMessage()); |
616 else |
616 else |
617 updateString.update(currentTime,tstr.getMessage()); |
617 updateString.update(currentTime,tstr.getMessage()); |
618 |
618 |
619 for (int i=0;i<listenerList.size();i++) { |
619 for (int i=0;i<listenerList.size();i++) { |
620 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
620 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
621 if (listener!=null) listener.updateTuioString(updateString); |
621 if (listener!=null) listener.updateTuioString(updateString); |
622 } |
622 } |
623 } |
623 } |
624 } |
624 } |
625 |
625 |
626 for (int i=0;i<listenerList.size();i++) { |
626 for (int i=0;i<listenerList.size();i++) { |
627 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
627 TuioListener listener = (TuioListener)listenerList.elementAt(i); |
628 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
628 if (listener!=null) listener.refresh(new TuioTime(currentTime)); |
629 } |
629 } |
630 |
630 |
631 Vector<Long> buffer = aliveStringList; |
631 Vector<Long> buffer = aliveStringList; |
632 aliveStringList = newStringList; |
632 aliveStringList = newStringList; |
633 // recycling the vector |
633 // recycling the vector |
634 newStringList = buffer; |
634 newStringList = buffer; |
635 } |
635 } |
636 |
636 |
637 frameStrings.clear(); |
637 frameStrings.clear(); |
638 } |
638 } |
639 } |
639 } |
640 |
640 |
641 |
641 |
642 } |
642 } |
643 } |
643 } |