From e14223a34133e2db6284eda8dad5adb17d64b64e Mon Sep 17 00:00:00 2001 From: rongsaws Date: Fri, 8 Jul 2016 06:06:31 +0000 Subject: [PATCH] Release of version 1.0.1 --- README.md | 8 ++- aws-iot-device-sdk-java-samples/pom.xml | 4 +- .../samples-pom.xml | 9 +--- aws-iot-device-sdk-java/pom.xml | 4 +- .../iot/client/core/AbstractAwsIotClient.java | 49 ++++++++++++++++--- .../client/mqtt/AwsIotMqttClientListener.java | 10 +--- pom.xml | 2 +- 7 files changed, 55 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index fa1ebaa48a..7cc04172aa 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ of your Maven project. com.amazonaws aws-iot-device-sdk-java - 1.0.0 + 1.0.1 ``` @@ -88,7 +88,7 @@ The sample applications included with the SDK can also be installed using the fo com.amazonaws aws-iot-device-sdk-java-samples - 1.0.0 + 1.0.1 ``` @@ -101,9 +101,7 @@ include them to your library build path. You will also need to add two libraries the SDK depends on: * Jackson 2.x, including Jackson-core and Jackson-databind. [download instructions][jackson-download] - * Paho MQTT client for Java 1.0.x. [download instructions][paho-mqtt-java-download] - (Note: If you plan to use MQTT over WebSocket connections, use its development branch or snapshot builds here - https://repo.eclipse.org/content/repositories/paho-snapshots/.) + * Paho MQTT client for Java 1.1.x. [download instructions][paho-mqtt-java-download] ### Build the SDK from the GitHub Source You can build both the SDK and its sample applications from the source diff --git a/aws-iot-device-sdk-java-samples/pom.xml b/aws-iot-device-sdk-java-samples/pom.xml index 97e4b60630..4cc9507b43 100644 --- a/aws-iot-device-sdk-java-samples/pom.xml +++ b/aws-iot-device-sdk-java-samples/pom.xml @@ -3,14 +3,14 @@ com.amazonaws aws-iot-device-sdk-java-pom - 1.0.0 + 1.0.1 aws-iot-device-sdk-java-samples com.amazonaws aws-iot-device-sdk-java - 1.0.0 + 1.0.1 diff --git a/aws-iot-device-sdk-java-samples/samples-pom.xml b/aws-iot-device-sdk-java-samples/samples-pom.xml index 263c1b4631..b2aa9800a7 100644 --- a/aws-iot-device-sdk-java-samples/samples-pom.xml +++ b/aws-iot-device-sdk-java-samples/samples-pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.amazonaws aws-iot-device-sdk-java-samples - 1.0.0 + 1.0.1 org.apache.maven.plugins @@ -12,7 +12,7 @@ com.amazonaws aws-iot-device-sdk-java - 1.0.0 + 1.0.1 com.fasterxml.jackson.core @@ -24,11 +24,6 @@ jackson-databind 2.7.4 - - org.eclipse.paho - org.eclipse.paho.client.mqttv3 - [1.0.2,) - diff --git a/aws-iot-device-sdk-java/pom.xml b/aws-iot-device-sdk-java/pom.xml index a6ac904c8a..c5249583a9 100644 --- a/aws-iot-device-sdk-java/pom.xml +++ b/aws-iot-device-sdk-java/pom.xml @@ -3,7 +3,7 @@ com.amazonaws aws-iot-device-sdk-java-pom - 1.0.0 + 1.0.1 aws-iot-device-sdk-java @@ -38,7 +38,7 @@ org.eclipse.paho org.eclipse.paho.client.mqttv3 - [1.0.2,) + [1.1.0,) diff --git a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java index 45ab35b4ae..bff9b9015c 100644 --- a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java +++ b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java @@ -279,12 +279,49 @@ public void unsubscribe(AWSIotTopic topic, long timeout) throws AWSIotException } } - public void dispatch(AWSIotMessage message) { - AWSIotTopic topic = subscriptions.get(message.getTopic()); - if (topic != null) { - topic.onMessage(message); - } else { - LOGGER.warning("Unexpected message received from topic " + message.getTopic()); + public boolean topicFilterMatch(String topicFilter, String topic) { + if (topicFilter == null || topic == null) { + return false; + } + + String[] filterTokens = topicFilter.split("/"); + String[] topicTokens = topic.split("/"); + if (filterTokens.length > topicTokens.length) { + return false; + } + + for (int i = 0; i < filterTokens.length; i++) { + if (filterTokens[i].equals("#")) { + // '#' must be the last character + return ((i + 1) == filterTokens.length); + } + + if (!(filterTokens[i].equals(topicTokens[i]) || filterTokens[i].equals("+"))) { + return false; + } + } + + return (filterTokens.length == topicTokens.length); + } + + public void dispatch(final AWSIotMessage message) { + boolean matches = false; + + for (String topicFilter : subscriptions.keySet()) { + if (topicFilterMatch(topicFilter, message.getTopic())) { + final AWSIotTopic topic = subscriptions.get(topicFilter); + scheduleTask(new Runnable() { + @Override + public void run() { + topic.onMessage(message); + } + }); + matches = true; + } + } + + if (!matches) { + LOGGER.warning("Unexpected message received from topic " + message.getTopic()); } } diff --git a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java index adf1865301..c0c30c349f 100644 --- a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java +++ b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java @@ -52,14 +52,8 @@ public void deliveryComplete(IMqttDeliveryToken arg0) { @Override public void messageArrived(String topic, MqttMessage arg1) throws Exception { - final AWSIotMessage message = new AWSIotMessage(topic, AWSIotQos.valueOf(arg1.getQos()), arg1.getPayload()); - - client.scheduleTask(new Runnable() { - @Override - public void run() { - client.dispatch(message); - } - }); + AWSIotMessage message = new AWSIotMessage(topic, AWSIotQos.valueOf(arg1.getQos()), arg1.getPayload()); + client.dispatch(message); } } diff --git a/pom.xml b/pom.xml index b037e9bb04..76f12f467d 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.amazonaws aws-iot-device-sdk-java-pom - 1.0.0 + 1.0.1 pom AWS IoT Device SDK for Java The AWS IoT Device SDK for Java provides Java APIs for devices to connect to AWS IoT service using the MQTT protocol. The SDK also provides support for AWS IoT specific features, such as Thing Shadow and Thing Shadow abstraction.