package cn.org.hentai.jtt1078.server.talk; import cn.org.hentai.jtt1078.util.Packet; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import java.util.List; /** * Created by matrixy on 2019/4/9. */ public class Jt1078TalkMessageDecoder extends ByteToMessageDecoder { byte[] block = new byte[4096]; private final Jt1078TalkDecoder decoder = new Jt1078TalkDecoder(); @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { int length = in.readableBytes(); for (int i = 0, k = (int) Math.ceil(length / 512f); i < k; i++) { int l = i < k - 1 ? 512 : length - (i * 512); in.readBytes(block, 0, l); decoder.write(block, 0, l); while (true) { Packet p = decoder.decode(); if (p == null) break; out.add(p); } } } }