Ejemplo n.º 1
0
  private void queueQos2Message(PublishMessage message) throws UnRetriableException {
    if (MqttQoS.EXACTLY_ONCE.value() == message.getQos()) {
      // This message needs to be retained
      // while handshake is completed before being released.

      message.setIsRelease(false);
      Observable<Map.Entry<Long, IotMessageKey>> messageIdObservable =
          getDatastore().saveMessage(message);

      messageIdObservable.subscribe(
          messageIdentity -> {

            // We need to push out a PUBREC

            PublishReceivedMessage publishReceivedMessage =
                PublishReceivedMessage.from(messageIdentity.getValue().getMessageId());
            publishReceivedMessage.copyTransmissionData(message);
            pushToServer(publishReceivedMessage);
          });

    } else
      throw new UnRetriableException(
          "Only qos 2 messages should be Queued for handshake to occur.");
  }