|
@@ -55,9 +55,7 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
private final EmitterProcessor<MqttSubscription> subscriptionProcessor = EmitterProcessor.create(false);
|
|
private final EmitterProcessor<MqttSubscription> subscriptionProcessor = EmitterProcessor.create(false);
|
|
|
private final EmitterProcessor<MqttUnSubscription> unsubscription = EmitterProcessor.create(false);
|
|
private final EmitterProcessor<MqttUnSubscription> unsubscription = EmitterProcessor.create(false);
|
|
|
|
|
|
|
|
- private final VertxMqttPublishing publishing = new VertxMqttPublishing(false);
|
|
|
|
|
- private final VertxMqttSubscription subscription = new VertxMqttSubscription( false);
|
|
|
|
|
- private final VertxMqttMqttUnSubscription unSubscription = new VertxMqttMqttUnSubscription(false);
|
|
|
|
|
|
|
+
|
|
|
private Optional<MqttMessage> willMessage=null;
|
|
private Optional<MqttMessage> willMessage=null;
|
|
|
|
|
|
|
|
private static final MqttAuth emptyAuth = new MqttAuth() {
|
|
private static final MqttAuth emptyAuth = new MqttAuth() {
|
|
@@ -136,6 +134,7 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
this.willMessage = this.getWillMessage();
|
|
this.willMessage = this.getWillMessage();
|
|
|
endpoint.accept();
|
|
endpoint.accept();
|
|
|
}
|
|
}
|
|
|
|
|
+ initSubscript();
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
close().subscribe();
|
|
close().subscribe();
|
|
|
log.warn(e.getMessage(), e);
|
|
log.warn(e.getMessage(), e);
|
|
@@ -145,6 +144,24 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
return this;
|
|
return this;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 初始化监听器
|
|
|
|
|
+ */
|
|
|
|
|
+ private void initSubscript() {
|
|
|
|
|
+ //todo 订阅处理
|
|
|
|
|
+ subscriptionProcessor.subscribe(mqttSubscription -> {
|
|
|
|
|
+
|
|
|
|
|
+ });
|
|
|
|
|
+ //取消订阅处理 todo
|
|
|
|
|
+ unsubscription.subscribe(mqttUnSubscription -> {
|
|
|
|
|
+
|
|
|
|
|
+ });
|
|
|
|
|
+ //发布处理 todo
|
|
|
|
|
+ messageProcessor.subscribe(publishing -> {
|
|
|
|
|
+
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void heartIdleHandler(MqttEndpoint endpoint, long delay, TimeUnit unit) {
|
|
public void heartIdleHandler(MqttEndpoint endpoint, long delay, TimeUnit unit) {
|
|
|
this.pingRespTimeout= new NioEventLoopGroup(1).schedule(()->{
|
|
this.pingRespTimeout= new NioEventLoopGroup(1).schedule(()->{
|
|
@@ -181,8 +198,7 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
})
|
|
})
|
|
|
.publishHandler(msg -> {
|
|
.publishHandler(msg -> {
|
|
|
ping();
|
|
ping();
|
|
|
- publishing.setMessage(msg);
|
|
|
|
|
- publishing.handlerMessage(messageProcessor);
|
|
|
|
|
|
|
+ VertxMqttPublishing publishing = new VertxMqttPublishing(msg,false);
|
|
|
boolean hasDownstream = this.messageProcessor.hasDownstreams();
|
|
boolean hasDownstream = this.messageProcessor.hasDownstreams();
|
|
|
if (autoAckMsg || !hasDownstream) {
|
|
if (autoAckMsg || !hasDownstream) {
|
|
|
publishing.acknowledge();
|
|
publishing.acknowledge();
|
|
@@ -216,8 +232,7 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
})
|
|
})
|
|
|
.subscribeHandler(msg -> {
|
|
.subscribeHandler(msg -> {
|
|
|
ping();
|
|
ping();
|
|
|
- subscription.setMessage(msg);
|
|
|
|
|
- subscription.handlerSubscription(this.subscriptionProcessor);
|
|
|
|
|
|
|
+ VertxMqttSubscription subscription = new VertxMqttSubscription( msg,false);
|
|
|
boolean hasDownstream = this.subscriptionProcessor.hasDownstreams();
|
|
boolean hasDownstream = this.subscriptionProcessor.hasDownstreams();
|
|
|
if (autoAckSub || !hasDownstream) {
|
|
if (autoAckSub || !hasDownstream) {
|
|
|
subscription.acknowledge();
|
|
subscription.acknowledge();
|
|
@@ -228,8 +243,7 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
})
|
|
})
|
|
|
.unsubscribeHandler(msg -> {
|
|
.unsubscribeHandler(msg -> {
|
|
|
ping();
|
|
ping();
|
|
|
- unSubscription.setMessage(msg);
|
|
|
|
|
- unSubscription.handlerUnSubscription(this.unsubscription);
|
|
|
|
|
|
|
+ VertxMqttMqttUnSubscription unSubscription = new VertxMqttMqttUnSubscription(msg,false);
|
|
|
boolean hasDownstream = this.unsubscription.hasDownstreams();
|
|
boolean hasDownstream = this.unsubscription.hasDownstreams();
|
|
|
if (autoAckUnSub || !hasDownstream) {
|
|
if (autoAckUnSub || !hasDownstream) {
|
|
|
unSubscription.acknowledge();
|
|
unSubscription.acknowledge();
|
|
@@ -385,17 +399,10 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
|
class VertxMqttPublishing implements MqttPublishing {
|
|
class VertxMqttPublishing implements MqttPublishing {
|
|
|
|
|
|
|
|
- private MqttPublishMessage message;
|
|
|
|
|
|
|
+ private final MqttPublishMessage message;
|
|
|
|
|
|
|
|
private volatile boolean acknowledged;
|
|
private volatile boolean acknowledged;
|
|
|
|
|
|
|
|
- public VertxMqttPublishing(boolean acknowledged) {
|
|
|
|
|
- this.acknowledged = acknowledged;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void setMessage(MqttPublishMessage message) {
|
|
|
|
|
- this.message = message;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
public void setAcknowledged(boolean acknowledged) {
|
|
public void setAcknowledged(boolean acknowledged) {
|
|
|
this.acknowledged = acknowledged;
|
|
this.acknowledged = acknowledged;
|
|
@@ -420,31 +427,16 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
endpoint.publishReceived(message.messageId());
|
|
endpoint.publishReceived(message.messageId());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void handlerMessage(Flux publishFlux) {
|
|
|
|
|
- publishFlux.subscribe(publish->{
|
|
|
|
|
- //todo 发布消息
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
|
class VertxMqttSubscription implements MqttSubscription {
|
|
class VertxMqttSubscription implements MqttSubscription {
|
|
|
|
|
|
|
|
- private MqttSubscribeMessage message;
|
|
|
|
|
|
|
+ private final MqttSubscribeMessage message;
|
|
|
|
|
|
|
|
|
|
|
|
|
private volatile boolean acknowledged;
|
|
private volatile boolean acknowledged;
|
|
|
|
|
|
|
|
- public VertxMqttSubscription(boolean acknowledged) {
|
|
|
|
|
- this.acknowledged = acknowledged;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void setMessage(MqttSubscribeMessage message) {
|
|
|
|
|
- this.message = message;
|
|
|
|
|
- }
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public MqttSubscribeMessage getMessage() {
|
|
public MqttSubscribeMessage getMessage() {
|
|
|
return message;
|
|
return message;
|
|
@@ -459,29 +451,15 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
endpoint.subscribeAcknowledge(message.messageId(), message.topicSubscriptions().stream()
|
|
endpoint.subscribeAcknowledge(message.messageId(), message.topicSubscriptions().stream()
|
|
|
.map(MqttTopicSubscription::qualityOfService).collect(Collectors.toList()));
|
|
.map(MqttTopicSubscription::qualityOfService).collect(Collectors.toList()));
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void handlerSubscription(Flux subscriptionFlux) {
|
|
|
|
|
- subscriptionFlux.subscribe(result->{
|
|
|
|
|
- //todo 订阅主题
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
|
class VertxMqttMqttUnSubscription implements MqttUnSubscription {
|
|
class VertxMqttMqttUnSubscription implements MqttUnSubscription {
|
|
|
|
|
|
|
|
- private MqttUnsubscribeMessage message;
|
|
|
|
|
|
|
+ private final MqttUnsubscribeMessage message;
|
|
|
|
|
|
|
|
private volatile boolean acknowledged;
|
|
private volatile boolean acknowledged;
|
|
|
|
|
|
|
|
- public VertxMqttMqttUnSubscription(boolean acknowledged) {
|
|
|
|
|
- this.acknowledged = acknowledged;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void setMessage(MqttUnsubscribeMessage message) {
|
|
|
|
|
- this.message = message;
|
|
|
|
|
- }
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public MqttUnsubscribeMessage getMessage() {
|
|
public MqttUnsubscribeMessage getMessage() {
|
|
|
return message;
|
|
return message;
|
|
@@ -496,13 +474,6 @@ class VertxMqttConnection implements MqttConnection {
|
|
|
acknowledged = true;
|
|
acknowledged = true;
|
|
|
endpoint.unsubscribeAcknowledge(message.messageId());
|
|
endpoint.unsubscribeAcknowledge(message.messageId());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void handlerUnSubscription(Flux unSubscriptionFlux) {
|
|
|
|
|
- unSubscriptionFlux.subscribe(result->{
|
|
|
|
|
- //取消订阅主题
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|