submitMessage static method

Future<StoreAck> submitMessage(
  1. P2PStream stream,
  2. PeerId recipientPeerId,
  3. Uint8List payload, {
  4. MessagePriority priority = MessagePriority.normal,
  5. Duration? expiry,
  6. String? folderPath,
  7. bool persistent = false,
  8. String? messageId,
  9. SFMessageFlags flags = SFMessageFlags.none,
})

Submit a message to the server (client-side)

Implementation

static Future<StoreAck> submitMessage(
  P2PStream stream,
  PeerId recipientPeerId,
  Uint8List payload, {
  MessagePriority priority = MessagePriority.normal,
  Duration? expiry,
  String? folderPath,
  bool persistent = false,
  String? messageId,
  SFMessageFlags flags = SFMessageFlags.none,
}) async {
  try {
    // A caller that sealed the payload to a message id supplies that id;
    // otherwise one is minted here.
    final message = SFMessage.withDefaultExpiry(
      messageId: messageId ?? _uuid.v4(),
      recipientPeerId: recipientPeerId,
      senderPeerId: stream.conn.localPeer,
      payload: payload,
      priority: priority,
      persistent: persistent,
    );

    // Create final message with all parameters
    final finalMessage = SFMessage(
      messageId: message.messageId,
      recipientPeerId: recipientPeerId,
      senderPeerId: stream.conn.localPeer,
      payload: payload,
      priority: priority,
      expiryTimestamp: expiry != null
          ? DateTime.now().add(expiry).millisecondsSinceEpoch
          : message.expiryTimestamp,
      hopCount: message.hopCount,
      flags: message.flags.withFlag(flags.value),
      createdTimestamp: message.createdTimestamp,
      folderPath: folderPath,
      persistent: persistent,
    );

    // Encode and send with length prefix
    final frameBytes = SubmissionFrame.encodeMessage(finalMessage);
    await _writeFrameStatic(stream, frameBytes);

    // Read acknowledgment
    final ackBytes = await _readFrameStatic(stream);
    return SubmissionFrame.decodeAck(ackBytes);
  } catch (e, stackTrace) {
    _logger.severe('Error submitting message: $e', e, stackTrace);
    rethrow;
  }
}