NTDLS.ReliableMessaging 1.3.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package NTDLS.ReliableMessaging --version 1.3.1
                    
NuGet\Install-Package NTDLS.ReliableMessaging -Version 1.3.1
                    
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="NTDLS.ReliableMessaging" Version="1.3.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NTDLS.ReliableMessaging" Version="1.3.1" />
                    
Directory.Packages.props
<PackageReference Include="NTDLS.ReliableMessaging" />
                    
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 NTDLS.ReliableMessaging --version 1.3.1
                    
#r "nuget: NTDLS.ReliableMessaging, 1.3.1"
                    
#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 NTDLS.ReliableMessaging@1.3.1
                    
#: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=NTDLS.ReliableMessaging&version=1.3.1
                    
Install as a Cake Addin
#tool nuget:?package=NTDLS.ReliableMessaging&version=1.3.1
                    
Install as a Cake Tool

NTDLS.ReliableMessaging

📦 Be sure to check out the NuGet pacakge: https://www.nuget.org/packages/NTDLS.ReliableMessaging

NTDLS.ReliableMessaging provides incredibly lightweight, reliable, and high-performance TCP/IP based inter-process-communication functionality. This includes a server which listens for incoming connections and a client which makes a connection to the server.

Once connected the server and the client can send fire-and-forget style notifications or dispatch queries which require a reply.

All messages are guaranteed to be received in their entirety and in the order in which they were dispatched.

Example of server and client sending notifications and a query:

//Class used to send a notification.
internal class MyNotification : IFramePayloadNotification
{
    public string Message { get; set; }

    public MyNotification(string message)
    {
        Message = message;
    }
}

//Class used to send a query (which expects a response).
internal class MyQuery : IFramePayloadQuery
{
    public string Message { get; set; }

    public MyQuery(string message)
    {
        Message = message;
    }
}

//Class used to reply to a query.
internal class MyQueryReply : IFramePayloadQueryReply
{
    public string Message { get; set; }

    public MyQueryReply(string message)
    {
        Message = message;
    }
}

static void Main()
{
    //Start a server and add a "query received" and "notification received" event handler.
    var server = new MessageServer();
    server.OnQueryReceived += Server_OnQueryReceived;
    server.OnNotificationReceived += Server_OnNotificationReceived;
    server.Start(45784);

    //Start a client and connect to the server.
    var client = new MessageClient();
    client.Connect("localhost", 45784);

    client.Notify(new MyNotification("This is message 001 from the client."));
    client.Notify(new MyNotification("This is message 002 from the client."));
    client.Notify(new MyNotification("This is message 003 from the client."));

    //Send a query to the server, specify which type of reply we expect.
    client.Query<MyQueryReply>(new MyQuery("This is the query from the client.")).ContinueWith(x =>
    {
        //If we recevied a reply, print it to the console.
        if (x.IsCompletedSuccessfully && x.Result != null)
        {
            Console.WriteLine($"Client received query reply: '{x.Result.Message}'");
        }
    });

    Console.WriteLine("Press [enter] to shutdown.");
    Console.ReadLine();

    //Cleanup.
    client.Disconnect();
    server.Stop();
}

private static void Server_OnNotificationReceived(MessageServer server, Guid connectionId, IFramePayloadNotification payload)
{
    if (payload is MyNotification notification)
    {
        Console.WriteLine($"Server received notification: {notification.Message}");
    }
    else
    {
        throw new NotImplementedException();
    }
}

private static IFramePayloadQueryReply Server_OnQueryReceived(MessageServer server, Guid connectionId, IFramePayloadQuery payload)
{
    if (payload is MyQuery query)
    {
        Console.WriteLine($"Server received query: '{query.Message}'");

        //Return with a class that implements IFrameQueryReply to reply to the client.
        return new MyQueryReply("This is the query reply from the server.");
    }
    else
    {
        throw new NotImplementedException();
    }
}
Product Compatible and additional computed target framework versions.
.NET 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 is compatible.  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.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on NTDLS.ReliableMessaging:

Package Downloads
NTDLS.CatMQ.Shared

Shared library for NTDLS.CatMQ.Client and NTDLS.CatMQ.Server. Versioned independently from the dependent packages.

NTDLS.MemoryQueue

An in-memory, non-persistent message queue designed for efficient inter-process communication, task queuing, load balancing, and data buffering over TCP/IP

NTDLS.KitKey.Shared

Shared library for NTDLS.KitKey.Client and NTDLS.KitKey.Server. Versioned independently from the dependent packages.

NTDLS.Katzebase.Api

Client for Katzebase document-based database engine for Windows and Linux.

NTDLS.Katzebase.Client.dev

Client for Katzebase document-based database engine for Windows and Linux.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.2.8 87 8/23/2025
3.2.7 179 6/3/2025
3.2.6 217 5/27/2025
3.2.5 139 5/23/2025
3.2.4 161 5/22/2025
3.2.3 243 5/22/2025
3.2.2 167 5/22/2025
3.2.1 155 5/22/2025
3.2.0 153 5/22/2025
3.1.1 166 5/21/2025
3.1.0 166 5/20/2025
3.0.2 163 5/19/2025
3.0.1 175 5/16/2025
3.0.0 214 5/16/2025
2.1.8 237 5/14/2025
2.1.7 268 5/14/2025
2.1.6 180 5/2/2025
2.1.5 255 3/10/2025
2.1.4 136 3/2/2025
2.1.3 167 1/31/2025
2.1.2 159 1/30/2025
2.1.1 169 1/25/2025
2.1.0 133 1/19/2025
2.0.1 341 1/13/2025
2.0.0 154 1/13/2025
1.12.0 158 1/11/2025
1.11.7 208 1/8/2025
1.11.6 263 1/4/2025
1.11.5 176 1/4/2025
1.11.4 385 12/31/2024
1.11.3 147 12/31/2024
1.11.2 138 12/27/2024
1.11.1 159 12/26/2024
1.11.0 250 12/21/2024
1.10.18 173 12/3/2024
1.10.17 142 12/3/2024
1.10.16 135 10/22/2024
1.10.15 140 10/22/2024
1.10.14 125 10/22/2024
1.10.13 123 10/22/2024
1.10.12 143 10/13/2024
1.10.11 141 10/13/2024
1.10.10 138 10/13/2024
1.10.9 707 8/28/2024
1.10.8 248 8/25/2024
1.10.7 193 8/24/2024
1.10.6 184 8/20/2024
1.10.5 180 8/20/2024
1.10.4 185 8/13/2024
1.10.3 162 8/13/2024
1.10.2 169 8/13/2024
1.10.1 153 8/13/2024
1.10.0 189 8/12/2024
1.9.3 275 8/7/2024
1.9.2 135 8/7/2024
1.9.1 153 8/5/2024
1.9.0 117 8/5/2024
1.8.8 107 8/3/2024
1.8.7 131 8/1/2024
1.8.6 244 6/26/2024
1.8.5 161 6/20/2024
1.8.4 158 6/19/2024
1.8.3 152 6/19/2024
1.8.2 156 6/11/2024
1.8.1 141 6/11/2024
1.8.0 155 6/10/2024
1.7.6 148 6/8/2024
1.7.5 169 6/8/2024
1.7.4 134 6/8/2024
1.7.3 169 6/7/2024
1.7.2 142 6/7/2024
1.7.1 166 6/7/2024
1.7.0 136 6/7/2024
1.6.2 163 6/6/2024
1.6.1 164 6/6/2024
1.6.0 150 6/6/2024
1.5.5 158 6/6/2024
1.5.4 142 6/6/2024
1.5.3 154 6/6/2024
1.5.2 174 6/5/2024
1.5.1 169 5/3/2024
1.5.0 138 5/2/2024
1.4.1 187 2/19/2024
1.4.0 264 2/15/2024
1.3.11 504 2/1/2024
1.3.10 335 1/31/2024
1.3.9 177 1/22/2024
1.3.8 150 1/22/2024
1.3.7 177 1/4/2024
1.3.6 180 12/29/2023
1.3.5 162 12/27/2023
1.3.4 178 12/27/2023
1.3.3 176 12/22/2023
1.3.2 156 12/21/2023
1.3.1 147 12/21/2023
1.3.0 158 12/21/2023
1.2.4 171 12/19/2023
1.2.3 179 12/18/2023
1.2.2 205 11/15/2023
1.2.1 151 11/10/2023
1.2.0 165 11/7/2023
1.1.0 157 11/7/2023
1.0.1 151 11/7/2023
1.0.0 150 11/6/2023

Added server Disconnect() and GetClient() to get underlying TcpClient.