ControlR.Libraries.WebSocketRelay.Client
0.20.86
dotnet add package ControlR.Libraries.WebSocketRelay.Client --version 0.20.86
NuGet\Install-Package ControlR.Libraries.WebSocketRelay.Client -Version 0.20.86
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="ControlR.Libraries.WebSocketRelay.Client" Version="0.20.86" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ControlR.Libraries.WebSocketRelay.Client" Version="0.20.86" />
<PackageReference Include="ControlR.Libraries.WebSocketRelay.Client" />
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 ControlR.Libraries.WebSocketRelay.Client --version 0.20.86
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: ControlR.Libraries.WebSocketRelay.Client, 0.20.86"
#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 ControlR.Libraries.WebSocketRelay.Client@0.20.86
#: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=ControlR.Libraries.WebSocketRelay.Client&version=0.20.86
#tool nuget:?package=ControlR.Libraries.WebSocketRelay.Client&version=0.20.86
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ControlR.Libraries.WebSocketRelay.Client
A client library for the WebSocket Relay service, providing managed relay stream connections for real-time data transfer in ControlR remote control applications.
Features
Managed Relay Stream
- IManagedRelayStream: Interface for managing WebSocket relay connections
- ManagedRelayStream: Abstract base implementation with connection management
Connection Management
- Automatic connection handling and reconnection
- Message queue management with configurable buffering
- Close handler registration
- Latency tracking
Performance Monitoring
- CurrentLatency: Real-time latency measurement
- GetMbpsIn(): Inbound throughput monitoring
- GetMbpsOut(): Outbound throughput monitoring
Message Handling
- DTO wrapper support with MessagePack serialization
- Message handler registration for incoming messages
- Async message processing
Usage
Basic Usage
using ControlR.Libraries.WebSocketRelay.Client;
using ControlR.Libraries.Shared.Services.Buffers;
using ControlR.Libraries.Api.Contracts.Dtos.RemoteControlDtos;
using Microsoft.Extensions.Logging;
// Create a concrete implementation or use in your application
public class MyRelayStream : ManagedRelayStream
{
public MyRelayStream(
TimeProvider timeProvider,
IMessenger messenger,
IMemoryProvider memoryProvider,
IWaiter waiter,
ILogger<ManagedRelayStream> logger)
: base(timeProvider, messenger, memoryProvider, waiter, logger)
{
}
}
// Connect to the relay
var relayStream = new MyRelayStream(
TimeProvider.System,
messenger,
memoryProvider,
waiter,
logger);
var relayUri = new Uri("wss://relay.example.com/relay");
await relayStream.Connect(relayUri, cancellationToken);
// Check connection status
Console.WriteLine($"Connected: {relayStream.IsConnected}");
Console.WriteLine($"State: {relayStream.State}");
Console.WriteLine($"Latency: {relayStream.CurrentLatency}");
Sending Messages
// Create a DTO wrapper
var dtoWrapper = new DtoWrapper
{
DtoType = nameof(RemoteControlFrameDto),
Data = myFrameDto
};
// Send with cancellation support
await relayStream.Send(dtoWrapper, cancellationToken);
Receiving Messages
// Register a message handler
var subscription = relayStream.RegisterMessageHandler(this, async wrapper =>
{
switch (wrapper.DtoType)
{
case nameof(RemoteControlFrameDto):
var frame = MessagePackSerializer.Deserialize<RemoteControlFrameDto>(wrapper.Data);
await HandleFrame(frame);
break;
case nameof(InputEventDto):
var input = MessagePackSerializer.Deserialize<InputEventDto>(wrapper.Data);
await HandleInput(input);
break;
}
});
// Don't forget to dispose when done
subscription.Dispose();
Monitoring Performance
// Get throughput metrics
double inboundMbps = relayStream.GetMbpsIn();
double outboundMbps = relayStream.GetMbpsOut();
Console.WriteLine($"In: {inboundMbps:F2} Mbps");
Console.WriteLine($"Out: {outboundMbps:F2} Mbps");
Handling Connection Close
// Register a close handler
var closeSubscription = relayStream.OnClosed(async () =>
{
Console.WriteLine("Connection closed");
// Handle reconnection logic
});
// Dispose when done
closeSubscription.Dispose();
URI Building
Use RelayUriBuilder to construct relay URIs:
var uri = RelayUriBuilder.Build(
relayServer: "relay.example.com",
deviceId: deviceId,
sessionId: sessionId,
role: RelayRole.Requester); // or RelayRole.Provider
Relay Roles
- Requester: The client that requests a relay connection (typically the viewer)
- Provider: The client that provides the connection (typically the agent)
Architecture
The library consists of:
ManagedRelayStream.cs- Main stream management implementationRelayRole.cs- Enum for relay participant rolesRelayUriBuilder.cs- URI construction helper
Key Properties
| Property | Type | Description |
|---|---|---|
IsConnected |
bool |
Whether the WebSocket is currently connected |
State |
WebSocketState |
The current WebSocket state |
CurrentLatency |
TimeSpan |
Current round-trip latency |
Key Methods
| Method | Description |
|---|---|
Connect() |
Establish WebSocket connection |
Send() |
Send a DTO wrapper message |
RegisterMessageHandler() |
Register handler for incoming messages |
OnClosed() |
Register handler for connection close events |
Close() |
Gracefully close the connection |
GetMbpsIn() |
Get inbound throughput |
GetMbpsOut() |
Get outbound throughput |
Dependencies
This library depends on:
- ControlR.Libraries.Shared
- ControlR.Libraries.Api.Contracts
- Bitbound.SimpleMessenger
- Microsoft.Extensions.Logging
- MessagePack
- System.Net.WebSockets
Use Cases
- Remote desktop viewing and control
- Real-time screen streaming
- Input event relay
- File transfer through relay
- Terminal session tunneling
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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.
-
net10.0
- Bitbound.SimpleMessenger (>= 2.4.24)
- ControlR.Libraries.Shared (>= 0.20.86)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ControlR.Libraries.WebSocketRelay.Client:
| Package | Downloads |
|---|---|
|
ControlR.Libraries.Viewer.Common
Common viewer utilities for ControlR, an open-source remote control and remote access solution. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.20.86 | 36 | 3/5/2026 |
| 0.20.85 | 39 | 3/4/2026 |
| 0.20.84-dev | 37 | 3/4/2026 |
| 0.20.82-dev | 35 | 3/4/2026 |