Class RpcPeer
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
RemoteEndpoint
The remote endpoint string of the underlying channel.
public string RemoteEndpoint { get; }
Property Value
Methods
CloseAsync(CancellationToken)
Closes the peer by disposing it; closed peers cannot be restarted.
public Task CloseAsync(CancellationToken ct = default)
Parameters
Returns
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
servicestringThe remote service name.
methodstringThe method to invoke.
ctCancellationTokenCancellation token.
Returns
InvokeAsyncEnumerableAsync<T>(string, string, CancellationToken)
public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableAsync<T>(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
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
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
- Task<IAsyncEnumerable<T>>
Type Parameters
TRequestT
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
- Task<IAsyncEnumerable<T>>
Type Parameters
TRequestT
InvokeAsyncEnumerableOnInstanceAsync<T>(string, string, string, CancellationToken)
public Task<IAsyncEnumerable<T>> InvokeAsyncEnumerableOnInstanceAsync<T>(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
- Task<IAsyncEnumerable<T>>
Type Parameters
TRequestT
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
- Task<IAsyncEnumerable<T>>
Type Parameters
TRequestT
InvokeAsyncEnumerableOnInstance<T>(string, string, string, CancellationToken)
public IAsyncEnumerable<T> InvokeAsyncEnumerableOnInstance<T>(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
Type Parameters
TRequestT
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequestT
InvokeAsyncEnumerable<T>(string, string, CancellationToken)
public IAsyncEnumerable<T> InvokeAsyncEnumerable<T>(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
Returns
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
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
Type Parameters
TRequestT
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequestT
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
servicestringThe remote service name.
methodstringThe method to invoke.
ctCancellationTokenCancellation 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
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
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
servicestringThe remote service name.
methodstringThe method to invoke.
requestTRequestThe request payload.
ctCancellationTokenCancellation token.
Returns
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
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
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
servicestringThe remote service name.
methodstringThe method to invoke.
requestTRequestThe request payload.
ctCancellationTokenCancellation token.
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
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
servicestringThe remote service name.
instanceIdstringThe target instance identifier.
methodstringThe method to invoke.
ctCancellationTokenCancellation token.
Returns
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
servicestringThe remote service name.
instanceIdstringThe target instance identifier.
methodstringThe method to invoke.
ctCancellationTokenCancellation 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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
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
servicestringThe remote service name.
instanceIdstringThe target instance identifier.
methodstringThe method to invoke.
requestTRequestThe request payload.
ctCancellationTokenCancellation token.
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
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
servicestringThe remote service name.
instanceIdstringThe target instance identifier.
methodstringThe method to invoke.
requestTRequestThe request payload.
ctCancellationTokenCancellation token.
Returns
- Task<TResponse>
Type Parameters
TRequestTResponse
InvokePipeAsync(string, string, CancellationToken)
public Task<Pipe> InvokePipeAsync(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
Returns
InvokePipeAsync<TRequest>(string, string, TRequest, RpcStreamAttachment, CancellationToken)
public Task<Pipe> InvokePipeAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)
Parameters
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequest
InvokePipeOnInstanceAsync(string, string, string, CancellationToken)
public Task<Pipe> InvokePipeOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequest
InvokeStreamAsync(string, string, CancellationToken)
public Task<Stream> InvokeStreamAsync(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
Returns
InvokeStreamAsync<TRequest>(string, string, TRequest, RpcStreamAttachment, CancellationToken)
public Task<Stream> InvokeStreamAsync<TRequest>(string service, string method, TRequest request, RpcStreamAttachment stream, CancellationToken ct = default)
Parameters
servicestringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequest
InvokeStreamOnInstanceAsync(string, string, string, CancellationToken)
public Task<Stream> InvokeStreamOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamRpcStreamAttachmentctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequeststreamsRpcStreamAttachment[]ctCancellationToken
Returns
Type Parameters
TRequest
InvokeValueAsync(string, string, CancellationToken)
public ValueTask InvokeValueAsync(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
Returns
InvokeValueAsync<TResponse>(string, string, CancellationToken)
public ValueTask<TResponse> InvokeValueAsync<TResponse>(string service, string method, CancellationToken ct = default)
Parameters
servicestringmethodstringctCancellationToken
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
servicestringmethodstringrequestTRequestctCancellationToken
Returns
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
servicestringmethodstringrequestTRequestctCancellationToken
Returns
- ValueTask<TResponse>
Type Parameters
TRequestTResponse
InvokeValueOnInstanceAsync(string, string, string, CancellationToken)
public ValueTask InvokeValueOnInstanceAsync(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
Returns
InvokeValueOnInstanceAsync<TResponse>(string, string, string, CancellationToken)
public ValueTask<TResponse> InvokeValueOnInstanceAsync<TResponse>(string service, string instanceId, string method, CancellationToken ct = default)
Parameters
servicestringinstanceIdstringmethodstringctCancellationToken
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
servicestringinstanceIdstringmethodstringrequestTRequestctCancellationToken
Returns
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
servicestringinstanceIdstringmethodstringrequestTRequestctCancellationToken
Returns
- ValueTask<TResponse>
Type Parameters
TRequestTResponse
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
channelIRpcChannelserializerISerializeroptionsRpcPeerOptions
Returns
Provide(IServiceDispatcher)
Provides a service via an explicit dispatcher.
public RpcPeer Provide(IServiceDispatcher dispatcher)
Parameters
dispatcherIServiceDispatcher
Returns
Provide<TService>()
Resolves and provides a local implementation of TService from the configured service provider.
public RpcPeer Provide<TService>() where TService : class
Returns
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
implementationTService
Returns
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
handleRpcStreamHandle
ReserveStream(RpcStreamKind)
Reserves a stream id for a streamed argument sent by this peer.
public RpcStreamHandle ReserveStream(RpcStreamKind kind)
Parameters
kindRpcStreamKind
Returns
Start()
Begins the read loop. Idempotent; safe to call from a fluent chain.
public RpcPeer Start()
Returns
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
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
ProtocolError
Raised when a malformed or unsupported protocol frame is observed.
public event EventHandler<RpcProtocolErrorEventArgs>? ProtocolError
Event Type
ReadError
Raised when the read loop fails with a non-cancellation exception.
public event EventHandler<RpcReadErrorEventArgs>? ReadError