42 lines
1.4 KiB
Java
42 lines
1.4 KiB
Java
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);
|
||
}
|
||
}
|