/** * Process notification of a message's arrival * * @param data */ private void messageArrivedAction(Bundle data) { if (callback != null) { String messageId = data .getString(MqttServiceConstants.CALLBACK_MESSAGE_ID); String destinationName = data .getString(MqttServiceConstants.CALLBACK_DESTINATION_NAME); ParcelableMqttMessage message = data .getParcelable(MqttServiceConstants.CALLBACK_MESSAGE_PARCEL); try { if (messageAck == Ack.AUTO_ACK) { callback.messageArrived(destinationName, message); mqttService.acknowledgeMessageArrival(clientHandle, messageId); } else { message.messageId = messageId; callback.messageArrived(destinationName, message); } // let the service discard the saved message details } catch (Exception e) { // Swallow the exception } } }
protected boolean deliverMessage(String topicName, int messageId, MqttMessage aMessage) throws Exception { boolean delivered = false; Enumeration keys = callbacks.keys(); while (keys.hasMoreElements()) { String topicFilter = (String)keys.nextElement(); if (MqttTopic.isMatched(topicFilter, topicName)) { aMessage.setId(messageId); ((IMqttMessageListener)(callbacks.get(topicFilter))).messageArrived(topicName, aMessage); delivered = true; } } /* if the message hasn't been delivered to a per subscription handler, give it to the default handler */ if (mqttCallback != null && !delivered) { aMessage.setId(messageId); mqttCallback.messageArrived(topicName, aMessage); delivered = true; } return delivered; }
@Test public void testUnSubscribeTopic() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); assertEquals(1, mockClient.subscribeCalls); assertTrue(mockClient.mockSubscriptions.containsKey("unit/test/topic")); assertEquals((Integer) 0, mockClient.mockSubscriptions.get("unit/test/topic")); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(1, mcb.receivedMessages.size()); // received first one assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(0)); testClient.unsubscribeTopic("unit/test/topic"); assertEquals(1, mockClient.unsubscribeCalls); assertFalse(mockClient.mockSubscriptions.containsKey("unit/test/topic")); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(1, mcb.receivedMessages.size()); // didn't receive this one }
@Test public void testSubscribeToTopic() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); assertEquals(1, mockClient.subscribeCalls); assertTrue(mockClient.mockSubscriptions.containsKey("unit/test/topic")); assertEquals((Integer) 0, mockClient.mockSubscriptions.get("unit/test/topic")); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(1, mcb.receivedMessages.size()); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(0)); }
@Test public void testMessageArrivedOne() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(1, mcb.receivedMessages.size()); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(0)); }
@Test public void testMessageArrivedTwo() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); testClient.subscribeToTopic("unit/test/+", AWSIotMqttQos.QOS0, mcb); assertEquals(2, mockClient.subscribeCalls); assertEquals(2, mockClient.mockSubscriptions.size()); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(2, mcb.receivedMessages.size()); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(0)); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(1)); }
@Test public void testMessageArrivedThree() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); testClient.subscribeToTopic("unit/test/+", AWSIotMqttQos.QOS0, mcb); testClient.subscribeToTopic("unit/#", AWSIotMqttQos.QOS0, mcb); assertEquals(3, mockClient.subscribeCalls); assertEquals(3, mockClient.mockSubscriptions.size()); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic", msg); assertEquals(3, mcb.receivedMessages.size()); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(0)); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(1)); assertEquals("unit/test/topic" + "test payload", mcb.receivedMessages.get(2)); }
@Test public void testMessageArrivedTooDeep() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/topic/subtopic", msg); assertEquals(0, mcb.receivedMessages.size()); }
@Test public void testMessageArrivedTooShallow() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test", msg); assertEquals(0, mcb.receivedMessages.size()); }
@Test public void testMessageArrivedDifferent() throws Exception { MockMqttClient mockClient = new MockMqttClient(); AWSIotMqttManager testClient = new AWSIotMqttManager("test-client", Region.getRegion(Regions.US_EAST_1), TEST_ENDPOINT_PREFIX); testClient.setMqttClient(mockClient); KeyStore testKeystore = AWSIotKeystoreHelper.getIotKeystore(CERT_ID, KEYSTORE_PATH, KEYSTORE_NAME, KEYSTORE_PASSWORD); testClient.connect(testKeystore, null); TestNewMessageCallback mcb = new TestNewMessageCallback(); testClient.subscribeToTopic("unit/test/topic", AWSIotMqttQos.QOS0, mcb); MqttMessage msg = new MqttMessage(); msg.setPayload("test payload".getBytes(StringUtils.UTF8)); mockClient.mockCallback.messageArrived("unit/test/differenttopic", msg); assertEquals(0, mcb.receivedMessages.size()); }
callback.get().messageArrived("baz", message); Message<?> outMessage = outputChannel.receive(0); assertNotNull(outMessage);
/** * Process notification of a message's arrival * * @param data */ private void messageArrivedAction(Bundle data) { if (callback != null) { String messageId = data .getString(MqttServiceConstants.CALLBACK_MESSAGE_ID); String destinationName = data .getString(MqttServiceConstants.CALLBACK_DESTINATION_NAME); ParcelableMqttMessage message = data .getParcelable(MqttServiceConstants.CALLBACK_MESSAGE_PARCEL); try { if (messageAck == Ack.AUTO_ACK) { callback.messageArrived(destinationName, message); mqttService.acknowledgeMessageArrival(clientHandle, messageId); } else { message.messageId = messageId; callback.messageArrived(destinationName, message); } // let the service discard the saved message details } catch (Exception e) { // Swallow the exception } } }
/** * Process notification of a message's arrival * * @param data */ private void messageArrivedAction(Bundle data) { if (callback != null) { String messageId = data .getString(MqttServiceConstants.CALLBACK_MESSAGE_ID); String destinationName = data .getString(MqttServiceConstants.CALLBACK_DESTINATION_NAME); ParcelableMqttMessage message = data .getParcelable(MqttServiceConstants.CALLBACK_MESSAGE_PARCEL); try { if (messageAck == Ack.AUTO_ACK) { callback.messageArrived(destinationName, message); mqttService.acknowledgeMessageArrival(clientHandle, messageId); } else { message.messageId = messageId; callback.messageArrived(destinationName, message); } // let the service discard the saved message details } catch (Exception e) { // Swallow the exception } } }
@Override public void run() { try { listener.messageArrived(topic, message); } catch (Exception e) { throw SeedException.wrap(e, MqttErrorCode.LISTENER_ERROR) .put("listenerClass", listener.getClass().getName()); } } }
protected boolean deliverMessage(String topicName, int messageId, MqttMessage aMessage) throws Exception { boolean delivered = false; Enumeration keys = callbacks.keys(); while (keys.hasMoreElements()) { String topicFilter = (String)keys.nextElement(); if (MqttTopic.isMatched(topicFilter, topicName)) { aMessage.setId(messageId); ((IMqttMessageListener)(callbacks.get(topicFilter))).messageArrived(topicName, aMessage); delivered = true; } } /* if the message hasn't been delivered to a per subscription handler, give it to the default handler */ if (mqttCallback != null && !delivered) { aMessage.setId(messageId); mqttCallback.messageArrived(topicName, aMessage); delivered = true; } return delivered; }
protected boolean deliverMessage(String topicName, int messageId, MqttMessage aMessage) throws Exception { boolean delivered = false; Enumeration keys = callbacks.keys(); while (keys.hasMoreElements()) { String topicFilter = (String)keys.nextElement(); if (MqttTopic.isMatched(topicFilter, topicName)) { aMessage.setId(messageId); ((IMqttMessageListener)(callbacks.get(topicFilter))).messageArrived(topicName, aMessage); delivered = true; } } /* if the message hasn't been delivered to a per subscription handler, give it to the default handler */ if (mqttCallback != null && !delivered) { aMessage.setId(messageId); mqttCallback.messageArrived(topicName, aMessage); delivered = true; } return delivered; }
@Override public void messageArrived(String topic, MqttMessage message) throws Exception { if (pool != null) { try { pool.submit(new MqttListenerTask(injector.getInstance(listenerKey), topic, message)); } catch (Exception e) { if (this.rejectHandlerKey == null) { MqttListenerDefinition listenerDefinition = clientDefinition.getListenerDefinition(); throw SeedException.wrap(e, MqttErrorCode.LISTENER_ERROR) .put("listenerClass", listenerDefinition != null ? listenerDefinition.getClassName() : "<unknown>"); } injector.getInstance(this.rejectHandlerKey).reject(topic, message); } } else { injector.getInstance(listenerKey).messageArrived(topic, message); } }
private void handleMessage(MqttPublish publishMessage) throws MqttException, Exception { final String methodName = "handleMessage"; // If quisecing process any pending messages. if (mqttCallback != null) { String destName = publishMessage.getTopicName(); // @TRACE 713=call messageArrived key={0} topic={1} log.fine(className, methodName, "713", new Object[] { new Integer(publishMessage.getMessageId()), destName }); mqttCallback.messageArrived(destName, publishMessage.getMessage()); 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())); } } }