sendMessage static method

WaitingMessage sendMessage(
  1. PubSub pubSub,
  2. String event,
  3. Map<String, dynamic> payload
)

Implementation

static WaitingMessage sendMessage(
    PubSub pubSub, String event, Map<String, dynamic> payload) {
  // The channel
  SupervisedTopic? supervisedTopic =
      supervisedTopicByTopic[pubSub.getLocalizedTopic()];
  ExecuteSendMessage? phoenixChannel = supervisedTopic?.channel;
  WaitingMessage waitingMessage;

  if (phoenixChannel == null && !LocalitySocialCloud.isTestMode) {
    // If the channel doesn't exist yet, enqueue the message to be sent later.
    // The messages in the MessageQueue will be resolved in registerPubSub
    // Register PubSub is called again if you regain connection after losing connection
    waitingMessage =
        WaitingMessage(pubSub.getLocalizedTopic(), event, payload);
    MessageQueueSupervisor.getQueueForChannelId(pubSub.getLocalizedTopic())
        .enqueue(waitingMessage);
  } else {
    String uuid = Uuid().v1();
    waitingMessage = WaitingMessage(pubSub.getLocalizedTopic(), event, {
      "event": event,
      "timestamp": DateTime.now().millisecondsSinceEpoch,
      "uuid": uuid,
      "channel": pubSub.getLocalizedTopic()
    });
    ChaCha20Key? key = supervisedTopic?.key;
    if (key != null) {
      waitingMessage.setFinalPayload(PayloadCipher.encodePayload(payload,
          nonce: Nonce.fromString(uuid), chaCha20: ChaCha20(key)));
    } else {
      waitingMessage.setFinalPayload(jsonEncode(payload));
    }
    if (LocalitySocialCloud.isTestMode) {
      processEvent(pubSub, waitingMessage.getFinalPayload(), key);
    } else {
      phoenixChannel!.sendMessage(waitingMessage);
    }
  }

  return waitingMessage;
}