SetNet.Rpc
1.2.0
dotnet add package SetNet.Rpc --version 1.2.0
NuGet\Install-Package SetNet.Rpc -Version 1.2.0
<PackageReference Include="SetNet.Rpc" Version="1.2.0" />
<PackageVersion Include="SetNet.Rpc" Version="1.2.0" />
<PackageReference Include="SetNet.Rpc" />
paket add SetNet.Rpc --version 1.2.0
#r "nuget: SetNet.Rpc, 1.2.0"
#:package SetNet.Rpc@1.2.0
#addin nuget:?package=SetNet.Rpc&version=1.2.0
#tool nuget:?package=SetNet.Rpc&version=1.2.0
<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; aCancellationTokenis 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 exactlyclient.RequestAsync<TReq,TResp>(Channels.Rpc, methodId, req)— the same request/reply mechanism (one envelope, one correlation registry), carried on the reservedChannels.Rpcchannel with the RPC method id as the op. PreferRequestAsyncfor new code;CallAsync+[RpcMethod]remain as a typed method-id front end. - Serializer-agnostic, no MessagePack dependency —
SetNet.Rpcdepends only onSetNet. The request/response bodies go through yourSetNetSerializer(MessagePack, JSON, …); both ends must use the same serializer. - No per-package wire ids anymore — RPC rides the single
SetNet.Protocolenvelope (65447) like the rest.
Documentation & source
License
MIT
| Product | Versions 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. |
-
.NETStandard 2.1
- SetNet (>= 1.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.