Samhammer.SocketServer.Server 8.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Samhammer.SocketServer.Server --version 8.0.1                
NuGet\Install-Package Samhammer.SocketServer.Server -Version 8.0.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="Samhammer.SocketServer.Server" Version="8.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Samhammer.SocketServer.Server --version 8.0.1                
#r "nuget: Samhammer.SocketServer.Server, 8.0.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.
// Install Samhammer.SocketServer.Server as a Cake Addin
#addin nuget:?package=Samhammer.SocketServer.Server&version=8.0.1

// Install Samhammer.SocketServer.Server as a Cake Tool
#tool nuget:?package=Samhammer.SocketServer.Server&version=8.0.1                

Samhammer.SocketServer

Note: The implementation is currently uni directional and only ment for communication from the server to the client.

Note2: This repo is private for multiple reasons, even though the server project would be reusable:

  • To not disclose infrastructure information over the appsettings of the api
  • Beacuse the api docker image is in our private docker registry

Samhammer.SocketServer.Server

A library to integrate websocket technology into an existing api project.

What can it do:

  • Provide endpoint of a socket server
  • Establish and keep open connections
  • Send messages from the server to one or multiple clients
  • Handles clientId stuff (first message sent to the client is the clientId)

How to use

Install the nuge package "Samhammer.SocketServer.Server".

Adjust jour Program.cs like that:

    builder.Services.AddSocketServer(builder.Configuration); // There are overloads for different scenarios 

    var app = builder.Build();

    app.MapSocketServer("/ws"); // Endpoint under which the socket server runs

If you use "AddSocketServer(builder.Configuration)" add this config block to appsettings:

  "SocketServerOptions": {
    "HeartbeatIntervalSeconds": 300,
    "MaxBufferSizeInKb": 500
  },
  • HeartbeatIntervalSeconds: Configure how often keep alive messages should be transfered
  • MaxBufferSizeInKb: Max message lengt. Everything langer will be cut off

Inject IWebsocketService to use the server:

  • Task<bool> SendText(string clientId, string text) ⇒ Send a message to a specific client (returns true in case of success)
  • Task BroadcastText(string text) ⇒ Send a message to all connected clients
  • List<string> GetActiveClients() ⇒ Get a list of active client ids

Samhammer.SocketServer.Api

This is an entire api project that uses Samhammer.SocketServer.Server to provide endpoints for it's functionality.

How to use

Take a look at appsettings because there are a few settings that need to be overwritten via env vars. (at least the Elastic index and both AuthOptions blocks)

Docker images are pushed to registry.samhammer.oncloudandheat.com. See project "samhammer-socket-server" there.

The following API endpoints are provided:

  • /ws ⇒ Websocket endpoint
  • GET api/client ⇒ Get all active client ids
  • POST api/notification/<clientid> ⇒ Send a message to a specific client
  • POST api/notification/broadcast ⇒ Send a message to all clients

Samhammer.SocketServer.ApiClient

Contains the HTTP-Calls to access the "Samhammer.SocketServer.Api" project.

Install the nuget package "Samhammer.SocketServer.ApiClient".

Then you can Inject "ISocketServerApiClient". (it is registered in ioc by Samhammer.DependencyInjection)

Also register a matching http client like that:

    builder.Services
        .AddHttpClient<ISocketServerApiClient, SocketServerApiClient>(options =>
            options.BaseAddress = new Uri(builder.Configuration["SocketServerApiOptions:Url"]))
        .AddClientCredentialsTokenHandler(ApiAuthOptions.DefaultClientName); // https://github.com/DuendeSoftware/Duende.AccessTokenManagement
Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
8.0.4 80 12/4/2024
8.0.3 91 10/25/2024
8.0.2 105 6/10/2024
8.0.1 98 5/31/2024
8.0.0 90 5/31/2024