register method
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;
}