leutu
2024-06-03 3ef35e6cd16bbfa206b26bb3271eac40ad020bcb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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());
        }
    }
}