/*
* Copyright (C) 2003-2006, C. Ramakrishnan / Illposed Software.
* All rights reserved.
*
* This code is licensed under the BSD 3-Clause license.
* See file LICENSE (or LICENSE.html) for more information.
*/
package com.illposed.osc;
import com.illposed.osc.utility.OSCJavaToByteArrayConverter;
/**
* OSCPacket is the abstract superclass for the various
* kinds of OSC Messages.
*
* The actual packets are:
* <ul>
* <li>{@link OSCMessage}: simple OSC messages
* <li>{@link OSCBundle}: OSC messages with timestamps
* and/or made up of multiple messages
* </ul>
*
* This implementation is based on
* <a href="http://www.emergent.de/Goodies/">Markus Gaelli</a> and
* Iannis Zannos' OSC implementation in Squeak Smalltalk.
*/
public abstract class OSCPacket {
private boolean isByteArrayComputed;
private byte[] byteArray;
/**
* Default constructor for the abstract class
*/
public OSCPacket() {
}
/**
* Generate a representation of this packet conforming to the
* the OSC byte stream specification. Used Internally.
*/
protected byte[] computeByteArray() {
OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter();
return computeByteArray(stream);
}
/**
* Subclasses should implement this method to product a byte array
* formatted according to the OSC specification.
* @param stream OscPacketByteArrayConverter
*/
protected abstract byte[] computeByteArray(OSCJavaToByteArrayConverter stream);
/**
* Return the OSC byte stream for this packet.
* @return byte[]
*/
public byte[] getByteArray() {
if (!isByteArrayComputed) {
byteArray = computeByteArray();
}
return byteArray;
}
/**
* Run any post construction initialization. (By default, do nothing.)
*/
protected void init() {
}
}