}
@Override
protected void readSocket() throws Exception
{
FlexBuffer flexBuffer = null;
DatagramPacket datagramPacket = null;
if (socket != null)
{
// TODO allow buffer size to be specified.
final byte[] buf = new byte[8192];
datagramPacket = new DatagramPacket( buf, buf.length );
flexBuffer = new FlexBuffer( datagramPacket.getData() );
}
try
{
while (isStarted())
{
if (readQueue != null)
{
datagramPacket = readQueue.take();
if (datagramPacket == UdpListener.READ_QUEUE_SENTINEL)
break;
flexBuffer = new FlexBuffer( datagramPacket.getData() );
}
else {
socket.receive( datagramPacket );
flexBuffer.setIndex( 0 );
flexBuffer.setLength( datagramPacket.getLength() );
}
Who sender = getWho( datagramPacket.getAddress(), datagramPacket.getPort() );
session.sessionPacket( sender, flexBuffer );