Example usage for io.netty.handler.codec.mqtt MqttMessageIdVariableHeader messageId

List of usage examples for io.netty.handler.codec.mqtt MqttMessageIdVariableHeader messageId

Introduction

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

Prototype

int messageId

To view the source code for io.netty.handler.codec.mqtt MqttMessageIdVariableHeader messageId.

Click 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 w  w  .j  av a 2 s.co  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:io.vertx.mqtt.impl.MqttClientImpl.java

License:Apache License

/**
 * See {@link MqttClient#subscribe(Map, Handler)} for more details
 *//*from   ww w  .ja va2 s . c  om*/
@Override
public MqttClient subscribe(Map<String, Integer> topics, Handler<AsyncResult<Integer>> subscribeSentHandler) {

    Map<String, Integer> invalidTopics = topics.entrySet().stream().filter(e -> !isValidTopicFilter(e.getKey()))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

    if (invalidTopics.size() > 0) {
        String msg = String.format("Invalid Topic Filters: %s", invalidTopics);
        log.error(msg);
        MqttException exception = new MqttException(MqttException.MQTT_INVALID_TOPIC_FILTER, msg);
        if (subscribeSentHandler != null) {
            subscribeSentHandler.handle(Future.failedFuture(exception));
        }
        return this;
    }

    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.SUBSCRIBE, false, AT_LEAST_ONCE, false,
            0);

    MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(nextMessageId());
    List<MqttTopicSubscription> subscriptions = topics.entrySet().stream()
            .map(e -> new MqttTopicSubscription(e.getKey(), valueOf(e.getValue())))
            .collect(Collectors.toList());

    MqttSubscribePayload payload = new MqttSubscribePayload(subscriptions);

    io.netty.handler.codec.mqtt.MqttMessage subscribe = MqttMessageFactory.newMessage(fixedHeader,
            variableHeader, payload);

    this.write(subscribe);

    if (subscribeSentHandler != null) {
        subscribeSentHandler.handle(Future.succeededFuture(variableHeader.messageId()));
    }
    return this;
}

From source file:io.vertx.mqtt.impl.MqttClientImpl.java

License:Apache License

/**
 * See {@link MqttClient#unsubscribe(String, Handler)} )} for more details
 *//*  ww  w .j  a  v  a  2 s  .  co  m*/
@Override
public MqttClient unsubscribe(String topic, Handler<AsyncResult<Integer>> unsubscribeSentHandler) {

    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.UNSUBSCRIBE, false, AT_LEAST_ONCE, false,
            0);

    MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(nextMessageId());

    MqttUnsubscribePayload payload = new MqttUnsubscribePayload(Stream.of(topic).collect(Collectors.toList()));

    io.netty.handler.codec.mqtt.MqttMessage unsubscribe = MqttMessageFactory.newMessage(fixedHeader,
            variableHeader, payload);

    this.write(unsubscribe);

    if (unsubscribeSentHandler != null) {
        unsubscribeSentHandler.handle(Future.succeededFuture(variableHeader.messageId()));
    }
    return this;
}

From source file:org.thingsboard.mqtt.MqttChannelHandler.java

License:Apache License

private void handlePubcomp(MqttMessage message) {
    MqttMessageIdVariableHeader variableHeader = (MqttMessageIdVariableHeader) message.variableHeader();
    MqttPendingPublish pendingPublish = this.client.getPendingPublishes().get(variableHeader.messageId());
    pendingPublish.getFuture().setSuccess(null);
    this.client.getPendingPublishes().remove(variableHeader.messageId());
    pendingPublish.getPayload().release();
    pendingPublish.onPubcompReceived();//from  w ww  .  j  av a  2 s . c o  m
}

From source file:org.thingsboard.mqtt.MqttClientImpl.java

License:Apache License

private Future<Void> createSubscription(String topic, MqttHandler handler, boolean once, MqttQoS qos) {
    if (this.pendingSubscribeTopics.contains(topic)) {
        Optional<Map.Entry<Integer, MqttPendingSubscription>> subscriptionEntry = this.pendingSubscriptions
                .entrySet().stream().filter((e) -> e.getValue().getTopic().equals(topic)).findAny();
        if (subscriptionEntry.isPresent()) {
            subscriptionEntry.get().getValue().addHandler(handler, once);
            return subscriptionEntry.get().getValue().getFuture();
        }//w  w  w  .j a va 2 s  . co  m
    }
    if (this.serverSubscriptions.contains(topic)) {
        MqttSubscription subscription = new MqttSubscription(topic, handler, once);
        this.subscriptions.put(topic, subscription);
        this.handlerToSubscribtion.put(handler, subscription);
        return this.channel.newSucceededFuture();
    }

    Promise<Void> future = new DefaultPromise<>(this.eventLoop.next());
    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.SUBSCRIBE, false, MqttQoS.AT_LEAST_ONCE,
            false, 0);
    MqttTopicSubscription subscription = new MqttTopicSubscription(topic, qos);
    MqttMessageIdVariableHeader variableHeader = getNewMessageId();
    MqttSubscribePayload payload = new MqttSubscribePayload(Collections.singletonList(subscription));
    MqttSubscribeMessage message = new MqttSubscribeMessage(fixedHeader, variableHeader, payload);

    final MqttPendingSubscription pendingSubscription = new MqttPendingSubscription(future, topic, message);
    pendingSubscription.addHandler(handler, once);
    this.pendingSubscriptions.put(variableHeader.messageId(), pendingSubscription);
    this.pendingSubscribeTopics.add(topic);
    pendingSubscription.setSent(this.sendAndFlushPacket(message) != null); //If not sent, we will send it when the connection is opened

    pendingSubscription.startRetransmitTimer(this.eventLoop.next(), this::sendAndFlushPacket);

    return future;
}

From source file:org.thingsboard.mqtt.MqttClientImpl.java

License:Apache License

private void checkSubscribtions(String topic, Promise<Void> promise) {
    if (!(this.subscriptions.containsKey(topic) && this.subscriptions.get(topic).size() != 0)
            && this.serverSubscriptions.contains(topic)) {
        MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.UNSUBSCRIBE, false,
                MqttQoS.AT_LEAST_ONCE, false, 0);
        MqttMessageIdVariableHeader variableHeader = getNewMessageId();
        MqttUnsubscribePayload payload = new MqttUnsubscribePayload(Collections.singletonList(topic));
        MqttUnsubscribeMessage message = new MqttUnsubscribeMessage(fixedHeader, variableHeader, payload);

        MqttPendingUnsubscription pendingUnsubscription = new MqttPendingUnsubscription(promise, topic,
                message);/*w  ww  .ja v  a  2s . c  om*/
        this.pendingServerUnsubscribes.put(variableHeader.messageId(), pendingUnsubscription);
        pendingUnsubscription.startRetransmissionTimer(this.eventLoop.next(), this::sendAndFlushPacket);

        this.sendAndFlushPacket(message);
    } else {
        promise.setSuccess(null);
    }
}