front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCBundle.java
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 0 6fefd4afe506
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
/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
 * @author cramakrishnan
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
 * Copyright (C) 2003, C. Ramakrishnan / Illposed Software
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
 * All rights reserved.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
 * See license.txt (or license.rtf) for license information.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
 * OscBundle represents a collection of OscPackets.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
 * Use this when you want to send a bunch of OscPackets
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
 * in one go.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
 * Internally, I use Vector to maintain jdk1.1 compatability
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
package com.illposed.osc;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
import java.math.BigInteger;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
import java.util.Date;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
import java.util.Enumeration;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
import java.util.GregorianCalendar;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
import java.util.Vector;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
import com.illposed.osc.utility.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
public class OSCBundle extends OSCPacket {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
	protected Date timestamp;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
	//	protected OSCPacket[] packets;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
	protected Vector<OSCPacket> packets;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
	public static final BigInteger SECONDS_FROM_1900_to_1970 =
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
		new BigInteger("2208988800");
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
	// 17 leap years
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
	 * Create a new OSCBundle, with a timestamp of now.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
	 * You can add packets to the bundle with addPacket()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
	public OSCBundle() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
		this(null, GregorianCalendar.getInstance().getTime());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
	 * Create an OSCBundle with the specified timestamp
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
	 * @param timestamp
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
	public OSCBundle(Date timestamp) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
		this(null, timestamp);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
	 * @param newPackets Array of OSCPackets to initialize this object with
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
	public OSCBundle(OSCPacket[] newPackets) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
		this(newPackets, GregorianCalendar.getInstance().getTime());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    61
	 * @param newPackets OscPacket[]
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
	 * @param time java.lang.Time
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
	public OSCBundle(OSCPacket[] newPackets, Date newTimestamp) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
		super();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
		if (null != newPackets) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
			packets = new Vector<OSCPacket>(newPackets.length);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
			for (int i = 0; i < newPackets.length; i++) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
				packets.add(newPackets[i]);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
			}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
		} else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
			packets = new Vector<OSCPacket>();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
		timestamp = newTimestamp;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
		init();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    78
	 * Return the timestamp for this bundle
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
	 * @return a Date
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
	public Date getTimestamp() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
		return timestamp;
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
	 * Set the timestamp for this bundle
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
	 * @param timestamp
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
	public void setTimestamp(Date timestamp) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
		this.timestamp = timestamp;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
	 * Add a packet to the list of packets in this bundle
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
	 * @param packet
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
	public void addPacket(OSCPacket packet) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
		packets.add(packet);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
	 * Get the packets contained in this bundle
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
	 * @return an array of packets
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
	public OSCPacket[] getPackets() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
		OSCPacket[] packetArray = new OSCPacket[packets.size()];
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
		packets.toArray(packetArray);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
		return packetArray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
	protected void computeTimeTagByteArray(OSCJavaToByteArrayConverter stream) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
		long millisecs = timestamp.getTime();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
		long secsSince1970 = (long) (millisecs / 1000);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
		long secs = secsSince1970 + SECONDS_FROM_1900_to_1970.longValue();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   115
		long picosecs = (long) (millisecs - (secsSince1970 * 1000)) * 1000;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   116
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   117
		stream.write((int) secs);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   118
		stream.write((int) picosecs);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   122
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
	 * @param stream OscPacketByteArrayConverter
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
	protected void computeByteArray(OSCJavaToByteArrayConverter stream) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
		stream.write("#bundle");
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
		computeTimeTagByteArray(stream);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
		Enumeration enm = packets.elements();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
		OSCPacket nextElement;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
		byte[] packetBytes;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
		while (enm.hasMoreElements()) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
			nextElement = (OSCPacket) enm.nextElement();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
			packetBytes = nextElement.getByteArray();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
			stream.write(packetBytes.length);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
			stream.write(packetBytes);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
		byteArray = stream.toByteArray();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
}