25 |
25 |
26 import com.illposed.osc.utility.*; |
26 import com.illposed.osc.utility.*; |
27 |
27 |
28 public class OSCBundle extends OSCPacket { |
28 public class OSCBundle extends OSCPacket { |
29 |
29 |
30 protected Date timestamp; |
30 protected Date timestamp; |
31 // protected OSCPacket[] packets; |
31 // protected OSCPacket[] packets; |
32 protected Vector<OSCPacket> packets; |
32 protected Vector<OSCPacket> packets; |
33 public static final BigInteger SECONDS_FROM_1900_to_1970 = |
33 public static final BigInteger SECONDS_FROM_1900_to_1970 = |
34 new BigInteger("2208988800"); |
34 new BigInteger("2208988800"); |
35 // 17 leap years |
35 // 17 leap years |
36 |
36 |
37 /** |
37 /** |
38 * Create a new OSCBundle, with a timestamp of now. |
38 * Create a new OSCBundle, with a timestamp of now. |
39 * You can add packets to the bundle with addPacket() |
39 * You can add packets to the bundle with addPacket() |
40 */ |
40 */ |
41 public OSCBundle() { |
41 public OSCBundle() { |
42 this(null, GregorianCalendar.getInstance().getTime()); |
42 this(null, GregorianCalendar.getInstance().getTime()); |
43 } |
43 } |
44 |
44 |
45 /** |
45 /** |
46 * Create an OSCBundle with the specified timestamp |
46 * Create an OSCBundle with the specified timestamp |
47 * @param timestamp |
47 * @param timestamp |
48 */ |
48 */ |
49 public OSCBundle(Date timestamp) { |
49 public OSCBundle(Date timestamp) { |
50 this(null, timestamp); |
50 this(null, timestamp); |
51 } |
51 } |
52 |
52 |
53 /** |
53 /** |
54 * @param newPackets Array of OSCPackets to initialize this object with |
54 * @param newPackets Array of OSCPackets to initialize this object with |
55 */ |
55 */ |
56 public OSCBundle(OSCPacket[] newPackets) { |
56 public OSCBundle(OSCPacket[] newPackets) { |
57 this(newPackets, GregorianCalendar.getInstance().getTime()); |
57 this(newPackets, GregorianCalendar.getInstance().getTime()); |
58 } |
58 } |
59 |
59 |
60 /** |
60 /** |
61 * @param newPackets OscPacket[] |
61 * @param newPackets OscPacket[] |
62 * @param time java.lang.Time |
62 * @param time java.lang.Time |
63 */ |
63 */ |
64 public OSCBundle(OSCPacket[] newPackets, Date newTimestamp) { |
64 public OSCBundle(OSCPacket[] newPackets, Date newTimestamp) { |
65 super(); |
65 super(); |
66 if (null != newPackets) { |
66 if (null != newPackets) { |
67 packets = new Vector<OSCPacket>(newPackets.length); |
67 packets = new Vector<OSCPacket>(newPackets.length); |
68 for (int i = 0; i < newPackets.length; i++) { |
68 for (int i = 0; i < newPackets.length; i++) { |
69 packets.add(newPackets[i]); |
69 packets.add(newPackets[i]); |
70 } |
70 } |
71 } else |
71 } else |
72 packets = new Vector<OSCPacket>(); |
72 packets = new Vector<OSCPacket>(); |
73 timestamp = newTimestamp; |
73 timestamp = newTimestamp; |
74 init(); |
74 init(); |
75 } |
75 } |
76 |
76 |
77 /** |
77 /** |
78 * Return the timestamp for this bundle |
78 * Return the timestamp for this bundle |
79 * @return a Date |
79 * @return a Date |
80 */ |
80 */ |
81 public Date getTimestamp() { |
81 public Date getTimestamp() { |
82 return timestamp; |
82 return timestamp; |
83 } |
83 } |
84 |
84 |
85 /** |
85 /** |
86 * Set the timestamp for this bundle |
86 * Set the timestamp for this bundle |
87 * @param timestamp |
87 * @param timestamp |
88 */ |
88 */ |
89 public void setTimestamp(Date timestamp) { |
89 public void setTimestamp(Date timestamp) { |
90 this.timestamp = timestamp; |
90 this.timestamp = timestamp; |
91 } |
91 } |
92 |
92 |
93 /** |
93 /** |
94 * Add a packet to the list of packets in this bundle |
94 * Add a packet to the list of packets in this bundle |
95 * @param packet |
95 * @param packet |
96 */ |
96 */ |
97 public void addPacket(OSCPacket packet) { |
97 public void addPacket(OSCPacket packet) { |
98 packets.add(packet); |
98 packets.add(packet); |
99 } |
99 } |
100 |
100 |
101 /** |
101 /** |
102 * Get the packets contained in this bundle |
102 * Get the packets contained in this bundle |
103 * @return an array of packets |
103 * @return an array of packets |
104 */ |
104 */ |
105 public OSCPacket[] getPackets() { |
105 public OSCPacket[] getPackets() { |
106 OSCPacket[] packetArray = new OSCPacket[packets.size()]; |
106 OSCPacket[] packetArray = new OSCPacket[packets.size()]; |
107 packets.toArray(packetArray); |
107 packets.toArray(packetArray); |
108 return packetArray; |
108 return packetArray; |
109 } |
109 } |
110 |
110 |
111 protected void computeTimeTagByteArray(OSCJavaToByteArrayConverter stream) { |
111 protected void computeTimeTagByteArray(OSCJavaToByteArrayConverter stream) { |
112 long millisecs = timestamp.getTime(); |
112 long millisecs = timestamp.getTime(); |
113 long secsSince1970 = (long) (millisecs / 1000); |
113 long secsSince1970 = (long) (millisecs / 1000); |
114 long secs = secsSince1970 + SECONDS_FROM_1900_to_1970.longValue(); |
114 long secs = secsSince1970 + SECONDS_FROM_1900_to_1970.longValue(); |
115 long picosecs = (long) (millisecs - (secsSince1970 * 1000)) * 1000; |
115 long picosecs = (long) (millisecs - (secsSince1970 * 1000)) * 1000; |
116 |
116 |
117 stream.write((int) secs); |
117 stream.write((int) secs); |
118 stream.write((int) picosecs); |
118 stream.write((int) picosecs); |
119 |
119 |
120 } |
120 } |
121 |
121 |
122 /** |
122 /** |
123 * @param stream OscPacketByteArrayConverter |
123 * @param stream OscPacketByteArrayConverter |
124 */ |
124 */ |
125 protected void computeByteArray(OSCJavaToByteArrayConverter stream) { |
125 protected void computeByteArray(OSCJavaToByteArrayConverter stream) { |
126 stream.write("#bundle"); |
126 stream.write("#bundle"); |
127 computeTimeTagByteArray(stream); |
127 computeTimeTagByteArray(stream); |
128 Enumeration enm = packets.elements(); |
128 Enumeration enm = packets.elements(); |
129 OSCPacket nextElement; |
129 OSCPacket nextElement; |
130 byte[] packetBytes; |
130 byte[] packetBytes; |
131 while (enm.hasMoreElements()) { |
131 while (enm.hasMoreElements()) { |
132 nextElement = (OSCPacket) enm.nextElement(); |
132 nextElement = (OSCPacket) enm.nextElement(); |
133 packetBytes = nextElement.getByteArray(); |
133 packetBytes = nextElement.getByteArray(); |
134 stream.write(packetBytes.length); |
134 stream.write(packetBytes.length); |
135 stream.write(packetBytes); |
135 stream.write(packetBytes); |
136 } |
136 } |
137 byteArray = stream.toByteArray(); |
137 byteArray = stream.toByteArray(); |
138 } |
138 } |
139 |
139 |
140 } |
140 } |