/* * Copyright (C) 2003-2014, 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; import java.nio.charset.Charset; /** * 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> */ abstract class AbstractOSCPacket implements OSCPacket { /** Used to encode message addresses and string parameters. */ private Charset charset; private byte[] byteArray; public AbstractOSCPacket() { this.charset = Charset.defaultCharset(); this.byteArray = null; } @Override public Charset getCharset() { return charset; } @Override public void setCharset(Charset charset) { this.charset = charset; } /** * Generate a representation of this packet conforming to the * the OSC byte stream specification. Used Internally. */ private byte[] computeByteArray() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.setCharset(charset); return computeByteArray(stream); } /** * Produces a byte array representation of this packet. * @param stream where to write the arguments to * @return the OSC specification conform byte array representation * of this packet */ abstract byte[] computeByteArray(OSCJavaToByteArrayConverter stream); @Override public byte[] getByteArray() { if (byteArray == null) { byteArray = computeByteArray(); } return byteArray; } protected void contentChanged() { byteArray = null; } /** * Run any post construction initialization. (By default, do nothing.) */ protected void init() { } }