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                
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="VoltRpc.Communication.Pipes" Version="3.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add VoltRpc.Communication.Pipes --version 3.1.0                
#r "nuget: VoltRpc.Communication.Pipes, 3.1.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.
// 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

License NuGet NuGet Download Count Build Status Docs Status Discord

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  

Pipes Non-Array

Pipes Non-Array

(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

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.
Version Downloads Last updated
3.1.0 847 1/24/2024
3.0.0 1,649 8/5/2022
2.0.1 1,659 5/22/2022
2.0.0 1,532 1/6/2022
1.2.1 1,554 12/30/2021
1.2.0 1,666 11/13/2021
1.1.0 1,767 8/7/2021
1.0.0 1,718 8/1/2021