Class P2PRequestResponseClient<TRequest, TResponse>
- Namespace
- SteamNetworkLib.Utilities
- Assembly
- SteamNetworkLib.dll
Coordinates correlated P2P request/response exchanges for two message types.
public sealed class P2PRequestResponseClient<TRequest, TResponse> : IDisposable where TRequest : P2PMessage, IP2PCorrelatedMessage, new() where TResponse : P2PMessage, IP2PResponseMessage, new()
Type Parameters
TRequestThe request message type.
TResponseThe response message type.
- Inheritance
-
P2PRequestResponseClient<TRequest, TResponse>
- Implements
- Inherited Members
Remarks
Create one coordinator per request/response pair after Initialize() succeeds. The coordinator registers the response message handler, assigns a request ID when needed, tracks pending requests, and fails timed-out requests.
Constructors
P2PRequestResponseClient(SteamNetworkClient, TimeSpan?)
Initializes a new instance of the P2PRequestResponseClient<TRequest, TResponse> class.
public P2PRequestResponseClient(SteamNetworkClient client, TimeSpan? defaultTimeout = null)
Parameters
clientSteamNetworkClientThe initialized SteamNetworkLib client.
defaultTimeoutTimeSpan?The default request timeout. Defaults to 10 seconds.
Properties
DefaultTimeout
Gets the timeout used when SendRequestAsync(CSteamID, TRequest, TimeSpan?) does not receive an explicit timeout.
public TimeSpan DefaultTimeout { get; }
Property Value
PendingRequestCount
Gets the number of requests currently waiting for responses.
public int PendingRequestCount { get; }
Property Value
Methods
Dispose()
Completes pending requests with an error and releases coordinator state.
public void Dispose()
RegisterResponder(Func<TRequest, CSteamID, Task<TResponse>>)
Registers a responder that receives requests and sends correlated responses.
public IDisposable RegisterResponder(Func<TRequest, CSteamID, Task<TResponse>> responder)
Parameters
responderFunc<TRequest, CSteamID, Task<TResponse>>Async function that builds a response for each request.
Returns
- IDisposable
A subscription that unregisters this responder.
Exceptions
- ArgumentNullException
Thrown when
responderis null.- ObjectDisposedException
Thrown when the coordinator has been disposed.
RegisterResponder(Func<TRequest, CSteamID, TResponse>)
Registers a synchronous responder that receives requests and sends correlated responses.
public IDisposable RegisterResponder(Func<TRequest, CSteamID, TResponse> responder)
Parameters
responderFunc<TRequest, CSteamID, TResponse>Function that builds a response for each request.
Returns
- IDisposable
A subscription that unregisters this responder.
Exceptions
- ArgumentNullException
Thrown when
responderis null.- ObjectDisposedException
Thrown when the coordinator has been disposed.
SendRequestAsync(CSteamID, TRequest, TimeSpan?)
Sends a request and waits for the matching response.
public Task<TResponse> SendRequestAsync(CSteamID targetId, TRequest request, TimeSpan? timeout = null)
Parameters
targetIdCSteamIDThe player that should receive the request.
requestTRequestThe request message.
timeoutTimeSpan?Optional timeout for this request.
Returns
- Task<TResponse>
The matching response message.
Exceptions
- ArgumentNullException
Thrown when
requestis null.- ArgumentOutOfRangeException
Thrown when the effective timeout is outside the supported range.
- ObjectDisposedException
Thrown when the coordinator has been disposed.
- TimeoutException
Thrown when no matching response arrives before the timeout.