hefeixia
2021-02-18 5b8c95c760840f09910730943b21391e47187315
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
package chat.server.moquette.message;
 
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.DecoderResult;
 
public class MqttMessageFactory {
 
       public static MqttMessage newMessage(MqttFixedHeader mqttFixedHeader, Object variableHeader, Object payload) {
            switch (mqttFixedHeader.messageType()) {
                case CONNECT :
                    return new MqttConnectMessage(
                            mqttFixedHeader,
                            (MqttConnectVariableHeader) variableHeader,
                            (MqttConnectPayload) payload);
 
                case CONNACK:
                    return new MqttConnAckMessage(mqttFixedHeader, (MqttConnAckVariableHeader) variableHeader);
 
                case SUBSCRIBE:
                    return new MqttSubscribeMessage(
                            mqttFixedHeader,
                            (MqttMessageIdVariableHeader) variableHeader,
                            (MqttSubscribePayload) payload);
 
                case SUBACK:
                    return new MqttSubAckMessage(
                            mqttFixedHeader,
                            (MqttMessageIdVariableHeader) variableHeader,
                            (MqttSubAckPayload) payload);
 
                case UNSUBACK:
                    return new MqttUnsubAckMessage(
                            mqttFixedHeader,
                            (MqttMessageIdVariableHeader) variableHeader);
 
                case UNSUBSCRIBE:
                    return new MqttUnsubscribeMessage(
                            mqttFixedHeader,
                            (MqttMessageIdVariableHeader) variableHeader,
                            (MqttUnsubscribePayload) payload);
 
                case PUBLISH:
                    return new MqttPublishMessage(
                            mqttFixedHeader,
                            (MqttPublishVariableHeader) variableHeader,
                            (ByteBuf) payload);
 
                case PUBACK:
                    return new MqttPubAckMessage(mqttFixedHeader, (MqttMessageIdVariableHeader) variableHeader);
                case PUBREC:
                case PUBREL:
                case PUBCOMP:
                    return new MqttMessage(mqttFixedHeader, variableHeader);
 
                case PINGREQ:
                case PINGRESP:
                case DISCONNECT:
                    return new MqttMessage(mqttFixedHeader);
 
                default:
                    throw new IllegalArgumentException("unknown message type: " + mqttFixedHeader.messageType());
            }
        }
 
        public static MqttMessage newInvalidMessage(Throwable cause) {
            return new MqttMessage(null, null, null, DecoderResult.failure(cause));
        }
 
        private MqttMessageFactory() { }
}