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