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

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

Introduction

In this page you can find the example usage for io.netty.handler.codec.mqtt MqttSubscribeMessage 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;
    }//  w  w w  . ja v  a 2s.  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.SubscribeReceiver.java

License:Apache License

@Override
protected void channelRead0(ChannelHandlerContext ctx, MqttSubscribeMessage 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;/*www.j  a  v a 2s  . com*/
    }

    session.setLastIncomingTime(new Date());

    List<MqttTopicSubscription> topicSubs = msg.payload().topicSubscriptions();

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

    // TODO multiple sub checking (granted QoS)
    Map.Entry<List<Integer>, Map<String, TopicSubscription>> returns = generateReturns(topicSubs);
    List<Integer> grantedQoss = returns.getKey();
    Map<String, TopicSubscription> topicSubscriptions = returns.getValue();

    if (!executePlugins(session, topicSubscriptions.values())) {
        return;
    }

    session.topicSubscriptions().putAll(topicSubscriptions);

    session.send(MessageFactory.suback(msg.variableHeader().messageId(), grantedQoss)); // [MQTT-2.3.1-7],[MQTT-2.3.1-7],[MQTT-3.8.4-1],[MQTT-3.8.4-2]

    sendRetainedMessage(session, topicSubscriptions);

    publishStatic$Sys(session, topicSubscriptions.values());

    // TODO [MQTT-3.3.1-7]
}

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

License:Apache License

void handleSubscribe(MqttSubscribeMessage message) throws Exception {
    MQTTSubscriptionManager subscriptionManager = session.getSubscriptionManager();
    int[] qos = subscriptionManager.addSubscriptions(message.payload().topicSubscriptions());

    MqttFixedHeader header = new MqttFixedHeader(MqttMessageType.SUBACK, false, MqttQoS.AT_MOST_ONCE, false, 0);
    MqttSubAckMessage ack = new MqttSubAckMessage(header, message.variableHeader(), new MqttSubAckPayload(qos));
    sendToClient(ack);// ww w . j a  v  a 2  s  .  com
}

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

License:Apache License

private void processSubscribe(ChannelHandlerContext ctx, MqttSubscribeMessage mqttMsg) {
    if (!checkConnected(ctx, mqttMsg)) {
        return;//from w w  w. ja  v a  2  s. c  om
    }
    log.trace("[{}] Processing subscription [{}]!", sessionId, mqttMsg.variableHeader().messageId());
    List<Integer> grantedQoSList = new ArrayList<>();
    for (MqttTopicSubscription subscription : mqttMsg.payload().topicSubscriptions()) {
        String topic = subscription.topicName();
        MqttQoS reqQoS = subscription.qualityOfService();
        try {
            switch (topic) {
            case MqttTopics.DEVICE_ATTRIBUTES_TOPIC: {
                transportService.process(sessionInfo,
                        TransportProtos.SubscribeToAttributeUpdatesMsg.newBuilder().build(), null);
                registerSubQoS(topic, grantedQoSList, reqQoS);
                break;
            }
            case MqttTopics.DEVICE_RPC_REQUESTS_SUB_TOPIC: {
                transportService.process(sessionInfo, TransportProtos.SubscribeToRPCMsg.newBuilder().build(),
                        null);
                registerSubQoS(topic, grantedQoSList, reqQoS);
                break;
            }
            case MqttTopics.DEVICE_RPC_RESPONSE_SUB_TOPIC:
            case MqttTopics.GATEWAY_ATTRIBUTES_TOPIC:
            case MqttTopics.GATEWAY_RPC_TOPIC:
            case MqttTopics.DEVICE_ATTRIBUTES_RESPONSES_TOPIC:
                registerSubQoS(topic, grantedQoSList, reqQoS);
                break;
            default:
                log.warn("[{}] Failed to subscribe to [{}][{}]", sessionId, topic, reqQoS);
                grantedQoSList.add(FAILURE.value());
                break;
            }
        } catch (Exception e) {
            log.warn("[{}] Failed to subscribe to [{}][{}]", sessionId, topic, reqQoS);
            grantedQoSList.add(FAILURE.value());
        }
    }
    ctx.writeAndFlush(createSubAckMessage(mqttMsg.variableHeader().messageId(), grantedQoSList));
}