namespace Rap.Rdp.Core; public interface IRdpProtocolEngine : IAsyncDisposable { ValueTask ConnectAsync(RdpSessionDescriptor session, CancellationToken cancellationToken); ValueTask DisconnectAsync(bool terminateRemoteSession, CancellationToken cancellationToken); ValueTask SendInputAsync(RdpInputEvent inputEvent, CancellationToken cancellationToken); ValueTask SendClipboardTextAsync(string text, CancellationToken cancellationToken); } public abstract record RdpInputEvent(string CorrelationId); public sealed record RdpKeyboardEvent( string CorrelationId, ushort ScanCode, bool KeyDown, bool Extended) : RdpInputEvent(CorrelationId); public sealed record RdpPointerMoveEvent( string CorrelationId, double NormalizedX, double NormalizedY) : RdpInputEvent(CorrelationId); public sealed record RdpPointerButtonEvent( string CorrelationId, string Button, bool Pressed, double NormalizedX, double NormalizedY) : RdpInputEvent(CorrelationId); public sealed record RdpPointerWheelEvent( string CorrelationId, int Delta, bool Horizontal, double NormalizedX, double NormalizedY) : RdpInputEvent(CorrelationId);