sendMessage static method
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;
}