Example usage for io.netty.handler.codec.mqtt MqttPublishVariableHeader MqttPublishVariableHeader

List of usage examples for io.netty.handler.codec.mqtt MqttPublishVariableHeader MqttPublishVariableHeader

Introduction

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

Prototype

public MqttPublishVariableHeader(String topicName, int packetId) 

Source Link

Usage

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

License:Apache License

@Override
public MqttMessage toServerMessage(IOTMessage internalMessage) {

    switch (internalMessage.getMessageType()) {

    case PublishMessage.MESSAGE_TYPE:

        PublishMessage pubMsg = (PublishMessage) internalMessage;
        //We generate a publish message.
        MqttPublishVariableHeader respVariableHeader = new MqttPublishVariableHeader(pubMsg.getTopic(),
                pubMsg.getMessageId());//from   ww  w  .  ja  v a  2s.c  o m

        MqttFixedHeader respFixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, pubMsg.getIsDuplicate(),
                MqttQoS.valueOf(pubMsg.getQos()), pubMsg.getIsRetain(), 0);
        ByteBuf content = Unpooled.wrappedBuffer((byte[]) pubMsg.getPayload());

        return MqttMessageFactory.newMessage(respFixedHeader, respVariableHeader, content);

    case AcknowledgeMessage.MESSAGE_TYPE:

        //Generate a PUBACK for qos 1 messages.
        AcknowledgeMessage ackMsg = (AcknowledgeMessage) internalMessage;
        MqttFixedHeader ackFixedHeader = new MqttFixedHeader(MqttMessageType.PUBACK, ackMsg.isDup(),
                MqttQoS.valueOf(ackMsg.getQos()), ackMsg.isRetain(), 0);
        MqttMessageIdVariableHeader msgIdVariableHeader = MqttMessageIdVariableHeader
                .from(ackMsg.getMessageId());
        return MqttMessageFactory.newMessage(ackFixedHeader, msgIdVariableHeader, null);

    case PublishReceivedMessage.MESSAGE_TYPE:

        //We need to generate a PUBREC message to acknowledge reception of message.
        PublishReceivedMessage pubrec = (PublishReceivedMessage) internalMessage;
        MqttFixedHeader recFixedHeader = new MqttFixedHeader(MqttMessageType.PUBREC, false,
                MqttQoS.valueOf(pubrec.getQos()), false, 0);
        msgIdVariableHeader = MqttMessageIdVariableHeader.from(pubrec.getMessageId());
        return MqttMessageFactory.newMessage(recFixedHeader, msgIdVariableHeader, null);

    case ReleaseMessage.MESSAGE_TYPE:

        //We need to generate a PUBREL message to release cached message.
        ReleaseMessage pubrel = (ReleaseMessage) internalMessage;
        MqttFixedHeader relFixedHeader = new MqttFixedHeader(MqttMessageType.PUBREL, pubrel.isDup(),
                MqttQoS.valueOf(pubrel.getQos()), false, 0);
        msgIdVariableHeader = MqttMessageIdVariableHeader.from(pubrel.getMessageId());
        return MqttMessageFactory.newMessage(relFixedHeader, msgIdVariableHeader, null);

    case CompleteMessage.MESSAGE_TYPE:

        //We need to generate a PUBCOMP message to acknowledge finalization of transmission of qos 2 message.
        CompleteMessage destroyMessage = (CompleteMessage) internalMessage;
        MqttFixedHeader compFixedHeader = new MqttFixedHeader(MqttMessageType.PUBCOMP, false,
                MqttQoS.valueOf(destroyMessage.getQos()), false, 0);
        msgIdVariableHeader = MqttMessageIdVariableHeader.from(destroyMessage.getMessageId());
        return MqttMessageFactory.newMessage(compFixedHeader, msgIdVariableHeader, null);

    case Ping.MESSAGE_TYPE:

        Ping ping = (Ping) internalMessage;
        //We need to generate a PINGRESP message to respond to a PINGREQ.
        recFixedHeader = new MqttFixedHeader(MqttMessageType.PINGRESP, ping.isDup(),
                MqttQoS.valueOf(ping.getQos()), ping.isRetain(), 0);
        return MqttMessageFactory.newMessage(recFixedHeader, null, null);

    case ConnectAcknowledgeMessage.MESSAGE_TYPE:

        ConnectAcknowledgeMessage connAck = (ConnectAcknowledgeMessage) internalMessage;
        MqttFixedHeader connAckFixedHeader = new MqttFixedHeader(MqttMessageType.CONNACK, connAck.isDup(),
                MqttQoS.valueOf(connAck.getQos()), connAck.isRetain(), 0);
        MqttConnAckVariableHeader conAckVariableHeader = new MqttConnAckVariableHeader(connAck.getReturnCode());
        //Todo: Raise netty codec issue for lack of codec 3.2.2.2 Session Present flag.

        return MqttMessageFactory.newMessage(connAckFixedHeader, conAckVariableHeader, null);

    case SubscribeAcknowledgeMessage.MESSAGE_TYPE:

        SubscribeAcknowledgeMessage subAckMsg = (SubscribeAcknowledgeMessage) internalMessage;
        MqttSubAckPayload payload = new MqttSubAckPayload(subAckMsg.getGrantedQos());

        MqttFixedHeader subAckFixedHeader = new MqttFixedHeader(MqttMessageType.SUBACK, subAckMsg.isDup(),
                MqttQoS.valueOf(subAckMsg.getQos()), subAckMsg.isRetain(), 0);
        MqttMessageIdVariableHeader subAckVariableHeader = MqttMessageIdVariableHeader
                .from(subAckMsg.getMessageId());
        return MqttMessageFactory.newMessage(subAckFixedHeader, subAckVariableHeader, payload);

    case UnSubscribeAcknowledgeMessage.MESSAGE_TYPE:

        UnSubscribeAcknowledgeMessage unSubAckMsg = (UnSubscribeAcknowledgeMessage) internalMessage;
        respFixedHeader = new MqttFixedHeader(MqttMessageType.UNSUBACK, unSubAckMsg.isDup(),
                MqttQoS.valueOf(unSubAckMsg.getQos()), unSubAckMsg.isRetain(), 0);
        MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader
                .from(unSubAckMsg.getMessageId());
        return MqttMessageFactory.newMessage(respFixedHeader, variableHeader, null);

    default:
        /**
         *
         * Internally these are not expected to get here.
         * In such cases we just return a null
         * and log this anomaly as a gross error.
         *
         *
         * if(internalMessage instanceof ConnectMessage ||
         * internalMessage instanceof SubscribeMessage ||
         * internalMessage instanceof UnSubscribeMessage ||
         * internalMessage instanceof DisconnectMessage ||
         * internalMessage instanceof WillMessage ){
         * }
         **/

        return null;
    }

}

From source file:io.moquette.server.HazelcastListener.java

License:Open Source License

@Override
public void onMessage(Message<HazelcastMsg> msg) {
    try {/*  ww  w. j a  v  a  2  s  .c o m*/
        if (!msg.getPublishingMember().equals(server.getHazelcastInstance().getCluster().getLocalMember())) {
            HazelcastMsg hzMsg = msg.getMessageObject();
            LOG.info("{} received from hazelcast for topic {} message: {}", hzMsg.getClientId(),
                    hzMsg.getTopic(), hzMsg.getPayload());
            // TODO pass forward this information in somehow publishMessage.setLocal(false);

            MqttQoS qos = MqttQoS.valueOf(hzMsg.getQos());
            MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, qos, false, 0);
            MqttPublishVariableHeader varHeader = new MqttPublishVariableHeader(hzMsg.getTopic(), 0);
            ByteBuf payload = Unpooled.wrappedBuffer(hzMsg.getPayload());
            MqttPublishMessage publishMessage = new MqttPublishMessage(fixedHeader, varHeader, payload);
            server.internalPublish(publishMessage, hzMsg.getClientId());
        }
    } catch (Exception ex) {
        LOG.error("error polling hazelcast msg queue", ex);
    }
}

From source file:io.moquette.spi.impl.InternalRepublisher.java

License:Open Source License

public static MqttPublishMessage createPublishForQos(String topic, MqttQoS qos, ByteBuf message,
        boolean retained, int messageId) {
    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, qos, retained, 0);
    MqttPublishVariableHeader varHeader = new MqttPublishVariableHeader(topic, messageId);
    return new MqttPublishMessage(fixedHeader, varHeader, message);
}

From source file:io.moquette.spi.impl.MessagesPublisher.java

License:Open Source License

private static MqttPublishMessage notRetainedPublishWithMessageId(String topic, MqttQoS qos, ByteBuf message,
        int messageId) {
    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, qos, false, 0);
    MqttPublishVariableHeader varHeader = new MqttPublishVariableHeader(topic, messageId);
    return new MqttPublishMessage(fixedHeader, varHeader, message);
}

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

License:Apache License

/**
 * See {@link MqttClient#publish(String, Buffer, MqttQoS, boolean, boolean, Handler)} for more details
 *///from w  w  w . ja  v  a  2s .  com
@Override
public MqttClient publish(String topic, Buffer payload, MqttQoS qosLevel, boolean isDup, boolean isRetain,
        Handler<AsyncResult<Integer>> publishSentHandler) {

    if (countInflightQueue >= options.getMaxInflightQueue()) {
        String msg = String.format("Attempt to exceed the limit of %d inflight messages",
                options.getMaxInflightQueue());
        log.error(msg);
        MqttException exception = new MqttException(MqttException.MQTT_INFLIGHT_QUEUE_FULL, msg);
        if (publishSentHandler != null) {
            publishSentHandler.handle(Future.failedFuture(exception));
        }
        return this;
    }

    if (!isValidTopicName(topic)) {
        String msg = String.format(
                "Invalid Topic Name - %s. It mustn't contains wildcards: # and +. Also it can't contains U+0000(NULL) chars",
                topic);
        log.error(msg);
        MqttException exception = new MqttException(MqttException.MQTT_INVALID_TOPIC_NAME, msg);
        if (publishSentHandler != null) {
            publishSentHandler.handle(Future.failedFuture(exception));
        }
        return this;
    }

    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, isDup, qosLevel, isRetain, 0);

    MqttPublishVariableHeader variableHeader = new MqttPublishVariableHeader(topic, nextMessageId());

    ByteBuf buf = Unpooled.copiedBuffer(payload.getBytes());

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

    switch (qosLevel) {
    case AT_LEAST_ONCE:
        qos1outbound.put(variableHeader.messageId(), publish);
        countInflightQueue++;
        break;
    case EXACTLY_ONCE:
        qos2outbound.put(variableHeader.messageId(), publish);
        countInflightQueue++;
        break;
    }

    this.write(publish);

    if (publishSentHandler != null) {
        publishSentHandler.handle(Future.succeededFuture(variableHeader.messageId()));
    }

    return this;
}

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

License:Apache License

public MqttEndpointImpl publish(String topic, Buffer payload, MqttQoS qosLevel, boolean isDup,
        boolean isRetain) {

    this.checkConnected();

    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, isDup, qosLevel, isRetain, 0);
    MqttPublishVariableHeader variableHeader = new MqttPublishVariableHeader(topic, this.nextMessageId());

    ByteBuf buf = Unpooled.copiedBuffer(payload.getBytes());

    io.netty.handler.codec.mqtt.MqttMessage publish = MqttMessageFactory.newMessage(fixedHeader, variableHeader,
            buf);// ww  w .j a v a2 s . c  o m

    this.write(publish);

    return this;
}

From source file:io.vertx.mqtt.test.MqttBadClientTest.java

License:Apache License

private MqttPublishMessage createPublishMessage() {

    MqttFixedHeader mqttFixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, MqttQoS.AT_LEAST_ONCE,
            true, 0);// ww w.j a  v a2s  .  com

    MqttPublishVariableHeader mqttPublishVariableHeader = new MqttPublishVariableHeader(MQTT_TOPIC, 1);

    ByteBuf payload = ALLOCATOR.buffer();
    payload.writeBytes(MQTT_MESSAGE.getBytes(CharsetUtil.UTF_8));

    return new MqttPublishMessage(mqttFixedHeader, mqttPublishVariableHeader, payload);
}

From source file:net.anyflow.lannister.message.MessageFactory.java

License:Apache License

public static MqttPublishMessage publish(IMessage message, boolean isDup) {
    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, isDup, message.qos(),
            message.isRetain(), 7 + message.message().length);

    MqttPublishVariableHeader variableHeader = new MqttPublishVariableHeader(message.topicName(), message.id());

    return new MqttPublishMessage(fixedHeader, variableHeader, Unpooled.wrappedBuffer(message.message()));
}

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

License:Apache License

protected void send(int messageId, String topicName, int qosLevel, boolean isRetain, ByteBuf payload,
        int deliveryCount) {
    boolean redelivery = qosLevel == 0 ? false : (deliveryCount > 0);
    MqttFixedHeader header = new MqttFixedHeader(MqttMessageType.PUBLISH, redelivery, MqttQoS.valueOf(qosLevel),
            isRetain, 0);/*from   w w  w .j  a  v a2 s . c om*/
    MqttPublishVariableHeader varHeader = new MqttPublishVariableHeader(topicName, messageId);
    MqttMessage publish = new MqttPublishMessage(header, varHeader, payload);
    sendToClient(publish);
}

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

License:Apache License

/**
 * Publish a message to the given payload, using the given qos and optional retain
 *
 * @param topic   The topic to publish to
 * @param payload The payload to send/*from  w w  w .j a  v a2 s .  c o m*/
 * @param qos     The qos to use while publishing
 * @param retain  true if you want to retain the message on the server, false otherwise
 * @return A future which will be completed when the message is delivered to the server
 */
@Override
public Future<Void> publish(String topic, ByteBuf payload, MqttQoS qos, boolean retain) {
    Promise<Void> future = new DefaultPromise<>(this.eventLoop.next());
    MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, qos, retain, 0);
    MqttPublishVariableHeader variableHeader = new MqttPublishVariableHeader(topic,
            getNewMessageId().messageId());
    MqttPublishMessage message = new MqttPublishMessage(fixedHeader, variableHeader, payload);
    MqttPendingPublish pendingPublish = new MqttPendingPublish(variableHeader.messageId(), future,
            payload.retain(), message, qos);
    ChannelFuture channelFuture = this.sendAndFlushPacket(message);

    if (channelFuture != null) {
        pendingPublish.setSent(true);
        if (channelFuture.cause() != null) {
            future.setFailure(channelFuture.cause());
            return future;
        }
    }
    if (pendingPublish.isSent() && pendingPublish.getQos() == MqttQoS.AT_MOST_ONCE) {
        pendingPublish.getFuture().setSuccess(null); //We don't get an ACK for QOS 0
    } else if (pendingPublish.isSent()) {
        this.pendingPublishes.put(pendingPublish.getMessageId(), pendingPublish);
        pendingPublish.startPublishRetransmissionTimer(this.eventLoop.next(), this::sendAndFlushPacket);
    }
    return future;
}