1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.anyflow.lannister.topic;
18
19 import java.io.IOException;
20
21 import com.fasterxml.jackson.annotation.JsonIgnore;
22 import com.fasterxml.jackson.annotation.JsonProperty;
23 import com.hazelcast.nio.ObjectDataInput;
24 import com.hazelcast.nio.ObjectDataOutput;
25
26 import io.netty.handler.codec.mqtt.MqttQoS;
27 import net.anyflow.lannister.plugin.ITopicSubscription;
28 import net.anyflow.lannister.serialization.SerializableFactory;
29
30 public class TopicSubscription
31 implements com.hazelcast.nio.serialization.IdentifiedDataSerializable, ITopicSubscription {
32 public static final TopicSubscriptions NEXUS = new TopicSubscriptions();
33 public final static int ID = 8;
34 @JsonProperty
35 private String clientId;
36 @JsonProperty
37 private String topicFilter;
38 @JsonProperty
39 private MqttQoS qos;
40
41 public TopicSubscription() {
42 }
43
44 public TopicSubscription(String clientId, String topicFilter, MqttQoS qos) {
45 this.clientId = clientId;
46 this.topicFilter = topicFilter;
47 this.qos = qos;
48 }
49
50 public String key() {
51 return TopicSubscriptions.key(topicFilter, clientId);
52 }
53
54 @Override
55 public String clientId() {
56 return clientId;
57 }
58
59
60
61
62
63
64 @Override
65 public String topicFilter() {
66 return topicFilter;
67 }
68
69
70
71
72
73
74 @Override
75 public MqttQoS qos() {
76 return qos;
77 }
78
79 @JsonIgnore
80 @Override
81 public int getFactoryId() {
82 return SerializableFactory.ID;
83 }
84
85 @JsonIgnore
86 @Override
87 public int getId() {
88 return ID;
89 }
90
91 @Override
92 public void writeData(ObjectDataOutput out) throws IOException {
93 out.writeUTF(clientId);
94 out.writeUTF(topicFilter);
95 out.writeInt(qos != null ? qos.value() : Integer.MIN_VALUE);
96 }
97
98 @Override
99 public void readData(ObjectDataInput in) throws IOException {
100 clientId = in.readUTF();
101 topicFilter = in.readUTF();
102
103 int rawInt = in.readInt();
104 qos = rawInt != Integer.MIN_VALUE ? MqttQoS.valueOf(rawInt) : null;
105 }
106
107 @Override
108 public String toString() {
109 return new StringBuilder().append("clientId=").append(clientId).append(", topicFilter=").append(topicFilter)
110 .append(", qos=").append(topicFilter).toString();
111 }
112 }