VoltRpc.Communication.Pipes
3.1.0
dotnet add package VoltRpc.Communication.Pipes --version 3.1.0
NuGet\Install-Package VoltRpc.Communication.Pipes -Version 3.1.0
<PackageReference Include="VoltRpc.Communication.Pipes" Version="3.1.0" />
paket add VoltRpc.Communication.Pipes --version 3.1.0
#r "nuget: VoltRpc.Communication.Pipes, 3.1.0"
// Install VoltRpc.Communication.Pipes as a Cake Addin #addin nuget:?package=VoltRpc.Communication.Pipes&version=3.1.0 // Install VoltRpc.Communication.Pipes as a Cake Tool #tool nuget:?package=VoltRpc.Communication.Pipes&version=3.1.0
VoltRpc
VoltRpc - An RPC library which is designed to be both simple to use and fast.
Features
- Its fast (See the benchmarks)
- Supports all built-in C# value types, including:
Bool
Byte
Char
Decimal
Double
Float
Int
Long
SByte
Short
UInt
ULong
UShort
- Supports these built-in .NET types: (More to be added)
String
DateTime
TimeSpan
Uri
Guid
Vector2
Vector3
Vector4
Plane
Quaternion
Matrix3x2
Matrix4x4
- Supports arrays for any type
- Easily support custom types by implementing a
TypeReadWriter<T>
- Proxy generated by using a .NET Source Generator
- Simple to use
Getting Started
Installation
VoltRpc can be installed from NuGet. You will also need the proxy generator (also on NuGet).
<ItemGroup>
<PackageReference Include="VoltRpc" Version="3.2.0" />
<PackageReference Include="VoltRpc.Proxy.Generator" Version="2.3.0" />
</ItemGroup>
Example
For a more in-depth example, see the Overview or Setup.
There is also a demo project included.
[GenerateProxy(GeneratedName = "TestProxy")]
public interface ITestInterface
{
public void DoSomethingCool();
public int GetTheCoolValue();
}
public class TestInterface : ITestInterface
{
public void DoSomethingCool()
{
Console.WriteLine("Something Cool!");
}
public int GetTheCoolValue()
{
return 69;
}
}
public class Program
{
IPEndPoint ip = new(IPAddress.Loopback, 7767);
TestInterface test = new();
//Host
Host host = new TCPHost(ip);
host.AddService<ITestInterface>(test);
host.StartListening().ConfigureAwait(false);
//Client
Client client = new TCPClient(ip);
client.AddService<ITestInterface>();
client.Connect();
//Now we can call to method like it was normal C#
TestProxy proxy = new(client);
proxy.DoSomethingCool();
}
Benchmarks
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19044.1826 (21H2)
Intel Core i5-10600KF CPU 4.10GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK=6.0.302
[Host] : .NET 6.0.7 (6.0.722.32202), X64 RyuJIT
Job-TDLHXN : .NET 6.0.7 (6.0.722.32202), X64 RyuJIT
Jit=Default Platform=AnyCpu Runtime=.NET 6.0
(Currently, the in-built arrays are quite a lot slower, we are looking into fixing this in a later release)
Method | message | array | Mean | Error | StdDev |
---|---|---|---|---|---|
BasicVoid | ? | ? | 6.311 μs | 0.0517 μs | 0.0432 μs |
BasicReturn | ? | ? | 7.444 μs | 0.0589 μs | 0.0551 μs |
ArrayReturn | ? | ? | 21.389 μs | 0.3943 μs | 0.6695 μs |
ArrayFast | ? | ? | 1,579.432 μs | 10.1223 μs | 9.4684 μs |
BasicParameterVoid | Hello World! | ? | 7.128 μs | 0.0390 μs | 0.0346 μs |
BasicParameterReturn | Hello World! | ? | 8.287 μs | 0.0364 μs | 0.0304 μs |
ArrayParameterVoid | ? | Byte[25] | 18.423 μs | 0.3675 μs | 0.6140 μs |
ArrayParameterReturn | ? | Byte[25] | 28.647 μs | 0.5643 μs | 0.9112 μs |
ArrayParameterVoid | ? | Byte[8294400] | 2,705,942.687 μs | 11,965.3253 μs | 11,192.3727 μs |
ArrayParameterReturn | ? | Byte[8294400] | 5,416,337.679 μs | 21,036.1040 μs | 18,647.9583 μs |
For more info on these benchmarks see Benchmarks.
Authors
Voltstro - Initial work - Voltstro
License
This project is licensed under the MIT license – see the LICENSE.md file for details.
Credits
- Mirror
NetworkReader.cs
used as a base forBufferedReader.cs
NetworkWriter.cs
used as a base forBufferedWriter.cs
- Parts of
BufferedStream.cs
from the .NET Runtime was also used in the reader.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. 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. |
.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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on VoltRpc.Communication.Pipes:
Repository | Stars |
---|---|
Voltstro-Studios/UnityWebBrowser
Unity Web Browser (UWB) is a Unity package that allows displaying and interacting with the web from within Unity.
|
See https://projects.voltstro.dev/VoltRpc/changelog/ for details