front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCBundle.java
changeset 0 6fefd4afe506
child 9 0f44b7360c8d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCBundle.java	Fri Mar 09 14:52:11 2012 +0100
@@ -0,0 +1,140 @@
+
+/**
+ * @author cramakrishnan
+ *
+ * Copyright (C) 2003, C. Ramakrishnan / Illposed Software
+ * All rights reserved.
+ * 
+ * See license.txt (or license.rtf) for license information.
+ * 
+ *
+ * OscBundle represents a collection of OscPackets.
+ *
+ * Use this when you want to send a bunch of OscPackets
+ * in one go.
+ *
+ * Internally, I use Vector to maintain jdk1.1 compatability
+ */
+
+package com.illposed.osc;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.GregorianCalendar;
+import java.util.Vector;
+
+import com.illposed.osc.utility.*;
+
+public class OSCBundle extends OSCPacket {
+
+	protected Date timestamp;
+	//	protected OSCPacket[] packets;
+	protected Vector<OSCPacket> packets;
+	public static final BigInteger SECONDS_FROM_1900_to_1970 =
+		new BigInteger("2208988800");
+	// 17 leap years
+
+	/**
+	 * Create a new OSCBundle, with a timestamp of now.
+	 * You can add packets to the bundle with addPacket()
+	 */
+	public OSCBundle() {
+		this(null, GregorianCalendar.getInstance().getTime());
+	}
+	
+	/**
+	 * Create an OSCBundle with the specified timestamp
+	 * @param timestamp
+	 */
+	public OSCBundle(Date timestamp) {
+		this(null, timestamp);
+	}
+
+	/**
+	 * @param newPackets Array of OSCPackets to initialize this object with
+	 */
+	public OSCBundle(OSCPacket[] newPackets) {
+		this(newPackets, GregorianCalendar.getInstance().getTime());
+	}
+
+	/**
+	 * @param newPackets OscPacket[]
+	 * @param time java.lang.Time
+	 */
+	public OSCBundle(OSCPacket[] newPackets, Date newTimestamp) {
+		super();
+		if (null != newPackets) {
+			packets = new Vector<OSCPacket>(newPackets.length);
+			for (int i = 0; i < newPackets.length; i++) {
+				packets.add(newPackets[i]);
+			}
+		} else
+			packets = new Vector<OSCPacket>();
+		timestamp = newTimestamp;
+		init();
+	}
+	
+	/**
+	 * Return the timestamp for this bundle
+	 * @return a Date
+	 */
+	public Date getTimestamp() {
+		return timestamp;
+	}
+	
+	/**
+	 * Set the timestamp for this bundle
+	 * @param timestamp
+	 */
+	public void setTimestamp(Date timestamp) {
+		this.timestamp = timestamp;
+	}
+	
+	/**
+	 * Add a packet to the list of packets in this bundle
+	 * @param packet
+	 */
+	public void addPacket(OSCPacket packet) {
+		packets.add(packet);
+	}
+	
+	/**
+	 * Get the packets contained in this bundle
+	 * @return an array of packets
+	 */
+	public OSCPacket[] getPackets() {
+		OSCPacket[] packetArray = new OSCPacket[packets.size()];
+		packets.toArray(packetArray);
+		return packetArray;
+	}
+
+	protected void computeTimeTagByteArray(OSCJavaToByteArrayConverter stream) {
+		long millisecs = timestamp.getTime();
+		long secsSince1970 = (long) (millisecs / 1000);
+		long secs = secsSince1970 + SECONDS_FROM_1900_to_1970.longValue();
+		long picosecs = (long) (millisecs - (secsSince1970 * 1000)) * 1000;
+		
+		stream.write((int) secs);
+		stream.write((int) picosecs);
+
+	}
+
+	/**
+	 * @param stream OscPacketByteArrayConverter
+	 */
+	protected void computeByteArray(OSCJavaToByteArrayConverter stream) {
+		stream.write("#bundle");
+		computeTimeTagByteArray(stream);
+		Enumeration enm = packets.elements();
+		OSCPacket nextElement;
+		byte[] packetBytes;
+		while (enm.hasMoreElements()) {
+			nextElement = (OSCPacket) enm.nextElement();
+			packetBytes = nextElement.getByteArray();
+			stream.write(packetBytes.length);
+			stream.write(packetBytes);
+		}
+		byteArray = stream.toByteArray();
+	}
+
+}
\ No newline at end of file