List of usage examples for io.netty.handler.codec.mqtt MqttMessageFactory newMessage
public static MqttMessage newMessage(MqttFixedHeader mqttFixedHeader, Object variableHeader, Object payload)
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());/* w ww . j a v a 2 s .c om*/ 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.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
private void doConnect(int port, String host, String serverName, Handler<AsyncResult<MqttConnAckMessage>> connectHandler) { log.debug(String.format("Trying to connect with %s:%d", host, port)); this.client.connect(port, host, serverName, done -> { // the TCP connection fails if (done.failed()) { log.error(String.format("Can't connect to %s:%d", host, port), done.cause()); if (connectHandler != null) { connectHandler.handle(Future.failedFuture(done.cause())); }//from ww w . j ava2 s . c o m } else { log.info(String.format("Connection with %s:%d established successfully", host, port)); NetSocketInternal soi = (NetSocketInternal) done.result(); ChannelPipeline pipeline = soi.channelHandlerContext().pipeline(); this.connectHandler = connectHandler; if (options.isAutoGeneratedClientId() && (options.getClientId() == null || options.getClientId().isEmpty())) { options.setClientId(generateRandomClientId()); } initChannel(pipeline); this.connection = new MqttClientConnection(this, soi, options); soi.messageHandler(msg -> connection.handleMessage(msg)); soi.closeHandler(v -> handleClosed()); // an exception at connection level soi.exceptionHandler(this::handleException); MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.CONNECT, false, AT_MOST_ONCE, false, 0); MqttConnectVariableHeader variableHeader = new MqttConnectVariableHeader(PROTOCOL_NAME, PROTOCOL_VERSION, options.hasUsername(), options.hasPassword(), options.isWillRetain(), options.getWillQoS(), options.isWillFlag(), options.isCleanSession(), options.getKeepAliveTimeSeconds()); MqttConnectPayload payload = new MqttConnectPayload( options.getClientId() == null ? "" : options.getClientId(), options.getWillTopic(), options.getWillMessage() != null ? options.getWillMessage().getBytes(StandardCharsets.UTF_8) : null, options.hasUsername() ? options.getUsername() : null, options.hasPassword() ? options.getPassword().getBytes() : null); io.netty.handler.codec.mqtt.MqttMessage connect = MqttMessageFactory.newMessage(fixedHeader, variableHeader, payload); this.write(connect); } }); }
From source file:io.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
/** * See {@link MqttClient#disconnect(Handler)} for more details *//*from ww w . j a va2s. c o m*/ @Override public MqttClient disconnect(Handler<AsyncResult<Void>> disconnectHandler) { MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.DISCONNECT, false, AT_MOST_ONCE, false, 0); io.netty.handler.codec.mqtt.MqttMessage disconnect = MqttMessageFactory.newMessage(fixedHeader, null, null); this.write(disconnect); if (disconnectHandler != null) { disconnectHandler.handle(Future.succeededFuture()); } this.connection.close(); return this; }
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 *//* w ww . j av a2s. c o m*/ @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.MqttClientImpl.java
License:Apache License
/** * See {@link MqttClient#subscribe(Map, Handler)} for more details *///from w ww .j ava2 s . c o m @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 */// w w w . ja v a 2 s. c o 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:io.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
/** * See {@link MqttClient#ping()} for more details *///from w w w . jav a2 s . c o m @Override public MqttClient ping() { MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PINGREQ, false, MqttQoS.AT_MOST_ONCE, false, 0); io.netty.handler.codec.mqtt.MqttMessage pingreq = MqttMessageFactory.newMessage(fixedHeader, null, null); this.write(pingreq); return this; }
From source file:io.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
/** * Sends PUBACK packet to server/*from w w w.j av a 2 s . c o m*/ * * @param publishMessageId identifier of the PUBLISH message to acknowledge */ void publishAcknowledge(int publishMessageId) { MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBACK, false, AT_MOST_ONCE, false, 0); MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(publishMessageId); io.netty.handler.codec.mqtt.MqttMessage puback = MqttMessageFactory.newMessage(fixedHeader, variableHeader, null); this.write(puback); }
From source file:io.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
/** * Sends PUBREC packet to server/*from w ww . j a v a2 s . c o m*/ * * @param publishMessage a PUBLISH message to acknowledge */ void publishReceived(MqttPublishMessage publishMessage) { MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBREC, false, AT_MOST_ONCE, false, 0); MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(publishMessage.messageId()); io.netty.handler.codec.mqtt.MqttMessage pubrec = MqttMessageFactory.newMessage(fixedHeader, variableHeader, null); qos2inbound.put(publishMessage.messageId(), publishMessage); this.write(pubrec); }
From source file:io.vertx.mqtt.impl.MqttClientImpl.java
License:Apache License
/** * Sends PUBCOMP packet to server/*from www.j a va 2 s . c om*/ * * @param publishMessageId identifier of the PUBLISH message to acknowledge */ void publishComplete(int publishMessageId) { MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBCOMP, false, AT_MOST_ONCE, false, 0); MqttMessageIdVariableHeader variableHeader = MqttMessageIdVariableHeader.from(publishMessageId); io.netty.handler.codec.mqtt.MqttMessage pubcomp = MqttMessageFactory.newMessage(fixedHeader, variableHeader, null); this.write(pubcomp); }