From 16f7ab0d0a6de60bdae5dc6ad1e17d1402e2e399 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 12 May 2026 02:20:12 -0400 Subject: [PATCH] feat(commons): extend OpcUaEndpointConfig with auth, subscription tuning, read/filter knobs Adds POCOs and enums for upcoming OPC UA editor expansion: - OpcUaUserTokenType (Anonymous | UsernamePassword | X509Certificate) - OpcUaUserIdentityConfig (TokenType + Username/Password + CertificatePath/Password) - OpcUaDeadbandType (Absolute | Percent) + OpcUaDeadbandConfig - OpcUaTimestampsToReturn (Source | Server | Both) OpcUaEndpointConfig grows three new scalars (DiscardOldest, SubscriptionPriority, SubscriptionDisplayName) plus optional UserIdentity and Deadband sub-objects. Defaults preserve current runtime behavior (anonymous, no deadband, DiscardOldest=true). --- .../Types/DataConnections/OpcUaDeadbandConfig.cs | 7 +++++++ .../Types/DataConnections/OpcUaDeadbandType.cs | 7 +++++++ .../Types/DataConnections/OpcUaEndpointConfig.cs | 10 ++++++++++ .../Types/DataConnections/OpcUaTimestampsToReturn.cs | 8 ++++++++ .../Types/DataConnections/OpcUaUserIdentityConfig.cs | 10 ++++++++++ .../Types/DataConnections/OpcUaUserTokenType.cs | 8 ++++++++ 6 files changed, 50 insertions(+) create mode 100644 src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandConfig.cs create mode 100644 src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandType.cs create mode 100644 src/ScadaLink.Commons/Types/DataConnections/OpcUaTimestampsToReturn.cs create mode 100644 src/ScadaLink.Commons/Types/DataConnections/OpcUaUserIdentityConfig.cs create mode 100644 src/ScadaLink.Commons/Types/DataConnections/OpcUaUserTokenType.cs diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandConfig.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandConfig.cs new file mode 100644 index 0000000..798e8c5 --- /dev/null +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandConfig.cs @@ -0,0 +1,7 @@ +namespace ScadaLink.Commons.Types.DataConnections; + +public sealed class OpcUaDeadbandConfig +{ + public OpcUaDeadbandType Type { get; set; } = OpcUaDeadbandType.Absolute; + public double Value { get; set; } = 0.0; +} diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandType.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandType.cs new file mode 100644 index 0000000..072ce8e --- /dev/null +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaDeadbandType.cs @@ -0,0 +1,7 @@ +namespace ScadaLink.Commons.Types.DataConnections; + +public enum OpcUaDeadbandType +{ + Absolute, + Percent +} diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaEndpointConfig.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaEndpointConfig.cs index 06f6f63..3d87217 100644 --- a/src/ScadaLink.Commons/Types/DataConnections/OpcUaEndpointConfig.cs +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaEndpointConfig.cs @@ -18,6 +18,16 @@ public sealed class OpcUaEndpointConfig public int KeepAliveCount { get; set; } = 10; public int LifetimeCount { get; set; } = 30; public int MaxNotificationsPerPublish { get; set; } = 100; + public bool DiscardOldest { get; set; } = true; + public byte SubscriptionPriority { get; set; } = 0; + public string SubscriptionDisplayName { get; set; } = "ScadaLink"; + + // Read / filter + public OpcUaTimestampsToReturn TimestampsToReturn { get; set; } = OpcUaTimestampsToReturn.Source; + public OpcUaDeadbandConfig? Deadband { get; set; } + + // Authentication (optional; null = anonymous) + public OpcUaUserIdentityConfig? UserIdentity { get; set; } // Heartbeat (optional) public OpcUaHeartbeatConfig? Heartbeat { get; set; } diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaTimestampsToReturn.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaTimestampsToReturn.cs new file mode 100644 index 0000000..8faa56f --- /dev/null +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaTimestampsToReturn.cs @@ -0,0 +1,8 @@ +namespace ScadaLink.Commons.Types.DataConnections; + +public enum OpcUaTimestampsToReturn +{ + Source, + Server, + Both +} diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserIdentityConfig.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserIdentityConfig.cs new file mode 100644 index 0000000..a1bd3a8 --- /dev/null +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserIdentityConfig.cs @@ -0,0 +1,10 @@ +namespace ScadaLink.Commons.Types.DataConnections; + +public sealed class OpcUaUserIdentityConfig +{ + public OpcUaUserTokenType TokenType { get; set; } = OpcUaUserTokenType.Anonymous; + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public string CertificatePath { get; set; } = ""; + public string CertificatePassword { get; set; } = ""; +} diff --git a/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserTokenType.cs b/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserTokenType.cs new file mode 100644 index 0000000..74f18c8 --- /dev/null +++ b/src/ScadaLink.Commons/Types/DataConnections/OpcUaUserTokenType.cs @@ -0,0 +1,8 @@ +namespace ScadaLink.Commons.Types.DataConnections; + +public enum OpcUaUserTokenType +{ + Anonymous, + UsernamePassword, + X509Certificate +}