package part1.common.serializer.myCode; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import lombok.AllArgsConstructor; import part1.common.Message.MessageType; import part1.common.Message.RpcRequest; import part1.common.Message.RpcResponse; import part1.common.serializer.mySerializer.Serializer; /** * @author wxx * @version 1.0 * @create 2024/6/2 22:24 * 依次按照自定义的消息格式写入,传入的数据为request或者response * 需要持有一个serialize器,负责将传入的对象序列化成字节数组 */ @AllArgsConstructor public class MyEncoder extends MessageToByteEncoder { private Serializer serializer; @Override protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { System.out.println(msg.getClass()); //1.写入消息类型 if(msg instanceof RpcRequest){ out.writeShort(MessageType.REQUEST.getCode()); } else if(msg instanceof RpcResponse){ out.writeShort(MessageType.RESPONSE.getCode()); } //2.写入序列化方式 out.writeShort(serializer.getType()); //得到序列化数组 byte[] serializeBytes = serializer.serialize(msg); //3.写入长度 out.writeInt(serializeBytes.length); //4.写入序列化数组 out.writeBytes(serializeBytes); } }