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