/**
 * @author cramakrishnan
 *
 * Copyright (C) 2003, C. Ramakrishnan / Illposed Software
 * All rights reserved.
 * 
 * See license.txt (or license.rtf) for license information.
 * 
 * 
 * OscPacket is the abstract superclass for the various
 * kinds of OSC Messages. Its direct subclasses are:
 *  OscMessage, OscBundle
 *
 * Subclasses need to know how to produce a byte array
 * in the format specified by the OSC spec (or SuperCollider
 * documentation, as the case may be).
 *
 * This implementation is based on Markus Gaelli and
 * Iannis Zannos' OSC implementation in Squeak:
 * http://www.emergent.de/Goodies/
 */

package com.illposed.osc;

import com.illposed.osc.utility.*;

public abstract class OSCPacket {

    protected byte[] byteArray;

    public OSCPacket() {
        super();
    }

    protected void computeByteArray() {
        OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter();
        computeByteArray(stream);
    }

    /**
     * @param stream OscPacketByteArrayConverter
     *
     * Subclasses should implement this method to product a byte array
     * formatted according to the OSC/SuperCollider specification.
     */
    protected abstract void computeByteArray(OSCJavaToByteArrayConverter stream);

    /**
     * @return byte[]
     */
    public byte[] getByteArray() {
        computeByteArray();
        return byteArray;
    }

    protected void init() {
        
    }

}