sendStanza method

Future<XMLNode?> sendStanza(
  1. StanzaDetails details
)

Sends a stanza described by details to the server. Until sent, the stanza is kept in a queue, that is flushed after going online again. If Stream Management is active, stanza's acknowledgement is tracked.

Implementation

// TODO(Unknown): if addId = false, the function crashes.
Future<XMLNode?> sendStanza(StanzaDetails details) async {
  assert(
    implies(
      details.awaitable,
      details.stanza.id != null && details.stanza.id!.isNotEmpty ||
          details.addId,
    ),
    'An awaitable stanza must have an id',
  );

  final completer = details.awaitable ? Completer<XMLNode>() : null;
  final entry = StanzaQueueEntry(
    details,
    completer,
  );

  if (details.bypassQueue) {
    await _sendStanzaImpl(entry);
  } else {
    await _stanzaQueue.enqueueStanza(entry);
  }

  return completer?.future;
}