From cbdc82bd444c722be70c5140e2bd4756d7f9a0fc Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 25 Mar 2018 19:31:14 +0300 Subject: [PATCH] base packet --- src/main/java/mc/core/netty/BasePacket.java | 15 +++++++ src/main/java/mc/core/netty/NettyServer.java | 4 +- .../java/mc/core/netty/PacketDecoder.java | 41 +++++++++++++++++++ .../java/mc/core/netty/PacketHandler.java | 19 +++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/main/java/mc/core/netty/BasePacket.java create mode 100644 src/main/java/mc/core/netty/PacketDecoder.java create mode 100644 src/main/java/mc/core/netty/PacketHandler.java diff --git a/src/main/java/mc/core/netty/BasePacket.java b/src/main/java/mc/core/netty/BasePacket.java new file mode 100644 index 0000000..0c258c6 --- /dev/null +++ b/src/main/java/mc/core/netty/BasePacket.java @@ -0,0 +1,15 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core.netty; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +class BasePacket { + private final int length; + private final int id; +} diff --git a/src/main/java/mc/core/netty/NettyServer.java b/src/main/java/mc/core/netty/NettyServer.java index cc3f334..1681c70 100644 --- a/src/main/java/mc/core/netty/NettyServer.java +++ b/src/main/java/mc/core/netty/NettyServer.java @@ -22,7 +22,9 @@ public class NettyServer implements Server { @Override protected void initChannel(SocketChannel socketChannel) { socketChannel.pipeline().addLast( - new LoggingHandler() + new LoggingHandler(), + new PacketDecoder(), + new PacketHandler() ); } }; diff --git a/src/main/java/mc/core/netty/PacketDecoder.java b/src/main/java/mc/core/netty/PacketDecoder.java new file mode 100644 index 0000000..5a09dd8 --- /dev/null +++ b/src/main/java/mc/core/netty/PacketDecoder.java @@ -0,0 +1,41 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ReplayingDecoder; + +import java.util.List; + +public class PacketDecoder extends ReplayingDecoder { + private int readVarInt(ByteBuf byteBuf) throws Exception { + int result = 0; + byte read; + int numRead = 0; + + do { + read = byteBuf.readByte(); + int value = (read & 0b01111111); + result |= (value << (7 * numRead)); + + numRead++; + if (numRead > 5) { + throw new Exception("VarInt is too big"); + } + } while ((read & 0b10000000) != 0); + + return result; + } + + @Override + protected void decode(ChannelHandlerContext context, ByteBuf byteBuf, List list) throws Exception { + int length = readVarInt(byteBuf); + int id = readVarInt(byteBuf); + + list.add(new BasePacket(length, id)); + byteBuf.skipBytes(length); + } +} diff --git a/src/main/java/mc/core/netty/PacketHandler.java b/src/main/java/mc/core/netty/PacketHandler.java new file mode 100644 index 0000000..3f40d5a --- /dev/null +++ b/src/main/java/mc/core/netty/PacketHandler.java @@ -0,0 +1,19 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core.netty; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class PacketHandler extends SimpleChannelInboundHandler { + @Override + protected void channelRead0(ChannelHandlerContext context, BasePacket packet) throws Exception { + log.info("Lenght: {} | Id: {}", + packet.getLength(), + packet.getId()); + } +}