Table of Contents

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

TRequest

The request message type.

TResponse

The 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

client SteamNetworkClient

The initialized SteamNetworkLib client.

defaultTimeout TimeSpan?

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

TimeSpan

PendingRequestCount

Gets the number of requests currently waiting for responses.

public int PendingRequestCount { get; }

Property Value

int

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

responder Func<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 responder is 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

responder Func<TRequest, CSteamID, TResponse>

Function that builds a response for each request.

Returns

IDisposable

A subscription that unregisters this responder.

Exceptions

ArgumentNullException

Thrown when responder is 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

targetId CSteamID

The player that should receive the request.

request TRequest

The request message.

timeout TimeSpan?

Optional timeout for this request.

Returns

Task<TResponse>

The matching response message.

Exceptions

ArgumentNullException

Thrown when request is 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.