|
@@ -0,0 +1,834 @@
|
|
|
|
|
+package org.jetlinks.community.network.mqtt.server;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import io.netty.handler.codec.mqtt.MqttConnectReturnCode;
|
|
|
|
|
+import io.netty.handler.codec.mqtt.MqttQoS;
|
|
|
|
|
+import io.vertx.core.AsyncResult;
|
|
|
|
|
+import io.vertx.core.Handler;
|
|
|
|
|
+import io.vertx.core.buffer.Buffer;
|
|
|
|
|
+import io.vertx.core.net.SocketAddress;
|
|
|
|
|
+import io.vertx.mqtt.MqttAuth;
|
|
|
|
|
+import io.vertx.mqtt.MqttEndpoint;
|
|
|
|
|
+import io.vertx.mqtt.MqttWill;
|
|
|
|
|
+import io.vertx.mqtt.messages.MqttPublishMessage;
|
|
|
|
|
+import io.vertx.mqtt.messages.MqttSubscribeMessage;
|
|
|
|
|
+import io.vertx.mqtt.messages.MqttUnsubscribeMessage;
|
|
|
|
|
+import lombok.Data;
|
|
|
|
|
+import lombok.EqualsAndHashCode;
|
|
|
|
|
+
|
|
|
|
|
+import javax.net.ssl.SSLSession;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author lifang
|
|
|
|
|
+ * @version 1.0.0
|
|
|
|
|
+ * @ClassName TopicHelper.java
|
|
|
|
|
+ * @Description TODO
|
|
|
|
|
+ * @createTime 2021年07月07日 16:35:00
|
|
|
|
|
+ */
|
|
|
|
|
+public class TopicHelper {
|
|
|
|
|
+ private static final String ENDPOINTS="endpoints";
|
|
|
|
|
+ private static final String CHILDREN="childrenNode";
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private static final Tree<MqttEndpoint> ROOT =new Tree<>();
|
|
|
|
|
+ //添加订阅主题
|
|
|
|
|
+ public static void addTopic(String topic,MqttEndpoint endpoint){
|
|
|
|
|
+ if(topic.startsWith("/")){
|
|
|
|
|
+ topic=topic.substring(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ String[] subTopics = topic.split("/");
|
|
|
|
|
+ addTopic(ROOT,subTopics,0,endpoint);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 删除相关主题下订阅通道
|
|
|
|
|
+ * @param topic
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static Set<MqttEndpoint> deleteNodeEndPoint(String topic,MqttEndpoint endpoint){
|
|
|
|
|
+ if(topic.startsWith("/")){
|
|
|
|
|
+ topic=topic.substring(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ String[] subTopics = topic.split("/");
|
|
|
|
|
+ Set<Tree<MqttEndpoint>> mqttEndpoints = new HashSet<>();
|
|
|
|
|
+ findMatchNodes(ROOT,subTopics,0,mqttEndpoints);
|
|
|
|
|
+ Set<MqttEndpoint> result = new HashSet<>();
|
|
|
|
|
+ mqttEndpoints.stream().filter(mqttEndpointTree -> mqttEndpointTree.get(ENDPOINTS)!=null)
|
|
|
|
|
+ .forEach(mqttEndpointTree -> result.addAll((Collection<? extends MqttEndpoint>) mqttEndpointTree.get(ENDPOINTS)));
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 找到符合发布主题的所有订阅主题
|
|
|
|
|
+ * @param topic
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static Set<MqttEndpoint> findMatchNodes(String topic){
|
|
|
|
|
+ if(topic.startsWith("/")){
|
|
|
|
|
+ topic=topic.substring(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ String[] subTopics = topic.split("/");
|
|
|
|
|
+ Set<Tree<MqttEndpoint>> mqttEndpoints = new HashSet<>();
|
|
|
|
|
+ findMatchNodes(ROOT,subTopics,0,mqttEndpoints);
|
|
|
|
|
+ Set<MqttEndpoint> result = new HashSet<>();
|
|
|
|
|
+ mqttEndpoints.stream().filter(mqttEndpointTree -> mqttEndpointTree.get(ENDPOINTS)!=null)
|
|
|
|
|
+ .forEach(mqttEndpointTree -> result.addAll((Collection<? extends MqttEndpoint>) mqttEndpointTree.get(ENDPOINTS)));
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
|
|
+ private static synchronized void addTopic(Tree<MqttEndpoint> node,String[] topics,int pos,MqttEndpoint endpoint){
|
|
|
|
|
+ if(pos==topics.length){
|
|
|
|
|
+ //当到达最后的节点时
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ String topic = topics[pos];
|
|
|
|
|
+ Set<Tree<MqttEndpoint>> children =
|
|
|
|
|
+ (Set<Tree<MqttEndpoint>>) Optional.ofNullable(node.get(CHILDREN)).orElse(new HashSet<>());
|
|
|
|
|
+ Tree<MqttEndpoint> eqTopic=Optional.ofNullable(findNode(children,topic)).
|
|
|
|
|
+ orElse(new Tree<>());
|
|
|
|
|
+ if(eqTopic.getParent()==null){
|
|
|
|
|
+ eqTopic.setParent(node);
|
|
|
|
|
+ eqTopic.setName(topic);
|
|
|
|
|
+ }
|
|
|
|
|
+ children.add(eqTopic);
|
|
|
|
|
+ if(pos==topics.length-1){
|
|
|
|
|
+ Set<MqttEndpoint> endpointSet = (Set<MqttEndpoint>) Optional.ofNullable(eqTopic.get(ENDPOINTS))
|
|
|
|
|
+ .orElse(new HashSet<>());
|
|
|
|
|
+ endpointSet.add(endpoint);
|
|
|
|
|
+ eqTopic.put(ENDPOINTS,endpointSet);
|
|
|
|
|
+ }
|
|
|
|
|
+ node.put(CHILDREN,children);
|
|
|
|
|
+ addTopic(eqTopic,topics,++pos,endpoint);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
|
|
+ private static Set<Tree<MqttEndpoint>> findMatchNodes(Tree<MqttEndpoint> root,String[] topics,int pos,Set<Tree<MqttEndpoint>> result){
|
|
|
|
|
+ Set<Tree<MqttEndpoint>> children = Optional.ofNullable((Set<Tree<MqttEndpoint>>) Optional.ofNullable(root)
|
|
|
|
|
+ .orElse(new Tree<>()).get(CHILDREN)).orElse(new HashSet<>());
|
|
|
|
|
+ if(pos==topics.length){
|
|
|
|
|
+ //当到达最后的节点时
|
|
|
|
|
+ return children;
|
|
|
|
|
+ }
|
|
|
|
|
+ String topic = topics[pos];
|
|
|
|
|
+ for (Tree<MqttEndpoint> child : children) {
|
|
|
|
|
+ if(child.getName().equals("#")){
|
|
|
|
|
+ result.add(child);
|
|
|
|
|
+ }else if(child.getName().equals("+")||child.getName().equals(topic)){
|
|
|
|
|
+ if(pos==topics.length-1){
|
|
|
|
|
+ result.add(child);
|
|
|
|
|
+ }
|
|
|
|
|
+ findMatchNodes(child,topics,pos+1,result);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return children;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Tree<MqttEndpoint> findNode(Set<Tree<MqttEndpoint>> children,String name){
|
|
|
|
|
+ for (Tree<MqttEndpoint> child : children) {
|
|
|
|
|
+ if(child.getName().equals(name)){
|
|
|
|
|
+ return child;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Data
|
|
|
|
|
+ @EqualsAndHashCode(of = {"name","parent"},callSuper = false)
|
|
|
|
|
+ static class Tree<T> extends LinkedHashMap<String, Object> {
|
|
|
|
|
+ private String id;
|
|
|
|
|
+ private String name;
|
|
|
|
|
+ private Tree<T> parent;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ String[] subTopics = "tuoren/+/ceshi/+".split("/");
|
|
|
|
|
+ String[] subTopics2 = "tuoren/+/ceshi/#".split("/");
|
|
|
|
|
+ String[] subTopics3 = "tuoren/+/+/#".split("/");
|
|
|
|
|
+ addTopic(ROOT, subTopics, 0, new MqttEndpoint() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void close() {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress remoteAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress localAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSsl() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SSLSession sslSession() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String clientIdentifier() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttAuth auth() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttWill will() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int protocolVersion() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String protocolName() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isCleanSession() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int keepAliveTimeSeconds() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int lastMessageId() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void subscriptionAutoAck(boolean b) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSubscriptionAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAutoAck(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isPublishAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint autoKeepAlive(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isAutoKeepAlive() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isConnected() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint setClientIdentifier(String s) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint disconnectHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeHandler(Handler<MqttSubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeHandler(Handler<MqttUnsubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishHandler(Handler<MqttPublishMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledgeHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceivedHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReleaseHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishCompletionHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pingHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint closeHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint exceptionHandler(Handler<Throwable> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint reject(MqttConnectReturnCode mqttConnectReturnCode) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeAcknowledge(int i, List<MqttQoS> list) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceived(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishRelease(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishComplete(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, int i, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pong() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ addTopic(ROOT, subTopics2, 0, new MqttEndpoint() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void close() {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress remoteAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress localAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSsl() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SSLSession sslSession() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String clientIdentifier() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttAuth auth() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttWill will() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int protocolVersion() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String protocolName() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isCleanSession() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int keepAliveTimeSeconds() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int lastMessageId() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void subscriptionAutoAck(boolean b) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSubscriptionAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAutoAck(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isPublishAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint autoKeepAlive(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isAutoKeepAlive() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isConnected() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint setClientIdentifier(String s) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint disconnectHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeHandler(Handler<MqttSubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeHandler(Handler<MqttUnsubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishHandler(Handler<MqttPublishMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledgeHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceivedHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReleaseHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishCompletionHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pingHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint closeHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint exceptionHandler(Handler<Throwable> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint reject(MqttConnectReturnCode mqttConnectReturnCode) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeAcknowledge(int i, List<MqttQoS> list) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceived(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishRelease(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishComplete(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, int i, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pong() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ addTopic(ROOT, subTopics3, 0, new MqttEndpoint() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void close() {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress remoteAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SocketAddress localAddress() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSsl() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SSLSession sslSession() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String clientIdentifier() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttAuth auth() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttWill will() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int protocolVersion() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String protocolName() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isCleanSession() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int keepAliveTimeSeconds() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int lastMessageId() {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void subscriptionAutoAck(boolean b) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isSubscriptionAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAutoAck(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isPublishAutoAck() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint autoKeepAlive(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isAutoKeepAlive() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isConnected() {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint setClientIdentifier(String s) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint disconnectHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeHandler(Handler<MqttSubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeHandler(Handler<MqttUnsubscribeMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishHandler(Handler<MqttPublishMessage> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledgeHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceivedHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReleaseHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishCompletionHandler(Handler<Integer> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pingHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint closeHandler(Handler<Void> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint exceptionHandler(Handler<Throwable> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint accept(boolean b) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint reject(MqttConnectReturnCode mqttConnectReturnCode) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint subscribeAcknowledge(int i, List<MqttQoS> list) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint unsubscribeAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishAcknowledge(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishReceived(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishRelease(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publishComplete(int i) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint publish(String s, Buffer buffer, MqttQoS mqttQoS, boolean b, boolean b1, int i, Handler<AsyncResult<Integer>> handler) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public MqttEndpoint pong() {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ Set<Tree<MqttEndpoint>> objects = new HashSet<>();
|
|
|
|
|
+ long l = System.currentTimeMillis();
|
|
|
|
|
+ String[] publish = "tuoren/123/ceshi/123".split("/");
|
|
|
|
|
+ findMatchNodes(ROOT,publish,0,objects);
|
|
|
|
|
+ System.out.println(System.currentTimeMillis()-l);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|