Hmp1PresentationAdapter
Namespace: Hex1b
Assembly: Hex1b.dll
A presentation adapter that serves terminal output to multiple remote clients over the Hex1b Muxer Protocol (HMP).
public sealed class Hmp1PresentationAdapter : ITerminalLifecycleAwarePresentationAdapter, IHex1bTerminalPresentationAdapter, IAsyncDisposableInheritance
Object → Hmp1PresentationAdapter
Implements
Constructors
Hmp1PresentationAdapter(int, int)
Creates a new muxer presentation adapter with the specified initial dimensions.
Parameters:
public Hmp1PresentationAdapter(int width = 80, int height = 24)Properties
Capabilities
Capability hints that inform optimization strategies.
Returns: TerminalCapabilities
public TerminalCapabilities Capabilities { get; }ClientCount
Gets the number of currently connected clients.
Returns: Int32
public int ClientCount { get; }Height
Current terminal height in rows.
Returns: Int32
public int Height { get; }Width
Current terminal width in columns.
Returns: Int32
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:
stream(Stream): A bidirectional stream connected to the client.ct(CancellationToken): Cancellation token.
Returns: Task<Hmp1ClientHandle>
A handle that can be disposed to disconnect the client.
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.
public ValueTask DisposeAsync()EnterRawModeAsync(CancellationToken)
Enter raw mode for proper input capture.
Parameters:
ct(CancellationToken): Cancellation token.
Returns: ValueTask
public ValueTask EnterRawModeAsync(CancellationToken ct = default)ExitRawModeAsync(CancellationToken)
Exit raw mode and restore normal terminal input handling.
Parameters:
ct(CancellationToken): Cancellation token.
Returns: ValueTask
public ValueTask ExitRawModeAsync(CancellationToken ct = default)FlushAsync(CancellationToken)
Flush any buffered output immediately.
Parameters:
ct(CancellationToken): Cancellation token.
Returns: ValueTask
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.
public (int Row, int Column) GetCursorPosition()ReadInputAsync(CancellationToken)
Receive input (keystrokes, mouse events as ANSI sequences) FROM the user.
Parameters:
ct(CancellationToken): Cancellation token.
Returns: ValueTask<Byte>>
Raw input bytes from the user, or empty when disconnected.
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.
public void TerminalCompleted(int exitCode)TerminalCreated(Hex1bTerminal)
Called when the terminal instance is created and associated with this adapter.
Parameters:
terminal(Hex1bTerminal): The terminal instance.
public void TerminalCreated(Hex1bTerminal terminal)TerminalStarted()
Called when the terminal has started and is ready to process I/O.
public void TerminalStarted()WriteOutputAsync(ReadOnlyMemory<byte>, CancellationToken)
Write rendered output TO the presentation layer (display).
Parameters:
data(ReadOnlyMemory<Byte>): The output data to send to the display.ct(CancellationToken): Cancellation token.
Returns: ValueTask
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
public event Action? DisconnectedResized
Raised when the presentation layer is resized by the user.
Returns: Action<Int32, Int32>
public event Action<int, int>? ResizedRemarks
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.