sendWithAck method

Future<void> sendWithAck(
  1. WebSocketMessage message
)

Sends message and returns a Future that completes when the server acknowledges it, or throws TimeoutException after retries are exhausted.

Implementation

Future<void> sendWithAck(WebSocketMessage message) {
  if (_disposed) return Future.error(StateError('AckManager disposed'));

  final id = _generateId();
  final meta = Map<String, dynamic>.from(message.metadata ?? {});
  meta[_kAckIdKey] = id;

  final wrapped = WebSocketMessage(
    data: message.data,
    timestamp: message.timestamp,
    type: message.type,
    metadata: meta,
  );

  final pending = _PendingAck(id: id, message: wrapped);
  _pending[id] = pending;

  _sender(wrapped).then((_) {
    pending.scheduleTimeout(timeout, _onTimeout);
  }).catchError((e) {
    _pending.remove(id);
    pending.fail(e);
  });

  return pending.future;
}