H.Pipes
2.0.17
See the version list below for details.
dotnet add package H.Pipes --version 2.0.17
NuGet\Install-Package H.Pipes -Version 2.0.17
<PackageReference Include="H.Pipes" Version="2.0.17" />
paket add H.Pipes --version 2.0.17
#r "nuget: H.Pipes, 2.0.17"
// Install H.Pipes as a Cake Addin #addin nuget:?package=H.Pipes&version=2.0.17 // Install H.Pipes as a Cake Tool #tool nuget:?package=H.Pipes&version=2.0.17
Async Named Pipe Wrapper for .NET Standard 2.0
A simple, easy to use, strongly-typed, async wrapper around .NET named pipes.
Features
- Create named pipe servers that can handle multiple client connections simultaneously.
- Send strongly-typed messages between clients and servers: any serializable .NET object can be sent over a pipe and will be automatically serialized/deserialized, including cyclical references and complex object graphs.
- Async
- Requires .NET Standard 2.0
- Supports large messages - up to 300 MiB.
- Server restart automatically
- Automatically wait for the release of the pipe for the server, if it is already in use
- Automatically waiting for a server pipe creating when client connecting
- Automatic reconnect with a given interval and at each
client.WriteAsync
, if necessary - Supports variable formatters, default - BinaryFormatter which uses System.Runtime.Serialization.BinaryFormatter inside
- Also available ready formatters in separate nuget packages: H.Formatters.Newtonsoft.Json, H.Formatters.System.Text.Json and H.Formatters.Ceras
- Supports
PipeAccessRule
's(seeH.Pipes.AccessControl
nuget package) or more complex code to access using thePipeServer.PipeStreamInitializeAction
property
Nuget
// All clients and servers that do not need support AccessControl.
Install-Package H.Pipes
// Servers that need support AccessControl.
Install-Package H.Pipes.AccessControl
// If you want to transfer any data that can be serialized/deserialized in json using Newtonsoft.Json.
Install-Package H.Formatters.Newtonsoft.Json
// If you want to transfer any data that can be serialized/deserialized in json using System.Text.Json.
Install-Package H.Formatters.System.Text.Json
// If you want to transfer any data that can be serialized/deserialized in binary using Ceras.
Install-Package H.Formatters.Ceras
Usage
Server:
await using var server = new PipeServer<MyMessage>(pipeName);
server.ClientConnected += async (o, args) =>
{
Console.WriteLine($"Client {args.Connection.PipeName} is now connected!");
await args.Connection.WriteAsync(new MyMessage
{
Text = "Welcome!"
});
};
server.ClientDisconnected += (o, args) =>
{
Console.WriteLine($"Client {args.Connection.PipeName} disconnected");
};
server.MessageReceived += (sender, args) =>
{
Console.WriteLine($"Client {args.Connection.PipeName} says: {args.Message}");
};
server.ExceptionOccurred += (o, args) => OnExceptionOccurred(args.Exception);
await server.StartAsync();
await Task.Delay(Timeout.InfiniteTimeSpan);
P.S. To use the server inside the WinForms application, use Task.Run(). This creates a new thread for it.
Client:
await using var client = new PipeClient<MyMessage>(pipeName);
client.MessageReceived += (o, args) => Console.WriteLine("MessageReceived: " + args.Message);
client.Disconnected += (o, args) => Console.WriteLine("Disconnected from server");
client.Connected += (o, args) => Console.WriteLine("Connected to server");
client.ExceptionOccurred += (o, args) => OnExceptionOccurred(args.Exception);
await client.ConnectAsync();
await client.WriteAsync(new MyMessage
{
Text = "Hello!",
});
await Task.Delay(Timeout.InfiniteTimeSpan);
Custom Formatters
Since BinaryFormatter is used by default, you should check out this article: https://docs.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide
Install-Package H.Formatters.Newtonsoft.Json
Install-Package H.Formatters.System.Text.Json
Install-Package H.Formatters.Ceras
using H.Formatters;
await using var server = new PipeServer<MyMessage>(pipeName, formatter: new NewtonsoftJsonFormatter());
await using var client = new PipeClient<MyMessage>(pipeName, formatter: new NewtonsoftJsonFormatter());
Access Control
Install-Package H.Pipes.AccessControl
using System.IO.Pipes;
using H.Pipes.AccessControl;
await using var server = new PipeServer<string>(pipeName);
// You can set PipeSecurity
var pipeSecurity = new PipeSecurity();
pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow));
server.SetPipeSecurity(pipeSecurity);
// or just add AccessRule's (Please be careful, the server will only consider AccessRules from the last call AddAccessRules())
server.AddAccessRules(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow));
// or just
server.AllowUsersReadWrite();
Encryption
Install-Package H.Formatters.Inferno
using H.Formatters;
await using var server = new PipeServer<MyMessage>(pipeName, formatter: new InfernoFormatter(new SystemTextJsonFormatter()));
server.EnableEncryption();
await using var client = new PipeClient<MyMessage>(pipeName, formatter: new InfernoFormatter(new SystemTextJsonFormatter()));
client.EnableEncryption();
GetImpersonationUserName
server.ClientConnected += async (o, args) =>
{
var name = args.Connection.GetImpersonationUserName();
Console.WriteLine($"Client {name} is now connected!");
};
Inter-process communication
I recommend that you take a look at my other library if you plan on doing IPC.
It is based on this library, but provides an IPC implementation based on C# interfaces.
It supports remote method invocation, asynchronous methods, cancellation via CancellationToken
, events, and so on.
Contacts
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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.1
- H.Formatters.BinaryFormatter (>= 2.0.17)
- Microsoft.Bcl.AsyncInterfaces (>= 6.0.0)
-
.NETStandard 2.0
- H.Formatters.BinaryFormatter (>= 2.0.17)
- Microsoft.Bcl.AsyncInterfaces (>= 6.0.0)
-
.NETStandard 2.1
- H.Formatters.BinaryFormatter (>= 2.0.17)
NuGet packages (9)
Showing the top 5 NuGet packages that depend on H.Pipes:
Package | Downloads |
---|---|
H.Pipes.AccessControl
This package adds AccessControl extensions for PipeServerSetPipeSecurity() |
|
H.Formatters.Inferno
This package adds InfernoFormatter(based on Inferno). It allows encrypt your messages. |
|
H.ProxyFactory.Pipes
Features: - Create proxy objects that look exactly like the original objects - Proxy target can be located anywhere where there is access to pipes ⭐ Last 10 features: - feat: Updated NuGet packages. 2022-01-19 - feat: Added ContinuousIntegrationBuild. 2021-11-29 - feat: Added separate H.ProxyFactory.Remote library. 2021-11-29 - feat: Added separate H.Ipc.Core library. Refactored. 2021-11-29 - feat: Added RemoteProxyServer.ObjectCreated event. 2021-11-28 - feat: Implemented safe CreateObjectAsync. 2021-10-30 - feat: Added try catch to example app. 2021-10-30 - feat: Added CLSCompliant(true). 2021-10-30 - feat: to auto-releases. 2021-10-29 - feat: Implemented example WPF app. 2021-10-29 🐞 Last 10 bug fixes: - fix(test): Removed H.Recorders.NAudioRecorder package from tests. 2022-01-19 - fix: Renamed H.Ipc.Messages to H.ProxyFactory.Remote.Messages. 2021-11-30 - fix: Changed CI build to windows-latest. 2021-10-30 - fix: Added Factory.LoadAssemblyAsync to example app. 2021-10-30 - fix: Fixed H.ProxyFactory.Pipes warnings. 2021-10-30 - fix: Fixed H.ProxyFactory warnings. 2021-10-30 |
|
H.Utilities.PipeProxyFactory
Features: - Create proxy objects that look exactly like the original objects - Proxy target can be located anywhere where there is access to pipes |
|
T.Pipes
T.Pipes Core. T.Pipes.Abstractions implementaion with T.Pipes.SourceGeneration support. |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on H.Pipes:
Repository | Stars |
---|---|
mgth/LittleBigMouse
DPI Aware mouse move across screens
|
|
ad2017gd/RainbowTaskbar
Powerful, customizable Windows 10/11 taskbar effects.
|
Version | Downloads | Last updated |
---|---|---|
14.0.0 | 3,238 | 10/21/2024 |
2.2.2-dev.2 | 48 | 10/21/2024 |
2.2.1 | 734 | 10/19/2024 |
2.2.1-dev.2 | 71 | 10/19/2024 |
2.1.0-dev.322 | 792 | 1/20/2024 |
2.1.0-dev.318 | 136 | 12/18/2023 |
2.0.59 | 69,720 | 12/8/2023 |
2.0.56 | 2,728 | 11/27/2023 |
2.0.53 | 23,404 | 7/24/2023 |
2.0.51 | 11,384 | 5/25/2023 |
2.0.47 | 14,994 | 2/27/2023 |
2.0.46 | 970 | 2/26/2023 |
2.0.45 | 7,724 | 2/2/2023 |
2.0.44 | 9,019 | 1/10/2023 |
2.0.43 | 1,929 | 1/5/2023 |
2.0.42 | 31,667 | 9/14/2022 |
2.0.41 | 1,981 | 9/9/2022 |
2.0.40 | 3,728 | 8/26/2022 |
2.0.39 | 1,410 | 8/26/2022 |
2.0.38 | 12,038 | 6/2/2022 |
2.0.37 | 3,847 | 4/21/2022 |
2.0.35 | 76,711 | 3/17/2022 |
2.0.34 | 1,567 | 3/12/2022 |
2.0.33 | 1,475 | 3/12/2022 |
2.0.32 | 1,410 | 3/12/2022 |
2.0.31 | 2,372 | 3/11/2022 |
2.0.30 | 1,462 | 3/11/2022 |
2.0.29 | 1,470 | 3/11/2022 |
2.0.26 | 1,499 | 3/7/2022 |
2.0.25 | 1,439 | 3/6/2022 |
2.0.23 | 9,507 | 12/21/2021 |
2.0.22 | 973 | 12/21/2021 |
2.0.21 | 6,904 | 12/20/2021 |
2.0.20 | 990 | 12/20/2021 |
2.0.19 | 1,052 | 12/20/2021 |
2.0.18 | 1,085 | 12/20/2021 |
2.0.17 | 1,018 | 12/20/2021 |
2.0.16 | 977 | 12/20/2021 |
2.0.15 | 912 | 12/20/2021 |
2.0.14 | 2,333 | 12/5/2021 |
2.0.13 | 912 | 12/5/2021 |
1.15.12 | 1,014 | 12/5/2021 |
1.15.11 | 1,679 | 11/29/2021 |
1.15.10 | 4,578 | 11/25/2021 |
1.15.9 | 3,080 | 11/25/2021 |
1.15.8 | 3,305 | 11/25/2021 |
1.15.7 | 3,178 | 11/25/2021 |
1.15.6 | 4,454 | 11/24/2021 |
1.15.4 | 6,400 | 11/24/2021 |
1.15.2 | 3,812 | 10/22/2021 |
1.15.1 | 988 | 10/22/2021 |
1.14.8 | 8,358 | 1/4/2021 |
1.14.7 | 4,264 | 12/15/2020 |
1.14.6 | 10,922 | 12/9/2020 |
1.14.5 | 1,100 | 12/9/2020 |
1.14.4 | 4,650 | 11/22/2020 |
1.14.2 | 1,160 | 11/22/2020 |
1.14.1 | 2,908 | 10/8/2020 |
1.14.0 | 1,183 | 10/8/2020 |
1.13.4 | 1,239 | 10/8/2020 |
1.13.1 | 1,480 | 7/5/2020 |
1.13.0 | 1,531 | 5/20/2020 |
1.12.3 | 1,516 | 2/2/2020 |
1.12.2 | 2,480 | 2/1/2020 |
1.12.1 | 1,303 | 2/1/2020 |
1.0.12 | 2,751 | 1/29/2020 |
1.0.11 | 1,514 | 1/28/2020 |
1.0.10 | 1,190 | 1/28/2020 |
1.0.9 | 1,326 | 1/14/2020 |
1.0.8 | 1,270 | 1/14/2020 |
1.0.7 | 1,506 | 1/12/2020 |
1.0.6.1 | 1,260 | 1/11/2020 |
1.0.6 | 1,338 | 1/10/2020 |
1.0.5 | 1,123 | 1/10/2020 |
1.0.4 | 1,124 | 1/10/2020 |
1.0.3 | 1,182 | 1/10/2020 |
1.0.2.3 | 1,129 | 1/9/2020 |
1.0.2.2 | 1,116 | 1/9/2020 |
1.0.2.1 | 1,096 | 1/9/2020 |
1.0.2 | 1,089 | 1/8/2020 |
1.0.1 | 1,115 | 1/8/2020 |
1.0.0 | 1,158 | 1/7/2020 |
⭐ Last 10 features:
- feat: Updated README. 2021-12-20
- feat: Added ContinuousIntegrationBuild. 2021-12-20
- feat: Updated Microsoft.SourceLink.GitHub to 1.1.1. 2021-12-20
- feat: Added H.Formatters.Inferno EnableEncryption extensions. 2021-12-20
- feat: Added IFormatter to IPipeClient interface. 2021-12-20
- feat: Converted formatter Internal methods to protected. 2021-12-20
- feat: Deleted Formatter context. 2021-12-20
- feat: Added Formatter context. 2021-12-20
- feat: Added H.Pipes versioning to formatters. 2021-12-20
- feat: Deleted Connection Id and Name properties. Added PipeName and ServerName properties. 2021-12-06
🐞 Last 10 bug fixes:
- fix: Fixed Inferno KeyPair missing disposing. 2021-12-20
- fix: Fixed some Inferno KeyPair code. 2021-12-20
- fix: Converted Inferno KeyPair to internal class. 2021-12-20
- fix: Fixed Inferno namespaces. 2021-12-20
- fix: Fixed Inferno extensions memory leak. 2021-12-20
- fix: Deleted InfernoFormatter.SerializeAsyncIfPossible. 2021-12-20
- fix: Fixed some Inferno Formatter code. 2021-12-20
- fix: Fixed some Inferno warnings. 2021-12-20
- fix: Fixed Inferno target frameworks. 2021-12-20
- fix: Fixed Inferno .csproj files. 2021-12-20