front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCBundle.java
author bastiena
Fri, 09 Mar 2012 14:52:11 +0100
changeset 0 6fefd4afe506
child 9 0f44b7360c8d
permissions -rw-r--r--
First Import
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
}