package com.fastbee.base.session;
|
|
import com.fastbee.common.core.protocol.Message;
|
import io.netty.buffer.ByteBuf;
|
import io.netty.channel.socket.DatagramPacket;
|
|
/**
|
* 报文消息的包装
|
* @author bill
|
*/
|
public abstract class Packet {
|
|
/*session*/
|
public final Session session;
|
/*基础消息*/
|
public Message message;
|
/*报文缓存buf*/
|
public ByteBuf byteBuf;
|
|
public static Packet of(Session session, Message message) {
|
if (session.isUdp()) {
|
return new UDP(session, message, null);
|
}
|
return new TCP(session, message, message.getPayload());
|
}
|
|
public static Packet of(Session session, ByteBuf message) {
|
if (session.isUdp()) {
|
return new UDP(session, null, message);
|
}
|
return new TCP(session, null, message);
|
}
|
|
private Packet(Session session, Message message, ByteBuf byteBuf) {
|
this.session = session;
|
this.message = message;
|
this.byteBuf = byteBuf;
|
}
|
|
public Packet replace(Message message) {
|
this.message = message;
|
return this;
|
}
|
|
public ByteBuf take() {
|
ByteBuf temp = this.byteBuf;
|
this.byteBuf = null;
|
return temp;
|
}
|
|
public abstract Object wrap(ByteBuf byteBuf);
|
|
private static class TCP extends Packet {
|
private TCP(Session session, Message message, ByteBuf byteBuf) {
|
super(session, message, byteBuf);
|
}
|
|
@Override
|
public Object wrap(ByteBuf byteBuf) {
|
return byteBuf;
|
}
|
}
|
|
private static class UDP extends Packet {
|
private UDP(Session session, Message message, ByteBuf byteBuf) {
|
super(session, message, byteBuf);
|
}
|
|
@Override
|
public Object wrap(ByteBuf byteBuf) {
|
return new DatagramPacket(byteBuf, session.remoteAddress());
|
}
|
}
|
}
|