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