public MQTTQueueMessage(String topic, MqttMessage message) { this.topic = topic; payload = message.getPayload(); qos = message.getQos(); retained = message.isRetained(); duplicate = message.isDuplicate(); }
@Test public void checkSubscriberQoS0ReceiveQoS1publishes_downgrade() throws Exception { LOG.info("*** checkSubscriberQoS0ReceiveQoS1publishes_downgrade ***"); m_subscriber.subscribe("/topic", 0); m_publisher.publish("/topic", "Hello world MQTT QoS1".getBytes(UTF_8), 1, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS1", message.toString()); assertEquals(0, message.getQos()); }
@Test public void checkSubscriberQoS1ReceiveQoS2publishes_downgrade() throws Exception { LOG.info("*** checkSubscriberQoS1ReceiveQoS2publishes_downgrade ***"); m_subscriber.subscribe("/topic", 1); m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(UTF_8), 2, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS2", message.toString()); assertEquals(1, message.getQos()); }
@Test public void checkSubscriberQoS2ReceiveQoS0publishes() throws Exception { LOG.info("*** checkSubscriberQoS2ReceiveQoS0publishes ***"); m_subscriber.subscribe("/topic", 2); m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(UTF_8), 0, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS2", message.toString()); assertEquals(0, message.getQos()); }
@Test public void checkSubscriberQoS1ReceiveQoS1publishes() throws Exception { LOG.info("*** checkSubscriberQoS1ReceiveQoS1publishes ***"); m_subscriber.subscribe("/topic", 1); m_publisher.publish("/topic", "Hello world MQTT QoS1".getBytes(UTF_8), 1, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS1", message.toString()); assertEquals(1, message.getQos()); }
@Test public void checkSubscriberQoS2ReceiveQoS2publishes() throws Exception { LOG.info("*** checkSubscriberQoS2ReceiveQoS2publishes ***"); m_subscriber.subscribe("/topic", 2); m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(UTF_8), 2, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS2", message.toString()); assertEquals(2, message.getQos()); }
@Test public void checkSubscriberQoS0ReceiveQoS0publishes() throws Exception { LOG.info("*** checkSubscriberQoS0ReceiveQoS0publishes ***"); m_subscriber.subscribe("/topic", 0); m_publisher.publish("/topic", "Hello world MQTT QoS0".getBytes(UTF_8), 0, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS0", message.toString()); assertEquals(0, message.getQos()); }
@Test public void checkSubscriberQoS0ReceiveQoS2publishes_downgrade() throws Exception { LOG.info("*** checkSubscriberQoS0ReceiveQoS2publishes_downgrade ***"); m_subscriber.subscribe("/topic", 0); m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(UTF_8), 2, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS2", message.toString()); assertEquals(0, message.getQos()); }
@Test public void checkSubscriberQoS1ReceiveQoS0publishes() throws Exception { LOG.info("*** checkSubscriberQoS1ReceiveQoS0publishes ***"); m_subscriber.subscribe("/topic", 1); m_publisher.publish("/topic", "Hello world MQTT QoS0".getBytes(UTF_8), 0, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS0", message.toString()); assertEquals(0, message.getQos()); }
@Test public void checkSubscriberQoS2ReceiveQoS1publishes() throws Exception { LOG.info("*** checkSubscriberQoS2ReceiveQoS1publishes ***"); m_subscriber.subscribe("/topic", 2); m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(UTF_8), 1, false); MqttMessage message = m_callback.waitMessage(1); assertEquals("Hello world MQTT QoS2", message.toString()); assertEquals(1, message.getQos()); }
protected byte[] getVariableHeader() throws MqttException { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); encodeUTF8(dos, topicName); if (message.getQos() > 0) { dos.writeShort(msgId); } dos.flush(); return baos.toByteArray(); } catch (IOException ex) { throw new MqttException(ex); } }
protected byte getMessageInfo() { byte info = (byte) (message.getQos() << 1); if (message.isRetained()) { info |= 0x01; } if (message.isDuplicate() || duplicate ) { info |= 0x08; } return info; }
/** * @see org.eclipse.paho.client.mqttv3.MqttCallback#messageArrived(java.lang.String, org.eclipse.paho.client.mqttv3.MqttMessage) */ @Override public void messageArrived(String topic, MqttMessage message) throws Exception { //Get connection object associated with this object Connection c = Connections.getInstance(context).getConnection(clientHandle); c.messageArrived(topic, message); //get the string from strings.xml and format String messageString = context.getString(R.string.messageRecieved, new String(message.getPayload()), topic+";qos:"+message.getQos()+";retained:"+message.isRetained()); Log.i(TAG, messageString); //update client history c.addAction(messageString); }
/** * This removes the MqttSend message from the outbound queue and persistence. * @param message the {@link MqttPublish} message to be removed * @throws MqttPersistenceException if an exception occurs whilst removing the message */ protected void undo(MqttPublish message) throws MqttPersistenceException { final String methodName = "undo"; synchronized (queueLock) { //@TRACE 618=key={0} QoS={1} log.fine(CLASS_NAME,methodName,"618", new Object[]{new Integer(message.getMessageId()), new Integer(message.getMessage().getQos())}); if (message.getMessage().getQos() == 1) { outboundQoS1.remove(new Integer(message.getMessageId())); } else { outboundQoS2.remove(new Integer(message.getMessageId())); } pendingMessages.removeElement(message); persistence.remove(getSendPersistenceKey(message)); tokenStore.removeToken(message); if(message.getMessage().getQos() > 0){ //Free this message Id so it can be used again releaseMessageId(message.getMessageId()); //Set the messageId to 0 so if it's ever retried, it will get a new messageId message.setMessageId(0); } checkQuiesceLock(); } }
ParcelableMqttMessage(MqttMessage original) { super(original.getPayload()); setQos(original.getQos()); setRetained(original.isRetained()); setDuplicate(original.isDuplicate()); }
private void handleMessage(MqttPublish publishMessage) throws MqttException, Exception { final String methodName = "handleMessage"; // If quisecing process any pending messages. String destName = publishMessage.getTopicName(); // @TRACE 713=call messageArrived key={0} topic={1} log.fine(CLASS_NAME, methodName, "713", new Object[] { new Integer(publishMessage.getMessageId()), destName }); deliverMessage(destName, publishMessage.getMessageId(), publishMessage.getMessage()); if (!this.manualAcks) { if (publishMessage.getMessage().getQos() == 1) { this.clientComms.internalSend(new MqttPubAck(publishMessage), new MqttToken(clientComms.getClient().getClientId())); } else if (publishMessage.getMessage().getQos() == 2) { this.clientComms.deliveryComplete(publishMessage); MqttPubComp pubComp = new MqttPubComp(publishMessage); this.clientComms.internalSend(pubComp, new MqttToken( clientComms.getClient().getClientId())); } } }
@Override public Message<?> toMessage(String topic, MqttMessage mqttMessage) { try { AbstractIntegrationMessageBuilder<?> messageBuilder; if (this.bytesMessageMapper != null) { messageBuilder = getMessageBuilderFactory() .fromMessage(this.bytesMessageMapper.toMessage(mqttMessage.getPayload())); } else { messageBuilder = getMessageBuilderFactory() .withPayload(mqttBytesToPayload(mqttMessage)); } messageBuilder .setHeader(MqttHeaders.RECEIVED_QOS, mqttMessage.getQos()) .setHeader(MqttHeaders.DUPLICATE, mqttMessage.isDuplicate()) .setHeader(MqttHeaders.RECEIVED_RETAINED, mqttMessage.isRetained()); if (topic != null) { messageBuilder.setHeader(MqttHeaders.RECEIVED_TOPIC, topic); } return messageBuilder.build(); } catch (Exception e) { throw new MessageConversionException("failed to convert object to Message", e); } }
@SuppressWarnings("unchecked") @Test public void testCustomExpressions() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); MqttPahoMessageHandler handler = ctx.getBean("handler", MqttPahoMessageHandler.class); GenericMessage<String> message = new GenericMessage<>("foo"); assertEquals("fooTopic", TestUtils.getPropertyValue(handler, "topicProcessor", MessageProcessor.class).processMessage(message)); assertEquals(1, TestUtils.getPropertyValue(handler, "converter.qosProcessor", MessageProcessor.class) .processMessage(message)); assertEquals(Boolean.TRUE, TestUtils.getPropertyValue(handler, "converter.retainedProcessor", MessageProcessor.class) .processMessage(message)); handler = ctx.getBean("handlerWithNullExpressions", MqttPahoMessageHandler.class); assertEquals(1, TestUtils.getPropertyValue(handler, "converter", DefaultPahoMessageConverter.class) .fromMessage(message, null).getQos()); assertEquals(Boolean.TRUE, TestUtils.getPropertyValue(handler, "converter", DefaultPahoMessageConverter.class) .fromMessage(message, null).isRetained()); ctx.close(); }
@Test public void testWithDefaultConverter() { GenericMessage<String> message = new GenericMessage<>("foo"); assertEquals("tcp://localhost:1883", TestUtils.getPropertyValue(withDefaultConverterHandler, "url")); assertEquals("foo", TestUtils.getPropertyValue(withDefaultConverterHandler, "clientId")); assertEquals("bar", TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultTopic")); assertEquals(1, TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultQos")); assertEquals(Boolean.TRUE, TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultRetained", Boolean.class)); DefaultPahoMessageConverter defaultConverter = TestUtils.getPropertyValue(withDefaultConverterHandler, "converter", DefaultPahoMessageConverter.class); assertEquals(1, defaultConverter.fromMessage(message, null).getQos()); assertTrue(defaultConverter.fromMessage(message, null).isRetained()); assertSame(clientFactory, TestUtils.getPropertyValue(withDefaultConverterHandler, "clientFactory")); assertTrue(TestUtils.getPropertyValue(withDefaultConverterHandler, "async", Boolean.class)); assertTrue(TestUtils.getPropertyValue(withDefaultConverterHandler, "asyncEvents", Boolean.class)); }