diff --git a/lib/src/participant/local.dart b/lib/src/participant/local.dart index 55367183..e3bb1873 100644 --- a/lib/src/participant/local.dart +++ b/lib/src/participant/local.dart @@ -1044,16 +1044,21 @@ extension RPCMethods on LocalParticipant { final requestId = Uuid().v4(); final completer = Completer(); - final maxRoundTripLatency = Duration(seconds: 2); + final maxRoundTripLatency = Duration(seconds: 7); + final minEffectiveTimeout = const Duration(milliseconds: 1000); try { + final effectiveTimeout = Duration( + milliseconds: (params.responseTimeoutMs.inMilliseconds - maxRoundTripLatency.inMilliseconds) + .clamp(minEffectiveTimeout.inMilliseconds, double.infinity) + .toInt(), + ); await publishRpcRequest( destinationIdentity: params.destinationIdentity, requestId: requestId, method: params.method, payload: params.payload, - responseTimeout: - Duration(milliseconds: params.responseTimeoutMs.inMilliseconds - maxRoundTripLatency.inMilliseconds), + responseTimeout: effectiveTimeout, version: kRpcVesion, ); diff --git a/lib/src/types/rpc.dart b/lib/src/types/rpc.dart index 624cab88..0e906d18 100644 --- a/lib/src/types/rpc.dart +++ b/lib/src/types/rpc.dart @@ -10,14 +10,17 @@ class PerformRpcParams { /// The payload of the request. String payload; - /// The maximum time the caller will wait for a response. + /// Timeout for receiving a response after the initial connection (in milliseconds). + /// If a value less than 8000 ms is provided, it will be automatically clamped to 8000 ms + /// to ensure sufficient time for round-trip latency buffering. + /// Default: 15000 ms. Duration responseTimeoutMs; PerformRpcParams({ required this.destinationIdentity, required this.method, required this.payload, - this.responseTimeoutMs = const Duration(milliseconds: 10000), + this.responseTimeoutMs = const Duration(milliseconds: 15000), }); }