Table of Contents

Class RpcPeer

Namespace
DotBoxD.Services.Peer
Assembly
DotBoxD.Services.dll

One symmetric side of a DotBoxD connection. A peer can provide local services and get proxies for remote services over one demuxed read loop.

public sealed class RpcPeer : IAsyncDisposable, IRpcInvoker
Inheritance
RpcPeer
Implements
Inherited Members

Properties

IsConnected

Gets whether the underlying channel is still connected.

public bool IsConnected { get; }

Property Value

bool

RemoteEndpoint

The remote endpoint string of the underlying channel.

public string RemoteEndpoint { get; }

Property Value

string

Methods

CloseAsync(CancellationToken)

Closes the peer by disposing it; closed peers cannot be restarted.

public Task CloseAsync(CancellationToken ct = default)

Parameters

ct CancellationToken

Returns

Task

Remarks

Disposal always runs to completion: ct fails fast only before any teardown begins, and never abandons an in-progress dispose to finish in the background.

DisposeAsync()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.

public ValueTask DisposeAsync()

Returns

ValueTask

A task that represents the asynchronous dispose operation.

Get<TService>()

Creates a proxy to call TService on the other side.

public TService Get<TService>() where TService : class

Returns

TService

Type Parameters

TService

InvokeAsync(string, string, CancellationToken)

Invokes a method with neither a request nor a response body.

public Task InvokeAsync(string service, string method, CancellationToken ct = default)

Parameters

service string

The remote service name.

method string

The method to invoke.

ct CancellationToken

Cancellation token.

Returns

Task

InvokeAsyncEnumerableAsync<T>(string, string, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableAsync<T>(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

T

InvokeAsyncEnumerableAsync<TRequest, T>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableAsync<TRequest, T>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

TRequest
T

InvokeAsyncEnumerableAsync<TRequest, T>(string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableAsync<TRequest, T>(string service, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

TRequest
T

InvokeAsyncEnumerableOnInstanceAsync<T>(string, string, string, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableOnInstanceAsync<T>(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

T

InvokeAsyncEnumerableOnInstanceAsync<TRequest, T>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableOnInstanceAsync<TRequest, T>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

TRequest
T

InvokeAsyncEnumerableOnInstanceAsync<TRequest, T>(string, string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableOnInstanceAsync<TRequest, T>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<IAsyncEnumerable<T>>

Type Parameters

TRequest
T

InvokeAsyncEnumerableOnInstance<T>(string, string, string, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerableOnInstance<T>(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

InvokeAsyncEnumerableOnInstance<TRequest, T>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerableOnInstance<TRequest, T>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

TRequest
T

InvokeAsyncEnumerableOnInstance<TRequest, T>(string, string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerableOnInstance<TRequest, T>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

TRequest
T

InvokeAsyncEnumerable<T>(string, string, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerable<T>(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

InvokeAsyncEnumerable<TRequest, T>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerable<TRequest, T>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

TRequest
T

InvokeAsyncEnumerable<TRequest, T>(string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public IAsyncEnumerable<T> InvokeAsyncEnumerable<TRequest, T>(string service, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

TRequest
T

InvokeAsync<TResponse>(string, string, CancellationToken)

Invokes a method with no request body and a response body.

public Task<TResponse> InvokeAsync<TResponse>(string service, string method, CancellationToken ct = default)

Parameters

service string

The remote service name.

method string

The method to invoke.

ct CancellationToken

Cancellation token.

Returns

Task<TResponse>

Type Parameters

TResponse

InvokeAsync<TRequest>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task InvokeAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task

Type Parameters

TRequest

InvokeAsync<TRequest>(string, string, TRequest, RpcStreamAttachment[], CancellationToken)

Invokes a no-response method with a request body that references streamed arguments.

public Task InvokeAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment[] streams, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task

Type Parameters

TRequest

InvokeAsync<TRequest>(string, string, TRequest, CancellationToken)

Invokes a method with a request body and no response body.

public Task InvokeAsync<TRequest>(string service, string method, TRequest request, CancellationToken ct = default)

Parameters

service string

The remote service name.

method string

The method to invoke.

request TRequest

The request payload.

ct CancellationToken

Cancellation token.

Returns

Task

Type Parameters

TRequest

InvokeAsync<TRequest, TResponse>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<TResponse> InvokeAsync<TRequest, TResponse>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokeAsync<TRequest, TResponse>(string, string, TRequest, RpcStreamAttachment[], CancellationToken)

Invokes a method with a request body that references streamed arguments.

public Task<TResponse> InvokeAsync<TRequest, TResponse>(string service, string method, TRequest request, RpcStreamAttachment[] streams, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokeAsync<TRequest, TResponse>(string, string, TRequest, CancellationToken)

Invokes a method with a request body and a response body.

public Task<TResponse> InvokeAsync<TRequest, TResponse>(string service, string method, TRequest request, CancellationToken ct = default)

Parameters

service string

The remote service name.

method string

The method to invoke.

request TRequest

The request payload.

ct CancellationToken

Cancellation token.

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokeOnInstanceAsync(string, string, string, CancellationToken)

Invokes an instance-scoped method with neither a request nor a response body.

public Task InvokeOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string

The remote service name.

instanceId string

The target instance identifier.

method string

The method to invoke.

ct CancellationToken

Cancellation token.

Returns

Task

InvokeOnInstanceAsync<TResponse>(string, string, string, CancellationToken)

Invokes an instance-scoped method with no request body and a response body.

public Task<TResponse> InvokeOnInstanceAsync<TResponse>(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string

The remote service name.

instanceId string

The target instance identifier.

method string

The method to invoke.

ct CancellationToken

Cancellation token.

Returns

Task<TResponse>

Type Parameters

TResponse

InvokeOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task InvokeOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task

Type Parameters

TRequest

InvokeOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment[], CancellationToken)

public Task InvokeOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[] streams, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task

Type Parameters

TRequest

InvokeOnInstanceAsync<TRequest>(string, string, string, TRequest, CancellationToken)

Invokes an instance-scoped method with a request body and no response body.

public Task InvokeOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, CancellationToken ct = default)

Parameters

service string

The remote service name.

instanceId string

The target instance identifier.

method string

The method to invoke.

request TRequest

The request payload.

ct CancellationToken

Cancellation token.

Returns

Task

Type Parameters

TRequest

InvokeOnInstanceAsync<TRequest, TResponse>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<TResponse> InvokeOnInstanceAsync<TRequest, TResponse>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokeOnInstanceAsync<TRequest, TResponse>(string, string, string, TRequest, RpcStreamAttachment[], CancellationToken)

public Task<TResponse> InvokeOnInstanceAsync<TRequest, TResponse>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[] streams, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokeOnInstanceAsync<TRequest, TResponse>(string, string, string, TRequest, CancellationToken)

Invokes a method on a specific remote sub-service instance.

public Task<TResponse> InvokeOnInstanceAsync<TRequest, TResponse>(string service, string instanceId, string method, TRequest request, CancellationToken ct = default)

Parameters

service string

The remote service name.

instanceId string

The target instance identifier.

method string

The method to invoke.

request TRequest

The request payload.

ct CancellationToken

Cancellation token.

Returns

Task<TResponse>

Type Parameters

TRequest
TResponse

InvokePipeAsync(string, string, CancellationToken)

public Task<Pipe> InvokePipeAsync(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

Task<Pipe>

InvokePipeAsync<TRequest>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<Pipe> InvokePipeAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<Pipe>

Type Parameters

TRequest

InvokePipeAsync<TRequest>(string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<Pipe> InvokePipeAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<Pipe>

Type Parameters

TRequest

InvokePipeOnInstanceAsync(string, string, string, CancellationToken)

public Task<Pipe> InvokePipeOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

Task<Pipe>

InvokePipeOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<Pipe> InvokePipeOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<Pipe>

Type Parameters

TRequest

InvokePipeOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<Pipe> InvokePipeOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<Pipe>

Type Parameters

TRequest

InvokeStreamAsync(string, string, CancellationToken)

public Task<Stream> InvokeStreamAsync(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

Task<Stream>

InvokeStreamAsync<TRequest>(string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<Stream> InvokeStreamAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<Stream>

Type Parameters

TRequest

InvokeStreamAsync<TRequest>(string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<Stream> InvokeStreamAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<Stream>

Type Parameters

TRequest

InvokeStreamOnInstanceAsync(string, string, string, CancellationToken)

public Task<Stream> InvokeStreamOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

Task<Stream>

InvokeStreamOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment, CancellationToken)

public Task<Stream> InvokeStreamOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
stream RpcStreamAttachment
ct CancellationToken

Returns

Task<Stream>

Type Parameters

TRequest

InvokeStreamOnInstanceAsync<TRequest>(string, string, string, TRequest, RpcStreamAttachment[]?, CancellationToken)

public Task<Stream> InvokeStreamOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, RpcStreamAttachment[]? streams = null, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
streams RpcStreamAttachment[]
ct CancellationToken

Returns

Task<Stream>

Type Parameters

TRequest

InvokeValueAsync(string, string, CancellationToken)

public ValueTask InvokeValueAsync(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

ValueTask

InvokeValueAsync<TResponse>(string, string, CancellationToken)

public ValueTask<TResponse> InvokeValueAsync<TResponse>(string service, string method, CancellationToken ct = default)

Parameters

service string
method string
ct CancellationToken

Returns

ValueTask<TResponse>

Type Parameters

TResponse

InvokeValueAsync<TRequest>(string, string, TRequest, CancellationToken)

public ValueTask InvokeValueAsync<TRequest>(string service, string method, TRequest request, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
ct CancellationToken

Returns

ValueTask

Type Parameters

TRequest

InvokeValueAsync<TRequest, TResponse>(string, string, TRequest, CancellationToken)

public ValueTask<TResponse> InvokeValueAsync<TRequest, TResponse>(string service, string method, TRequest request, CancellationToken ct = default)

Parameters

service string
method string
request TRequest
ct CancellationToken

Returns

ValueTask<TResponse>

Type Parameters

TRequest
TResponse

InvokeValueOnInstanceAsync(string, string, string, CancellationToken)

public ValueTask InvokeValueOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

ValueTask

InvokeValueOnInstanceAsync<TResponse>(string, string, string, CancellationToken)

public ValueTask<TResponse> InvokeValueOnInstanceAsync<TResponse>(string service, string instanceId, string method, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
ct CancellationToken

Returns

ValueTask<TResponse>

Type Parameters

TResponse

InvokeValueOnInstanceAsync<TRequest>(string, string, string, TRequest, CancellationToken)

public ValueTask InvokeValueOnInstanceAsync<TRequest>(string service, string instanceId, string method, TRequest request, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
ct CancellationToken

Returns

ValueTask

Type Parameters

TRequest

InvokeValueOnInstanceAsync<TRequest, TResponse>(string, string, string, TRequest, CancellationToken)

public ValueTask<TResponse> InvokeValueOnInstanceAsync<TRequest, TResponse>(string service, string instanceId, string method, TRequest request, CancellationToken ct = default)

Parameters

service string
instanceId string
method string
request TRequest
ct CancellationToken

Returns

ValueTask<TResponse>

Type Parameters

TRequest
TResponse

Over(IRpcChannel, ISerializer, RpcPeerOptions?)

Creates a peer over channel. Call Start() to begin the read loop (invoking a method also starts it implicitly).

public static RpcPeer Over(IRpcChannel channel, ISerializer serializer, RpcPeerOptions? options = null)

Parameters

channel IRpcChannel
serializer ISerializer
options RpcPeerOptions

Returns

RpcPeer

Provide(IServiceDispatcher)

Provides a service via an explicit dispatcher.

public RpcPeer Provide(IServiceDispatcher dispatcher)

Parameters

dispatcher IServiceDispatcher

Returns

RpcPeer

Provide<TService>()

Resolves and provides a local implementation of TService from the configured service provider.

public RpcPeer Provide<TService>() where TService : class

Returns

RpcPeer

Type Parameters

TService

Provide<TService>(TService)

Provides a local implementation of TService for the other side to call.

public RpcPeer Provide<TService>(TService implementation) where TService : class

Parameters

implementation TService

Returns

RpcPeer

Type Parameters

TService

Remarks

Provided services are callable by any peer on this channel; enforce access control at the transport or application layer.

ReleaseStream(RpcStreamHandle)

Releases a stream id reservation that was never attached to an RPC request.

public void ReleaseStream(RpcStreamHandle handle)

Parameters

handle RpcStreamHandle

ReserveStream(RpcStreamKind)

Reserves a stream id for a streamed argument sent by this peer.

public RpcStreamHandle ReserveStream(RpcStreamKind kind)

Parameters

kind RpcStreamKind

Returns

RpcStreamHandle

Start()

Begins the read loop. Idempotent; safe to call from a fluent chain.

public RpcPeer Start()

Returns

RpcPeer

Events

Disconnected

Raised when the read loop ends after a remote close or read error; local close/dispose does not raise it. Handlers run on the teardown path and should not block.

public event EventHandler<RpcDisconnectedEventArgs>? Disconnected

Event Type

EventHandler<RpcDisconnectedEventArgs>

DispatchError

Raised when an inbound request fails outside the service method itself — for example when the response or error frame cannot be sent. Exceptions thrown by a provided service method are not surfaced here; they are converted into an Error frame returned to the caller.

public event EventHandler<RpcDispatchErrorEventArgs>? DispatchError

Event Type

EventHandler<RpcDispatchErrorEventArgs>

ProtocolError

Raised when a malformed or unsupported protocol frame is observed.

public event EventHandler<RpcProtocolErrorEventArgs>? ProtocolError

Event Type

EventHandler<RpcProtocolErrorEventArgs>

ReadError

Raised when the read loop fails with a non-cancellation exception.

public event EventHandler<RpcReadErrorEventArgs>? ReadError

Event Type

EventHandler<RpcReadErrorEventArgs>