SetNet.Rpc 1.2.0

dotnet add package SetNet.Rpc --version 1.2.0
                    
NuGet\Install-Package SetNet.Rpc -Version 1.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SetNet.Rpc" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SetNet.Rpc" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="SetNet.Rpc" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SetNet.Rpc --version 1.2.0
                    
#r "nuget: SetNet.Rpc, 1.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SetNet.Rpc@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SetNet.Rpc&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=SetNet.Rpc&version=1.2.0
                    
Install as a Cake Tool

<p align="center"> <img src="https://raw.githubusercontent.com/Povstalez/SetNet/master/assets/icon.png" alt="SetNet" width="96"> </p>

SetNet.Rpc

Request/response RPC for SetNet.

await client.CallAsync<TRequest, TResponse>(...) on the client, [RpcMethod] handlers on the server — added by composition, not inheritance. No RpcClient/RpcPeer base class: it sits alongside your regular SendAsync calls and message handlers. Just reference the package.

Install

dotnet add package SetNet
dotnet add package SetNet.MessagePack   # or your own ISerializer
dotnet add package SetNet.Rpc

At startup (once), register your serializer and enable RPC before constructing the client/server:

using SetNet.Messaging;
using SetNet.MessagePack;
using SetNet.Rpc;

SetNetSerializer.Use(new MessagePackNetSerializer());
RpcRuntime.Enable();   // ensures the RPC handlers are discovered

Usage

Define request/response messages (serializable by your chosen serializer):

public enum Rpc : ushort { Login = 1 }

[MessagePackObject] public class LoginRequest  { [Key(0)] public string User { get; set; } = ""; }
[MessagePackObject] public class LoginResponse { [Key(0)] public bool Ok; [Key(1)] public string Token { get; set; } = ""; }

Server — implement a handler (auto-discovered, like [MessageHandler]):

[RpcMethod((ushort)Rpc.Login)]
public class LoginRpc : IRpcHandler<LoginRequest, LoginResponse>
{
    public Task<LoginResponse> HandleAsync(BasePeer peer, LoginRequest req)
        => Task.FromResult(new LoginResponse { Ok = true, Token = "..." });
}

Client — call it and await the response:

var reply = await client.CallAsync<LoginRequest, LoginResponse>(
    (ushort)Rpc.Login,
    new LoginRequest { User = "alice" },
    timeoutMs: 5000);
  • A server-side exception is relayed and re-thrown on the caller as RpcException.
  • No response within the timeout throws TimeoutException; a CancellationToken is honored.
  • Your existing one-way messages (SendAsync + [MessageHandler]) keep working unchanged.

Notes

  • A thin alias over the unified protocol. client.CallAsync<TReq,TResp>(methodId, req) is exactly client.RequestAsync<TReq,TResp>(Channels.Rpc, methodId, req) — the same request/reply mechanism (one envelope, one correlation registry), carried on the reserved Channels.Rpc channel with the RPC method id as the op. Prefer RequestAsync for new code; CallAsync + [RpcMethod] remain as a typed method-id front end.
  • Serializer-agnostic, no MessagePack dependencySetNet.Rpc depends only on SetNet. The request/response bodies go through your SetNetSerializer (MessagePack, JSON, …); both ends must use the same serializer.
  • No per-package wire ids anymore — RPC rides the single SetNet.Protocol envelope (65447) like the rest.

Documentation & source

License

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.1

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 102 8/5/2026
1.1.0 119 7/2/2026