Example usage for io.netty.handler.codec.mqtt MqttTopicSubscription qualityOfService

List of usage examples for io.netty.handler.codec.mqtt MqttTopicSubscription qualityOfService

Introduction

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

Prototype

MqttQoS qualityOfService

To view the source code for io.netty.handler.codec.mqtt MqttTopicSubscription qualityOfService.

Click Source Link

Usage

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

License:Apache License

boolean addSubscription(MqttTopicSubscription subscription, WildcardConfiguration wildcardConfiguration) {
    // synchronized to prevent race with removeSubscription
    synchronized (subscriptions) {
        addressMessageMap.putIfAbsent(/*w  w w  . j a  v a2 s.  co m*/
                MQTTUtil.convertMQTTAddressFilterToCore(subscription.topicName(), wildcardConfiguration),
                new ConcurrentHashMap<Long, Integer>());

        MqttTopicSubscription existingSubscription = subscriptions.get(subscription.topicName());
        if (existingSubscription != null) {
            if (subscription.qualityOfService().value() > existingSubscription.qualityOfService().value()) {
                subscriptions.put(subscription.topicName(), subscription);
                return true;
            }
        } else {
            subscriptions.put(subscription.topicName(), subscription);
            return true;
        }
    }
    return false;
}

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

License:Apache License

synchronized void start() throws Exception {
    for (MqttTopicSubscription subscription : session.getSessionState().getSubscriptions()) {
        String coreAddress = MQTTUtil.convertMQTTAddressFilterToCore(subscription.topicName(),
                session.getWildcardConfiguration());
        Queue q = createQueueForSubscription(coreAddress, subscription.qualityOfService().value());
        createConsumerForSubscriptionQueue(q, subscription.topicName(),
                subscription.qualityOfService().value());
    }//from w  ww. j av  a  2s. co  m
}

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

License:Apache License

private void addSubscription(MqttTopicSubscription subscription) throws Exception {
    String topicName = CompositeAddress.extractAddressName(subscription.topicName());
    MqttTopicSubscription s = session.getSessionState().getSubscription(topicName);

    int qos = subscription.qualityOfService().value();

    String coreAddress = MQTTUtil.convertMQTTAddressFilterToCore(topicName, session.getWildcardConfiguration());

    session.getSessionState().addSubscription(subscription, session.getWildcardConfiguration());

    Queue q = createQueueForSubscription(coreAddress, qos);

    if (s == null) {
        createConsumerForSubscriptionQueue(q, topicName, qos);
    } else {//from   w  w  w.  j a v  a  2  s .c o  m
        consumerQoSLevels.put(consumers.get(topicName).getID(), qos);
    }
    session.getRetainMessageManager().addRetainedMessagesToQueue(q, topicName);
}

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

License:Apache License

public static void traceMessage(MQTTSessionState state, MqttMessage message, boolean inbound) {
    StringBuilder log = new StringBuilder("MQTT(");

    if (state != null) {
        log.append(state.getClientId());
    }/*from w ww.  j  a  v  a  2  s .c o m*/

    if (inbound) {
        log.append("): IN << ");
    } else {
        log.append("): OUT >> ");
    }

    if (message.fixedHeader() != null) {
        log.append(message.fixedHeader().messageType().toString());

        if (message.variableHeader() instanceof MqttMessageIdVariableHeader) {
            log.append("(" + ((MqttMessageIdVariableHeader) message.variableHeader()).messageId() + ")");
        }

        switch (message.fixedHeader().messageType()) {
        case PUBLISH:
            MqttPublishVariableHeader publishHeader = (MqttPublishVariableHeader) message.variableHeader();
            String publishPayload = ((MqttPublishMessage) message).payload().toString(StandardCharsets.UTF_8);
            final int maxPayloadLogSize = 256;
            log.append("(" + publishHeader.packetId() + ")").append(" topic=" + publishHeader.topicName())
                    .append(", qos=" + message.fixedHeader().qosLevel())
                    .append(", retain=" + message.fixedHeader().isRetain())
                    .append(", dup=" + message.fixedHeader().isDup())
                    .append(", payload=" + (publishPayload.length() > maxPayloadLogSize
                            ? publishPayload.substring(0, maxPayloadLogSize)
                            : publishPayload));
            break;
        case CONNECT:
            MqttConnectVariableHeader connectHeader = (MqttConnectVariableHeader) message.variableHeader();
            MqttConnectPayload payload = ((MqttConnectMessage) message).payload();
            log.append(" protocol=(").append(connectHeader.name()).append(", ").append(connectHeader.version())
                    .append(")").append(", hasPassword=").append(connectHeader.hasPassword())
                    .append(", isCleanSession=").append(connectHeader.isCleanSession())
                    .append(", keepAliveTimeSeconds=").append(connectHeader.keepAliveTimeSeconds())
                    .append(", clientIdentifier=").append(payload.clientIdentifier()).append(", hasUserName=")
                    .append(connectHeader.hasUserName());
            if (connectHeader.hasUserName()) {
                log.append(", userName=").append(payload.userName());
            }
            log.append(", isWillFlag=").append(connectHeader.isWillFlag());
            if (connectHeader.isWillFlag()) {
                log.append(", willQos=").append(connectHeader.willQos()).append(", isWillRetain=")
                        .append(connectHeader.isWillRetain()).append(", willTopic=")
                        .append(payload.willTopic());
            }
            break;
        case CONNACK:
            MqttConnAckVariableHeader connackHeader = (MqttConnAckVariableHeader) message.variableHeader();
            log.append(" connectReturnCode=").append(connackHeader.connectReturnCode().byteValue())
                    .append(", sessionPresent=").append(connackHeader.isSessionPresent());
            break;
        case SUBSCRIBE:
            for (MqttTopicSubscription sub : ((MqttSubscribeMessage) message).payload().topicSubscriptions()) {
                log.append("\n\t" + sub.topicName() + " : " + sub.qualityOfService());
            }
            break;
        case SUBACK:
            for (Integer qos : ((MqttSubAckMessage) message).payload().grantedQoSLevels()) {
                log.append("\n\t" + qos);
            }
            break;
        case UNSUBSCRIBE:
            for (String topic : ((MqttUnsubscribeMessage) message).payload().topics()) {
                log.append("\n\t" + topic);
            }
            break;
        }

        logger.trace(log.toString());
    }
}

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 o m*/
    }
    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));
}