List of usage examples for io.netty.handler.codec.mqtt MqttPubAckMessage variableHeader
@Override
public MqttMessageIdVariableHeader variableHeader()
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; } }