front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCBundle.java
author bastiena
Thu, 22 Mar 2012 18:15:53 +0100
changeset 9 0f44b7360c8d
parent 0 6fefd4afe506
child 10 925b7ee746e3
permissions -rw-r--r--
Installer updated files charset set to UTF-8 without tabs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
     1
0
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
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    30
    protected Date timestamp;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    31
    //    protected OSCPacket[] packets;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    32
    protected Vector<OSCPacket> packets;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    33
    public static final BigInteger SECONDS_FROM_1900_to_1970 =
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    34
        new BigInteger("2208988800");
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    35
    // 17 leap years
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    37
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    38
     * Create a new OSCBundle, with a timestamp of now.
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    39
     * You can add packets to the bundle with addPacket()
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    40
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    41
    public OSCBundle() {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    42
        this(null, GregorianCalendar.getInstance().getTime());
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    43
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    44
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    45
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    46
     * Create an OSCBundle with the specified timestamp
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    47
     * @param timestamp
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    48
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    49
    public OSCBundle(Date timestamp) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    50
        this(null, timestamp);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    51
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    53
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    54
     * @param newPackets Array of OSCPackets to initialize this object with
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    55
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    56
    public OSCBundle(OSCPacket[] newPackets) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    57
        this(newPackets, GregorianCalendar.getInstance().getTime());
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    58
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    60
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    61
     * @param newPackets OscPacket[]
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    62
     * @param time java.lang.Time
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    63
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    64
    public OSCBundle(OSCPacket[] newPackets, Date newTimestamp) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    65
        super();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    66
        if (null != newPackets) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    67
            packets = new Vector<OSCPacket>(newPackets.length);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    68
            for (int i = 0; i < newPackets.length; i++) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    69
                packets.add(newPackets[i]);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    70
            }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    71
        } else
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    72
            packets = new Vector<OSCPacket>();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    73
        timestamp = newTimestamp;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    74
        init();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    75
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    76
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    77
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    78
     * Return the timestamp for this bundle
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    79
     * @return a Date
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    80
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    81
    public Date getTimestamp() {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    82
        return timestamp;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    83
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    84
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    85
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    86
     * Set the timestamp for this bundle
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    87
     * @param timestamp
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    88
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    89
    public void setTimestamp(Date timestamp) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    90
        this.timestamp = timestamp;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    91
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    92
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    93
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    94
     * Add a packet to the list of packets in this bundle
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    95
     * @param packet
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    96
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    97
    public void addPacket(OSCPacket packet) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    98
        packets.add(packet);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    99
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   100
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   101
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   102
     * Get the packets contained in this bundle
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   103
     * @return an array of packets
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   104
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   105
    public OSCPacket[] getPackets() {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   106
        OSCPacket[] packetArray = new OSCPacket[packets.size()];
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   107
        packets.toArray(packetArray);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   108
        return packetArray;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   109
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   111
    protected void computeTimeTagByteArray(OSCJavaToByteArrayConverter stream) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   112
        long millisecs = timestamp.getTime();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   113
        long secsSince1970 = (long) (millisecs / 1000);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   114
        long secs = secsSince1970 + SECONDS_FROM_1900_to_1970.longValue();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   115
        long picosecs = (long) (millisecs - (secsSince1970 * 1000)) * 1000;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   116
        
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   117
        stream.write((int) secs);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   118
        stream.write((int) picosecs);
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   120
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   122
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   123
     * @param stream OscPacketByteArrayConverter
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   124
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   125
    protected void computeByteArray(OSCJavaToByteArrayConverter stream) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   126
        stream.write("#bundle");
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   127
        computeTimeTagByteArray(stream);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   128
        Enumeration enm = packets.elements();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   129
        OSCPacket nextElement;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   130
        byte[] packetBytes;
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   131
        while (enm.hasMoreElements()) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   132
            nextElement = (OSCPacket) enm.nextElement();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   133
            packetBytes = nextElement.getByteArray();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   134
            stream.write(packetBytes.length);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   135
            stream.write(packetBytes);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   136
        }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   137
        byteArray = stream.toByteArray();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
   138
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
}