下面列出了 io.netty.handler.codec.mqtt.MqttUnsubscribePayload #io.netty.handler.codec.mqtt.MqttUnsubAckMessage 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void processRequest(ChannelHandlerContext ctx, MqttMessage mqttMessage) {
MqttUnsubscribeMessage unsubscribeMessage = (MqttUnsubscribeMessage) mqttMessage;
MqttUnsubscribePayload unsubscribePayload = unsubscribeMessage.payload();
List<String> topics = unsubscribePayload.topics();
String clientId = NettyUtil.getClientId(ctx.channel());
ClientSession clientSession = ConnectManager.getInstance().getClient(clientId);
if(Objects.isNull(clientSession)){
log.warn("[UnSubscribe] -> The client is not online.clientId={}",clientId);
}
topics.forEach( topic -> {
subscriptionMatcher.unSubscribe(topic,clientId);
subscriptionStore.removeSubscription(clientId,topic);
//停止发送系统信息
if(SysToipc.SYS.equals(topic)) {
sysMessageService.removeClient(clientSession.getClientId());
}
});
MqttUnsubAckMessage unsubAckMessage = MessageUtil.getUnSubAckMessage(MessageUtil.getMessageId(mqttMessage));
ctx.writeAndFlush(unsubAckMessage);
}
@Override
public void processRequest(ChannelHandlerContext ctx, MqttMessage mqttMessage) {
MqttUnsubscribeMessage unsubscribeMessage = (MqttUnsubscribeMessage) mqttMessage;
MqttUnsubscribePayload unsubscribePayload = unsubscribeMessage.payload();
List<String> topics = unsubscribePayload.topics();
String clientId = NettyUtil.getClientId(ctx.channel());
ClientSession clientSession = ConnectManager.getInstance().getClient(clientId);
if(Objects.isNull(clientSession)){
log.warn("[UnSubscribe] -> The client is not online.clientId={}",clientId);
}
topics.forEach( topic -> {
subscriptionMatcher.unSubscribe(topic,clientId);
subscriptionStore.removeSubscription(clientId,topic);
});
MqttUnsubAckMessage unsubAckMessage = MessageUtil.getUnSubAckMessage(MessageUtil.getMessageId(mqttMessage));
ctx.writeAndFlush(unsubAckMessage);
}
/**
* B - S
* @param channel
* @param mqttMessage
*/
public void processUnSubBack(Channel channel, MqttMessage mqttMessage) {
int messageId;
if (mqttMessage instanceof MqttUnsubAckMessage) {
MqttUnsubAckMessage mqttUnsubAckMessage = (MqttUnsubAckMessage) mqttMessage;
messageId = mqttUnsubAckMessage.variableHeader().messageId();
} else {
MqttMessageIdVariableHeader o = (MqttMessageIdVariableHeader) mqttMessage.variableHeader();
messageId = o.messageId();
NettyLog.error("not UnsubAckMessage:{}", messageId);
}
this.consumerProcess.processUnSubBack(messageId);
}
public static MqttUnsubAckMessage unsuback(int messageId) {
MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.UNSUBACK, false, MqttQoS.AT_MOST_ONCE, false,
2);
MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(messageId);
return new MqttUnsubAckMessage(fixedHeader, variableHeader);
}
public static MqttUnsubAckMessage unsubAckMessage(int messageId) {
return (MqttUnsubAckMessage) MqttMessageFactory.newMessage(
new MqttFixedHeader(MqttMessageType.UNSUBACK, false, MqttQoS.AT_MOST_ONCE, false, 0),
MqttMessageIdVariableHeader.from(messageId), null);
}
public static MqttUnsubAckMessage getUnSubAckMessage(int messageId){
MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.UNSUBACK,false,MqttQoS.AT_MOST_ONCE,false,0);
MqttMessageIdVariableHeader idVariableHeader = MqttMessageIdVariableHeader.from(messageId);
return new MqttUnsubAckMessage(fixedHeader,idVariableHeader);
}
void handleUnsubscribe(MqttUnsubscribeMessage message) throws Exception {
session.getSubscriptionManager().removeSubscriptions(message.payload().topics());
MqttFixedHeader header = new MqttFixedHeader(MqttMessageType.UNSUBACK, false, MqttQoS.AT_MOST_ONCE, false, 0);
MqttUnsubAckMessage m = new MqttUnsubAckMessage(header, message.variableHeader());
sendToClient(m);
}