using MessagePack; namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Shared.Contracts; [MessagePackObject] public sealed class HistoryReadRequest { [Key(0)] public long SessionId { get; set; } [Key(1)] public string[] TagReferences { get; set; } = System.Array.Empty(); [Key(2)] public long StartUtcUnixMs { get; set; } [Key(3)] public long EndUtcUnixMs { get; set; } [Key(4)] public uint MaxValuesPerTag { get; set; } = 1000; } [MessagePackObject] public sealed class HistoryTagValues { [Key(0)] public string TagReference { get; set; } = string.Empty; [Key(1)] public GalaxyDataValue[] Values { get; set; } = System.Array.Empty(); } [MessagePackObject] public sealed class HistoryReadResponse { [Key(0)] public bool Success { get; set; } [Key(1)] public string? Error { get; set; } [Key(2)] public HistoryTagValues[] Tags { get; set; } = System.Array.Empty(); } /// /// Processed (aggregated) historian read — OPC UA HistoryReadProcessed service. The /// aggregate column is a string (e.g. "Average", "Minimum") mapped by the Proxy from the /// OPC UA HistoryAggregateType enum so Galaxy.Host stays OPC-UA-free. /// [MessagePackObject] public sealed class HistoryReadProcessedRequest { [Key(0)] public long SessionId { get; set; } [Key(1)] public string TagReference { get; set; } = string.Empty; [Key(2)] public long StartUtcUnixMs { get; set; } [Key(3)] public long EndUtcUnixMs { get; set; } [Key(4)] public long IntervalMs { get; set; } [Key(5)] public string AggregateColumn { get; set; } = "Average"; } [MessagePackObject] public sealed class HistoryReadProcessedResponse { [Key(0)] public bool Success { get; set; } [Key(1)] public string? Error { get; set; } [Key(2)] public GalaxyDataValue[] Values { get; set; } = System.Array.Empty(); } /// /// At-time historian read — OPC UA HistoryReadAtTime service. Returns one sample per /// requested timestamp (interpolated when no exact match exists). The per-timestamp array /// is flow-encoded as Unix milliseconds to avoid MessagePack DateTime quirks. /// [MessagePackObject] public sealed class HistoryReadAtTimeRequest { [Key(0)] public long SessionId { get; set; } [Key(1)] public string TagReference { get; set; } = string.Empty; [Key(2)] public long[] TimestampsUtcUnixMs { get; set; } = System.Array.Empty(); } [MessagePackObject] public sealed class HistoryReadAtTimeResponse { [Key(0)] public bool Success { get; set; } [Key(1)] public string? Error { get; set; } [Key(2)] public GalaxyDataValue[] Values { get; set; } = System.Array.Empty(); }