using System; using System.Threading; using Google.Protobuf.WellKnownTypes; using MxGateway.Contracts.Proto; namespace MxGateway.Worker.Sta; public sealed class StaCommand { public StaCommand( string sessionId, string correlationId, MxCommand command, Timestamp? enqueueTimestamp = null, CancellationToken cancellationToken = default) { if (string.IsNullOrWhiteSpace(sessionId)) { throw new ArgumentException("STA command requires a session id.", nameof(sessionId)); } if (string.IsNullOrWhiteSpace(correlationId)) { throw new ArgumentException("STA command requires a correlation id.", nameof(correlationId)); } SessionId = sessionId; CorrelationId = correlationId; Command = command ?? throw new ArgumentNullException(nameof(command)); EnqueueTimestamp = enqueueTimestamp ?? Timestamp.FromDateTime(DateTime.UtcNow); CancellationToken = cancellationToken; } public string SessionId { get; } public string CorrelationId { get; } public MxCommand Command { get; } public Timestamp EnqueueTimestamp { get; } public CancellationToken CancellationToken { get; } public MxCommandKind Kind => Command.Kind; public string MethodName => Kind.ToString(); }