package mgr;
import java.util.*;
import java.io.*;
class Message extends Object implements Codes
{
protected Header header;
protected Vector items;
protected int itemsRead;
public Message() //create an empty Messasge to be filled later
{
items = new Vector();
header = new Header();
}// Message()
public Message(int msgCode, int error, int flags) //used by server
{
items = new Vector();
header = new Header();
header.msgCode(msgCode);
header.errCode(error);
header.headerFlags(flags);
}// Message(int msgCode, int error, int flags)
//reconstituting constructor
public Message( DataInputStream buf) throws IOException
{
items = new Vector();
header = new Header(buf); //reconstitute header
try
{
for (;;) //until EOF exception is thrown
{
Item temp = new Item(buf); //reconstitute next Item
items.addElement(temp);
}// for
}//try
catch (IOException exception)
{
if (exception instanceof EOFException) //OK; stream end reached
return;
throw exception; //an unexpected exception
}//catch
}// Message( DataInputStream buf) throws IOException
public void addItem(int itemCode) //pseudo default argument
{
addItem(itemCode, TYPE_NONE, null);
}//addItem(int itemCode)
public void addItem( int itemCode, int itemType, Object data)
{
addItem(new Item(itemCode, itemType, data);
}addItem( int itemCode, int itemType, Object data)
//...more overloaded addItem() versions
public void addItem(Item dataItem) //actual insertion done here
{
items.addElement(dataItem);
int currDataSize = header.dataSize();
header.dataSize(currDataSize + dataItem.itemSize() );
}//addItem(Item dataItem)
public Item readNextItem()
{
if (items.size() < itemsRead)
{
itemRead = 0; //rewind
return null;
}//if
return (Item) items.elementAt(itemsRead++);
}//readNextItem
public void compose (int msgCode, byte [] senderContext,
int timeout, int flags, int errCode, int format)
{...}
public byte [] serialize ()
{
//create required output streams
ByteArrayOutputStream outbuf = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outbuf);
//Header
header.setCrc();
header.serialize(out);
//Items
Enumeration i = items.elements();
while (i.hasMoreElements())
{
Item dataItem = (Item) i.nextElement();
dataItem.serilalize(out);
}//while
return outbuf.toByteArray();
}//serialize
boolean isHeaderValid()
{...}
}//Message
//End of file