sendOrFallback static method
Future<bool>
sendOrFallback({
- required VoxeraRoomMessageChannel? channel,
- required String? identity,
- required void remember(
- String messageId
- required Future<
VoxeraRoomSendResult> send(- VoxeraRoomMessageChannel channel,
- String cid
- required Future<
bool> viaDataChannel(),
Sends on the room socket when channel is connected and identity is
known, otherwise through viaDataChannel (whose result is returned).
remember gets the message id before the send, so the sender drops its
own echo.
Returns false when the engine refused the message; the data channel is NOT used then, because a refusal is the room's cap or lock speaking.
Implementation
static Future<bool> sendOrFallback({
required VoxeraRoomMessageChannel? channel,
required String? identity,
required void Function(String messageId) remember,
required Future<VoxeraRoomSendResult> Function(
VoxeraRoomMessageChannel channel,
String cid,
)
send,
required Future<bool> Function() viaDataChannel,
}) async {
if (channel != null && channel.isConnected && identity != null) {
final cid = newCid();
remember(messageId(identity, cid));
final result = await send(channel, cid);
if (result == VoxeraRoomSendResult.sent) return true;
if (result == VoxeraRoomSendResult.refused) return false;
}
return viaDataChannel();
}