Example usage for io.netty.handler.codec.mqtt MqttUnsubscribeMessage variableHeader

List of usage examples for io.netty.handler.codec.mqtt MqttUnsubscribeMessage variableHeader

Introduction

In this page you can find the example usage for io.netty.handler.codec.mqtt MqttUnsubscribeMessage variableHeader.

Prototype

@Override
    public MqttMessageIdVariableHeader variableHeader() 

Source Link

Usage

From source file:com.caricah.iotracah.server.mqttserver.transform.MqttIOTTransformerImpl.java

License:Apache License

@Override
public IOTMessage toIOTMessage(MqttMessage serverMessage) {

    MqttFixedHeader fxH = serverMessage.fixedHeader();

    if (null == fxH) {
        return null;
    }//from w  ww .  jav  a2 s .  c o m

    switch (fxH.messageType()) {

    case PUBLISH:

        MqttPublishMessage publishMessage = (MqttPublishMessage) serverMessage;

        MqttPublishVariableHeader pubVH = publishMessage.variableHeader();

        ByteBuffer byteBuffer = publishMessage.payload().nioBuffer();

        return PublishMessage.from(pubVH.messageId(), fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(),
                pubVH.topicName(), byteBuffer, true);

    case PUBACK:

        MqttPubAckMessage pubAckMessage = (MqttPubAckMessage) serverMessage;

        MqttMessageIdVariableHeader msgIdVH = pubAckMessage.variableHeader();
        return AcknowledgeMessage.from(msgIdVH.messageId());

    case PUBREC:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();
        return PublishReceivedMessage.from(msgIdVH.messageId());

    case PUBREL:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();
        return ReleaseMessage.from(msgIdVH.messageId(), fxH.isDup());

    case PUBCOMP:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();

        return CompleteMessage.from(msgIdVH.messageId());
    case PINGREQ:
    case PINGRESP:
        return Ping.from(fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain());

    case CONNECT:

        MqttConnectMessage mqttConnectMessage = (MqttConnectMessage) serverMessage;
        MqttConnectVariableHeader conVH = mqttConnectMessage.variableHeader();
        MqttConnectPayload conPayload = mqttConnectMessage.payload();

        boolean isAnnonymousConnect = (!conVH.hasPassword() && !conVH.hasUserName());

        ConnectMessage connectionMessage = ConnectMessage.from(fxH.isDup(), fxH.qosLevel().value(),
                fxH.isRetain(), conVH.name(), conVH.version(), conVH.isCleanSession(), isAnnonymousConnect,
                conPayload.clientIdentifier(), conPayload.userName(), conPayload.password(),
                conVH.keepAliveTimeSeconds(), "");

        connectionMessage.setHasWill(conVH.isWillFlag());
        connectionMessage.setRetainWill(conVH.isWillRetain());
        connectionMessage.setWillQos(conVH.willQos());
        connectionMessage.setWillTopic(conPayload.willTopic());
        connectionMessage.setWillMessage(conPayload.willMessage());
        return connectionMessage;

    case CONNACK:

        MqttConnAckMessage connAckMessage = (MqttConnAckMessage) serverMessage;
        MqttConnAckVariableHeader connAckVH = connAckMessage.variableHeader();

        return ConnectAcknowledgeMessage.from(fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(), 20,
                connAckVH.connectReturnCode());

    case SUBSCRIBE:

        MqttSubscribeMessage subMsg = (MqttSubscribeMessage) serverMessage;
        msgIdVH = subMsg.variableHeader();
        MqttSubscribePayload subPayload = subMsg.payload();

        SubscribeMessage subscribeMessage = SubscribeMessage.from(msgIdVH.messageId(), fxH.isDup(),
                fxH.qosLevel().value(), fxH.isRetain());

        subPayload.topicSubscriptions().forEach(tSub -> {
            subscribeMessage.getTopicFilterList()
                    .add(new AbstractMap.SimpleEntry<>(tSub.topicName(), tSub.qualityOfService().value()));
        });

        return subscribeMessage;

    case UNSUBSCRIBE:

        MqttUnsubscribeMessage unSubMsg = (MqttUnsubscribeMessage) serverMessage;

        msgIdVH = unSubMsg.variableHeader();
        MqttUnsubscribePayload unsubscribePayload = unSubMsg.payload();

        return UnSubscribeMessage.from(msgIdVH.messageId(), fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(),
                unsubscribePayload.topics());

    case DISCONNECT:
        return DisconnectMessage.from(false);

    default:
        return null;
    }
}

From source file:net.anyflow.lannister.packetreceiver.UnsubscribeReceiver.java

License:Apache License

@Override
protected void channelRead0(ChannelHandlerContext ctx, MqttUnsubscribeMessage msg) throws Exception {
    logger.debug("packet incoming [message={}]", msg.toString());

    Session session = Session.NEXUS.get(ctx.channel().id());
    if (session == null) {
        logger.error("None exist session message [message={}]", msg.toString());

        ctx.channel().disconnect().addListener(ChannelFutureListener.CLOSE).addListener(fs -> // [MQTT-4.8.0-1]
        Plugins.SELF.get(DisconnectEventListener.class).disconnected(new AbnormalDisconnectEventArgs()));
        return;/*from   w  w  w .j  a  va 2s . co  m*/
    }

    session.setLastIncomingTime(new Date());

    List<String> topicFilters = msg.payload().topics();

    if (topicFilters == null || topicFilters.isEmpty()) {
        session.dispose(true); // [MQTT-4.8.0-1]
        return;
    }

    topicFilters.stream().forEach(tf -> session.topicSubscriptions().remove(tf));

    Plugins.SELF.get(UnsubscribeEventListener.class).unsubscribed(new UnsubscribeEventArgs() {
        @Override
        public String clientId() {
            return session.clientId();
        }

        @Override
        public List<String> topicFilters() {
            return topicFilters;
        }
    });

    session.send(MessageFactory.unsuback(msg.variableHeader().messageId())); // [MQTT-2.3.1-7],[MQTT-3.10.4-4],[MQTT-3.10.4-5]
}

From source file:org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.java

License:Apache License

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);//  w  w  w  .  j  a va 2  s.c o  m
    MqttUnsubAckMessage m = new MqttUnsubAckMessage(header, message.variableHeader());
    sendToClient(m);
}

From source file:org.thingsboard.server.transport.mqtt.MqttTransportHandler.java

License:Apache License

private void processUnsubscribe(ChannelHandlerContext ctx, MqttUnsubscribeMessage mqttMsg) {
    if (!checkConnected(ctx, mqttMsg)) {
        return;//from w w  w  .j av  a 2 s  . c om
    }
    log.trace("[{}] Processing subscription [{}]!", sessionId, mqttMsg.variableHeader().messageId());
    for (String topicName : mqttMsg.payload().topics()) {
        mqttQoSMap.remove(new MqttTopicMatcher(topicName));
        try {
            switch (topicName) {
            case MqttTopics.DEVICE_ATTRIBUTES_TOPIC: {
                transportService.process(sessionInfo, TransportProtos.SubscribeToAttributeUpdatesMsg
                        .newBuilder().setUnsubscribe(true).build(), null);
                break;
            }
            case MqttTopics.DEVICE_RPC_REQUESTS_SUB_TOPIC: {
                transportService.process(sessionInfo,
                        TransportProtos.SubscribeToRPCMsg.newBuilder().setUnsubscribe(true).build(), null);
                break;
            }
            }
        } catch (Exception e) {
            log.warn("[{}] Failed to process unsubscription [{}] to [{}]", sessionId,
                    mqttMsg.variableHeader().messageId(), topicName);
        }
    }
    ctx.writeAndFlush(createUnSubAckMessage(mqttMsg.variableHeader().messageId()));
}