sendMessage method

  1. @override
Future<DeliveryStatus> sendMessage(
  1. Message m
)
override

Sends m to the backend and returns its DeliveryStatus.

Implementation

@override
Future<DeliveryStatus> sendMessage(Message m) async {
  if (!_connected) return DeliveryStatus.fail('not connected');

  final ack = ++_ackCounter;
  final completer = Completer<DeliveryStatus>();
  _pending[m.id] = completer;

  _send({
    'type': 'message',
    'ack': ack,
    'payload': encodeMessage(m),
  });

  // Timeout after 15 s.
  return completer.future.timeout(
    const Duration(seconds: 15),
    onTimeout: () {
      _pending.remove(m.id);
      return DeliveryStatus.fail('send timeout');
    },
  );
}