register method

Future<BridgeResponse> register(
  1. BridgeRequest request
)

Register a new outgoing request. Returns a future that completes with the response (or errors on timeout / cancellation).

Implementation

Future<BridgeResponse> register(BridgeRequest request) {
  final completer = Completer<BridgeResponse>();
  final timeout = request.timeout ?? defaultTimeout;

  Timer? timer;
  if (timeout != Duration.zero) {
    timer = Timer(timeout, () {
      if (_pending.containsKey(request.id)) {
        _pending.remove(request.id);
        completer.completeError(
          BridgeError(
            code: ErrorCode.requestCancelled,
            message: 'Request ${request.id} timed out after $timeout',
          ),
        );
      }
    });
  }

  _pending[request.id] = _PendingRequest(
    request: request,
    completer: completer,
    timer: timer,
    registeredAt: DateTime.now(),
  );

  return completer.future;
}