有个疑问:encode会写入UdpAttachment,但是接收方decode数据包时又不关心发送方写入的UdpAttachment,所以encode那里是不是去掉UdpAttachment?
public class UdpCodecHandler extends MessageToMessageCodec<DatagramPacket, EncodedPacketInfo> {
@Override
protected void decode(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket, List<Object> list) {
...
var packetInfo = NetContext.getPacketService().read(sliceByteBuf);
var sender = datagramPacket.sender();
packetInfo.setAttachment(UdpAttachment.valueOf(sender.getHostString(), sender.getPort()));
list.add(packetInfo);
}
@Override
protected void encode(ChannelHandlerContext channelHandlerContext, EncodedPacketInfo out, List<Object> list) {
var byteBuf = channelHandlerContext.alloc().ioBuffer();
var udpAttachment = (UdpAttachment) out.getAttachment();
NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment());
list.add(new DatagramPacket(byteBuf, new InetSocketAddress(udpAttachment.getHost(), udpAttachment.getPort())));
}
}
有个疑问:encode会写入UdpAttachment,但是接收方decode数据包时又不关心发送方写入的UdpAttachment,所以encode那里是不是去掉UdpAttachment?
zfoo/net/src/main/java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java
Line 69 in 5b49303