Skip to content

Hmp1PresentationAdapter

Namespace: Hex1b

Assembly: Hex1b.dll

A presentation adapter that serves terminal output to multiple remote clients over the Hex1b Muxer Protocol (HMP).

csharp
public sealed class Hmp1PresentationAdapter : ITerminalLifecycleAwarePresentationAdapter, IHex1bTerminalPresentationAdapter, IAsyncDisposable

Inheritance

ObjectHmp1PresentationAdapter

Implements

Constructors

Hmp1PresentationAdapter(int, int)

Creates a new muxer presentation adapter with the specified initial dimensions.

Parameters:

  • width (Int32): Initial terminal width in columns.
  • height (Int32): Initial terminal height in rows.
csharp
public Hmp1PresentationAdapter(int width = 80, int height = 24)

Properties

Capabilities

Capability hints that inform optimization strategies.

Returns: TerminalCapabilities

csharp
public TerminalCapabilities Capabilities { get; }

ClientCount

Gets the number of currently connected clients.

Returns: Int32

csharp
public int ClientCount { get; }

Height

Current terminal height in rows.

Returns: Int32

csharp
public int Height { get; }

Width

Current terminal width in columns.

Returns: Int32

csharp
public int Width { get; }

Methods

AddClient(Stream, CancellationToken)

Adds a new client connection. The client will receive a Hello frame with the current dimensions and a StateSync frame with the current screen content.

Parameters:

Returns: Task<Hmp1ClientHandle>

A handle that can be disposed to disconnect the client.

csharp
public Task<Hmp1ClientHandle> AddClient(Stream stream, CancellationToken ct = default)

DisposeAsync()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.

Returns: ValueTask

A task that represents the asynchronous dispose operation.

csharp
public ValueTask DisposeAsync()

EnterRawModeAsync(CancellationToken)

Enter raw mode for proper input capture.

Parameters:

Returns: ValueTask

csharp
public ValueTask EnterRawModeAsync(CancellationToken ct = default)

ExitRawModeAsync(CancellationToken)

Exit raw mode and restore normal terminal input handling.

Parameters:

Returns: ValueTask

csharp
public ValueTask ExitRawModeAsync(CancellationToken ct = default)

FlushAsync(CancellationToken)

Flush any buffered output immediately.

Parameters:

Returns: ValueTask

csharp
public ValueTask FlushAsync(CancellationToken ct = default)

GetCursorPosition()

Gets the current cursor position in the terminal. Returns (0, 0) if the position cannot be determined.

Returns: ValueTuple<Int32, Int32>

A tuple of (Row, Column), both 0-based.

csharp
public (int Row, int Column) GetCursorPosition()

ReadInputAsync(CancellationToken)

Receive input (keystrokes, mouse events as ANSI sequences) FROM the user.

Parameters:

Returns: ValueTask<Byte>>

Raw input bytes from the user, or empty when disconnected.

csharp
public ValueTask<ReadOnlyMemory<byte>> ReadInputAsync(CancellationToken ct = default)

TerminalCompleted(int)

Called when the terminal has completed execution.

Parameters:

  • exitCode (Int32): The exit code from the terminal's run callback or workload.
csharp
public void TerminalCompleted(int exitCode)

TerminalCreated(Hex1bTerminal)

Called when the terminal instance is created and associated with this adapter.

Parameters:

csharp
public void TerminalCreated(Hex1bTerminal terminal)

TerminalStarted()

Called when the terminal has started and is ready to process I/O.

csharp
public void TerminalStarted()

WriteOutputAsync(ReadOnlyMemory<byte>, CancellationToken)

Write rendered output TO the presentation layer (display).

Parameters:

Returns: ValueTask

csharp
public ValueTask WriteOutputAsync(ReadOnlyMemory<byte> data, CancellationToken ct = default)

Events

Disconnected

Raised when the presentation layer disconnects (e.g., terminal closed, WebSocket dropped).

Returns: Action

csharp
public event Action? Disconnected

Resized

Raised when the presentation layer is resized by the user.

Returns: Action<Int32, Int32>

csharp
public event Action<int, int>? Resized

Remarks

This adapter acts as a headless presentation layer. Instead of displaying output on a local console, it multicasts ANSI output to all connected clients via their streams. Use to add new client connections.

Each client receives a frame with the protocol version and current dimensions, followed by a frame with a full screen snapshot so the client immediately sees the current state.

Released under the MIT License.