On 7/26/07, Germán Borbolla Flores <[EMAIL PROTECTED]> wrote:
Hi Trustin,
I've just read the tutorial and I don't understand how to correctly
transform a Write request.
I have the following filterWrite implementation:
public void filterWrite(NextFilter nextFilter, IoSession session,
WriteRequest writeRequest) throws Exception
{
Object message = writeRequest.getMessage();
if (message instanceof ByteBuffer)
{
nextFilter.filterWrite(session, writeRequest);
}
else
{
if (message instanceof Byte)
{
ByteBuffer outBuffer = ByteBuffer.allocate(1);
outBuffer.put((Byte)message);
outBuffer.flip();
nextFilter.filterWrite(session, new
WriteRequest(outBuffer, writeRequest.getFuture(),
writeRequest.getDestination()));
}
else if (message instanceof Integer)
{
ByteBuffer outBuffer = ByteBuffer.allocate(4);
outBuffer.putInt((Integer)message);
outBuffer.flip();
nextFilter.filterWrite(session, new
WriteRequest(outBuffer, writeRequest.getFuture(),
writeRequest.getDestination()));
}
else if (message instanceof Long)
{
ByteBuffer outBuffer = ByteBuffer.allocate(8);
outBuffer.putLong((Long)message);
outBuffer.flip();
nextFilter.filterWrite(session, new
WriteRequest(outBuffer, writeRequest.getFuture(),
writeRequest.getDestination()));
}
else if (message instanceof byte[])
{
byte[] byteArray = (byte[])message;
ByteBuffer outBuffer = ByteBuffer.allocate(4 +
byteArray.length);
outBuffer.putInt(byteArray.length);
outBuffer.put(byteArray);
outBuffer.flip();
nextFilter.filterWrite(session, new
WriteRequest(outBuffer, writeRequest.getFuture(),
writeRequest.getDestination()));
}
}
}
Can you give me some pointers of how the messageSent should look like.
You will have to create a new ByteBuffer subtype:
private static class MyByteBuffer extends ByteBufferProxy {
private final Object value;
private ByteByteBuffer(Object value, ByteBuffer encodedValue) {
super(encodedValue);
}
public Object getValue() { return value; }
}
now in your messageSent implementation:
public void messageSent(NextFilter nextFilter, IoSession session, Object msg) {
if (msg instanceof MyByteBuffer) {
nextFilter.messageSent(session, ((MyByteBuffer) msg).getValue());
} else {
nextFilter.messageSent(session, msg);
}
}
You also need to pass a new MyByteBuffer in filterWrite:
nextFilter.filterWrite(session, new WriteRequest(new MyBuffer(message,
outBuffer), ...);
HTH,
Trustin
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6