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

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

Introduction

In this page you can find the example usage for io.netty.handler.codec.mqtt MqttPubAckMessage 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  www. j a v  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.MqttConnection.java

License:Apache License

/**
 * Handle the MQTT message received by the remote MQTT client
 *
 * @param msg message to handle// w w w .  j a  v a  2 s.  c  o m
 */
synchronized void handleMessage(Object msg) {

    // handling directly native Netty MQTT messages because we don't need to
    // expose them at higher level (so no need for polyglotization)
    if (msg instanceof io.netty.handler.codec.mqtt.MqttMessage) {

        io.netty.handler.codec.mqtt.MqttMessage mqttMessage = (io.netty.handler.codec.mqtt.MqttMessage) msg;

        DecoderResult result = mqttMessage.decoderResult();
        if (result.isFailure()) {
            channel.pipeline().fireExceptionCaught(result.cause());
            return;
        }
        if (!result.isFinished()) {
            channel.pipeline().fireExceptionCaught(new Exception("Unfinished message"));
            return;
        }

        switch (mqttMessage.fixedHeader().messageType()) {

        case CONNECT:
            handleConnect((MqttConnectMessage) msg);
            break;

        case PUBACK:

            io.netty.handler.codec.mqtt.MqttPubAckMessage mqttPubackMessage = (io.netty.handler.codec.mqtt.MqttPubAckMessage) mqttMessage;
            this.handlePuback(mqttPubackMessage.variableHeader().messageId());
            break;

        case PUBREC:

            int pubrecMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrec(pubrecMessageId);
            break;

        case PUBREL:

            int pubrelMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrel(pubrelMessageId);
            break;

        case PUBCOMP:

            int pubcompMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubcomp(pubcompMessageId);
            break;

        case PINGREQ:

            this.handlePingreq();
            break;

        case DISCONNECT:

            this.handleDisconnect();
            break;

        default:

            this.channel.pipeline()
                    .fireExceptionCaught(new Exception("Wrong message type " + msg.getClass().getName()));
            break;

        }

        // handling mapped Vert.x MQTT messages (from Netty ones) because they'll be provided
        // to the higher layer (so need for ployglotization)
    } else {

        if (msg instanceof MqttSubscribeMessage) {

            this.handleSubscribe((MqttSubscribeMessage) msg);

        } else if (msg instanceof MqttUnsubscribeMessage) {

            this.handleUnsubscribe((MqttUnsubscribeMessage) msg);

        } else if (msg instanceof MqttPublishMessage) {

            this.handlePublish((MqttPublishMessage) msg);

        } else {

            this.channel.pipeline().fireExceptionCaught(new Exception("Wrong message type"));
        }
    }
}

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

License:Apache License

/**
 * Handle the MQTT message received by the remote MQTT client
 *
 * @param msg message to handle//from  w  w w  .java  2 s  . c o m
 */
synchronized void handleMessage(Object msg) {

    // handling directly native Netty MQTT messages, some of them are translated
    // to the related Vert.x ones for polyglotization
    if (msg instanceof io.netty.handler.codec.mqtt.MqttMessage) {

        io.netty.handler.codec.mqtt.MqttMessage mqttMessage = (io.netty.handler.codec.mqtt.MqttMessage) msg;

        DecoderResult result = mqttMessage.decoderResult();
        if (result.isFailure()) {
            chctx.pipeline().fireExceptionCaught(result.cause());
            return;
        }
        if (!result.isFinished()) {
            chctx.pipeline().fireExceptionCaught(new Exception("Unfinished message"));
            return;
        }

        switch (mqttMessage.fixedHeader().messageType()) {

        case CONNECT:
            handleConnect((MqttConnectMessage) msg);
            break;

        case SUBSCRIBE:

            io.netty.handler.codec.mqtt.MqttSubscribeMessage subscribe = (io.netty.handler.codec.mqtt.MqttSubscribeMessage) mqttMessage;

            MqttSubscribeMessage mqttSubscribeMessage = MqttSubscribeMessage
                    .create(subscribe.variableHeader().messageId(), subscribe.payload().topicSubscriptions());
            this.handleSubscribe(mqttSubscribeMessage);
            break;

        case UNSUBSCRIBE:

            io.netty.handler.codec.mqtt.MqttUnsubscribeMessage unsubscribe = (io.netty.handler.codec.mqtt.MqttUnsubscribeMessage) mqttMessage;

            MqttUnsubscribeMessage mqttUnsubscribeMessage = MqttUnsubscribeMessage
                    .create(unsubscribe.variableHeader().messageId(), unsubscribe.payload().topics());
            this.handleUnsubscribe(mqttUnsubscribeMessage);
            break;

        case PUBLISH:

            io.netty.handler.codec.mqtt.MqttPublishMessage publish = (io.netty.handler.codec.mqtt.MqttPublishMessage) mqttMessage;
            ByteBuf newBuf = VertxHandler.safeBuffer(publish.payload(), this.chctx.alloc());

            MqttPublishMessage mqttPublishMessage = MqttPublishMessage.create(
                    publish.variableHeader().messageId(), publish.fixedHeader().qosLevel(),
                    publish.fixedHeader().isDup(), publish.fixedHeader().isRetain(),
                    publish.variableHeader().topicName(), newBuf);
            this.handlePublish(mqttPublishMessage);
            break;

        case PUBACK:

            io.netty.handler.codec.mqtt.MqttPubAckMessage mqttPubackMessage = (io.netty.handler.codec.mqtt.MqttPubAckMessage) mqttMessage;
            this.handlePuback(mqttPubackMessage.variableHeader().messageId());
            break;

        case PUBREC:

            int pubrecMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrec(pubrecMessageId);
            break;

        case PUBREL:

            int pubrelMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrel(pubrelMessageId);
            break;

        case PUBCOMP:

            int pubcompMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubcomp(pubcompMessageId);
            break;

        case PINGREQ:

            this.handlePingreq();
            break;

        case DISCONNECT:

            this.handleDisconnect();
            break;

        default:

            this.chctx.fireExceptionCaught(new Exception("Wrong message type " + msg.getClass().getName()));
            break;

        }

    } else {

        this.chctx.fireExceptionCaught(new Exception("Wrong message type"));
    }
}

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

License:Apache License

@Override
protected void channelRead0(ChannelHandlerContext ctx, MqttPubAckMessage 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 ww.ja v  a  2s  . co  m
    }

    session.setLastIncomingTime(new Date());

    String clientId = session.clientId();
    int messageId = msg.variableHeader().messageId();

    Topic topic = Topic.NEXUS.get(clientId, messageId, ClientType.SUBSCRIBER);
    if (topic == null) {
        logger.error("Topic does not exist [clientId={}, messageId={}]", clientId, messageId);
        session.dispose(true); // [MQTT-3.3.5-2]
        return;
    }

    final TopicSubscriber topicSubscriber = topic.subscribers().get(clientId);

    OutboundMessageStatus status = topicSubscriber.outboundMessageStatuses().get(messageId);

    if (status != null) {
        Plugins.SELF.get(DeliveredEventListener.class).delivered(new DeliveredEventArgs() {
            @Override
            public String clientId() {
                return clientId;
            }

            @Override
            public int messageId() {
                return messageId;
            }
        });
    }

    topicSubscriber.removeOutboundMessageStatus(messageId);
    logger.debug("Outbound message status REMOVED [clientId={}, messageId={}]", clientId, messageId);
}

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

License:Apache License

private void handlePuback(MqttPubAckMessage message) {
    MqttPendingPublish pendingPublish = this.client.getPendingPublishes()
            .get(message.variableHeader().messageId());
    pendingPublish.getFuture().setSuccess(null);
    pendingPublish.onPubackReceived();/*from w  ww .j ava2  s .  co m*/
    this.client.getPendingPublishes().remove(message.variableHeader().messageId());
    pendingPublish.getPayload().release();
}

From source file:sk.broker.MQTTMessageLogger.java

License:Open Source License

private void logMQTTMessage(ChannelHandlerContext ctx, Object message, String direction) {
    if (!(message instanceof MqttMessage)) {
        return;//from  w w w  . ja  v a  2  s.c  om
    }
    MqttMessage msg = (MqttMessage) message;
    String clientID = ctx.channel().toString();//NettyUtils.clientID(ctx.channel());
    switch (msg.fixedHeader().messageType()) {
    case CONNECT:
        MqttConnectMessage connect = (MqttConnectMessage) msg;
        LOG.info("{} CONNECT client <{}>", direction, connect.payload().clientIdentifier());
        break;
    case SUBSCRIBE:
        MqttSubscribeMessage subscribe = (MqttSubscribeMessage) msg;
        LOG.info("{} SUBSCRIBE <{}> to topics {}", direction, clientID,
                subscribe.payload().topicSubscriptions());
        break;
    case UNSUBSCRIBE:
        MqttUnsubscribeMessage unsubscribe = (MqttUnsubscribeMessage) msg;
        //TODO
        LOG.info("{} UNSUBSCRIBE <{}> to topics <{}>", direction, clientID, unsubscribe.payload().topics());
        break;
    case PUBLISH:
        MqttPublishMessage publish = (MqttPublishMessage) msg;
        LOG.info("{} PUBLISH <{}> to topics <{}>", direction, clientID, publish.variableHeader().topicName());
        break;
    case PUBREC:
        MqttMessage pubrec = (MqttMessage) msg;
        LOG.info("{} PUBREC <{}> packetID <{}>", direction, clientID,
                ((MqttMessageIdVariableHeader) pubrec.variableHeader()).messageId());
        break;
    case PUBCOMP:
        MqttMessage pubCompleted = (MqttMessage) msg;
        LOG.info("{} PUBCOMP <{}> packetID <{}>", direction, clientID,
                ((MqttMessageIdVariableHeader) pubCompleted.variableHeader()).messageId());
        break;
    case PUBREL:
        MqttMessage pubRelease = (MqttMessage) msg;
        LOG.info("{} PUBREL <{}> packetID <{}>", direction, clientID,
                ((MqttMessageIdVariableHeader) pubRelease.variableHeader()).messageId());
        break;
    case DISCONNECT:
        LOG.info("{} DISCONNECT <{}>", direction, clientID);
        break;
    case PUBACK:
        MqttPubAckMessage pubAck = (MqttPubAckMessage) msg;
        LOG.info("{} PUBACK <{}> packetID <{}>", direction, clientID, pubAck.variableHeader().messageId());
        break;
    }
}