1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-08 08:23:11 +00:00

Change-Id: Ie09760fc3cc7b8d2cae93aa433e1e2cf684c8ae3

This commit is contained in:
rogiel
2011-04-30 07:54:49 -03:00
parent f454e3c35a
commit 8984654ed5
12 changed files with 237 additions and 189 deletions

View File

@@ -0,0 +1,38 @@
package com.l2jserver.game.net.codec;
import java.nio.ByteOrder;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.FrameDecoder;
public class Lineage2FrameDecoder extends FrameDecoder {
private static final int HEADER_SIZE = 2;
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer oldBuffer) throws Exception {
if (oldBuffer.readableBytes() < 2)
return null;
ChannelBuffer buffer = ChannelBuffers.wrappedBuffer(oldBuffer
.toByteBuffer().order(ByteOrder.LITTLE_ENDIAN));
buffer.markReaderIndex();
final int pending = buffer.readUnsignedShort() - HEADER_SIZE;
if (pending == 0) {
return null;
}
if (buffer.readableBytes() < pending) {
buffer.resetReaderIndex();
return null;
}
final ChannelBuffer b = buffer.copy(buffer.readerIndex(), pending);
oldBuffer.skipBytes(pending + HEADER_SIZE);
return ChannelBuffers.wrappedBuffer(b.toByteBuffer().order(
ByteOrder.LITTLE_ENDIAN));
}
}