naga.packetwriter
Class RegularPacketWriter

java.lang.Object
  extended by naga.packetwriter.RegularPacketWriter
All Implemented Interfaces:
PacketWriter

public class RegularPacketWriter
extends java.lang.Object
implements PacketWriter

Writes packet of the format

[header 1-4 bytes] => content size
[content] => 0-255/0-65535/0-16777215/0-2147483646

Note that the maximum size for 4 bytes is a signed 32 bit int, not unsigned.

The packet writer will not validate outgoing packets, so make sure that the packet content size will fit in the header. I.e. make sure that if you have a 1 byte header, you do not send packets larger than 255 bytes, if two bytes, larger than 65535 and so on.

Author:
Christoffer Lerno

Constructor Summary
RegularPacketWriter(int headerSize, boolean bigEndian)
          Creates a regular packet writer with the given header size.
 
Method Summary
 java.nio.ByteBuffer getBuffer()
          The current byte buffer to write to the socket.
 boolean isEmpty()
          Determines if the packet writer has more data to write.
 void setPacket(byte[] bytes)
          Set the next packet to write.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RegularPacketWriter

public RegularPacketWriter(int headerSize,
                           boolean bigEndian)
Creates a regular packet writer with the given header size.

Parameters:
headerSize - the header size, 1 - 4 bytes.
bigEndian - big endian (largest byte first) or little endian (smallest byte first)
Method Detail

getBuffer

public java.nio.ByteBuffer getBuffer()
Description copied from interface: PacketWriter
The current byte buffer to write to the socket.

Note that the socket does no rewinding or similar of the buffer, the only way it interacts with the buffer is by calling SocketChannel.write(ByteBuffer), so the implementing class needs to make sure that the buffer is in the right state.

This code will not be called unless PacketWriter.isEmpty() returns false.

Specified by:
getBuffer in interface PacketWriter
Returns:
the byte buffer to send data from to the socket.

isEmpty

public boolean isEmpty()
Description copied from interface: PacketWriter
Determines if the packet writer has more data to write.

Classes will never invoke PacketWriter.setPacket(byte[]) unless isEmpty returns true.

Specified by:
isEmpty in interface PacketWriter
Returns:
true if everything buffered in the writer is writen, false otherwise.

setPacket

public void setPacket(byte[] bytes)
Description copied from interface: PacketWriter
Set the next packet to write.

Specified by:
setPacket in interface PacketWriter
Parameters:
bytes - an array of bytes representing the next packet.