/** * Add a message to the publishing queue. A publish call adds to the queue * if the client is unable to publish (offline). * Behavior on a full queue is defined by fullQueueKeepsOldest. If this is true * we keep the oldest values so we skip adding on a full queue. If this is false * we want the queue to always have the latest values so pop the first element out * and append. * * @param data byte array of message payload. * @param topic message topic. * @param qos The quality of service requested for this message. * @param publishMessageUserData The user supplied data for this message including a * callback and context. */ void putMessageInQueueAndNotify(byte[] data, String topic, AWSIotMqttQos qos, PublishMessageUserData publishMessageUserData) { final AWSIotMqttQueueMessage message = new AWSIotMqttQueueMessage(topic, data, qos, publishMessageUserData); if (mqttMessageQueue.size() >= offlinePublishQueueBound) { if (fullQueueKeepsOldest) { notifyPublishResult(publishMessageUserData.getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, publishMessageUserData.getUserData(), new AmazonClientException("Failed to publish the message. Queue is full and set to hold onto the oldest messages.")); return; } else { mqttMessageQueue.remove(0); } } mqttMessageQueue.add(message); }
mqttClient.publish(topic, data, qos.asInt(), false, publishMessageUserData, null); } catch (final MqttException e) { notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client error while publishing.", e)); putMessageInQueueAndNotify(data, topic, qos, publishMessageUserData); } else { notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client error while publishing : Offline publish queue is not enabled and client is not connected")); notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client is disconnected or not yet connected."));
@Override public void deliveryComplete(IMqttDeliveryToken token) { LOGGER.info("delivery is complete"); if (token != null) { final Object o = token.getUserContext(); if (o instanceof PublishMessageUserData) { final PublishMessageUserData pmud = (PublishMessageUserData) o; notifyPublishResult(pmud.getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Success, pmud.getUserData(), null); } } } });
notifyPublishResult(message.getUserData().getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, message.getUserData().getUserData(),
/** * Add a message to the publishing queue. A publish call adds to the queue * if the client is unable to publish (offline). * Behavior on a full queue is defined by fullQueueKeepsOldest. If this is true * we keep the oldest values so we skip adding on a full queue. If this is false * we want the queue to always have the latest values so pop the first element out * and append. * * @param data byte array of message payload. * @param topic message topic. * @param qos The quality of service requested for this message. * @param publishMessageUserData The user supplied data for this message including a * callback and context. */ void putMessageInQueueAndNotify(byte[] data, String topic, AWSIotMqttQos qos, PublishMessageUserData publishMessageUserData) { final AWSIotMqttQueueMessage message = new AWSIotMqttQueueMessage(topic, data, qos, publishMessageUserData); if (mqttMessageQueue.size() >= offlinePublishQueueBound) { if (fullQueueKeepsOldest) { notifyPublishResult(publishMessageUserData.getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, publishMessageUserData.getUserData(), new AmazonClientException("Failed to publish the message. Queue is full and set to hold onto the oldest messages.")); return; } else { mqttMessageQueue.remove(0); } } mqttMessageQueue.add(message); }
mqttClient.publish(topic, data, qos.asInt(), false, publishMessageUserData, null); } catch (final MqttException e) { notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client error while publishing.", e)); putMessageInQueueAndNotify(data, topic, qos, publishMessageUserData); } else { notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client error while publishing : Offline publish queue is not enabled and client is not connected")); notifyPublishResult(callback, AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, userData, new AmazonClientException("Client is disconnected or not yet connected."));
@Override public void deliveryComplete(IMqttDeliveryToken token) { LOGGER.info("delivery is complete"); if (token != null) { final Object o = token.getUserContext(); if (o instanceof PublishMessageUserData) { final PublishMessageUserData pmud = (PublishMessageUserData) o; notifyPublishResult(pmud.getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Success, pmud.getUserData(), null); } } } });
notifyPublishResult(message.getUserData().getUserCallback(), AWSIotMqttMessageDeliveryCallback.MessageDeliveryStatus.Fail, message.getUserData().getUserData(),