diff --git a/clients/proto/descriptors/mxaccessgw-client-v1.protoset b/clients/proto/descriptors/mxaccessgw-client-v1.protoset
index 09a9e6e..6dd07cb 100644
Binary files a/clients/proto/descriptors/mxaccessgw-client-v1.protoset and b/clients/proto/descriptors/mxaccessgw-client-v1.protoset differ
diff --git a/clients/proto/fixtures/behavior/manifest.json b/clients/proto/fixtures/behavior/manifest.json
index ff802a0..aea5a5c 100644
--- a/clients/proto/fixtures/behavior/manifest.json
+++ b/clients/proto/fixtures/behavior/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"fixtureSet": "mxaccess-gateway-client-behavior",
"contractName": "mxaccess-gateway",
- "gatewayProtocolVersion": 2,
+ "gatewayProtocolVersion": 3,
"workerProtocolVersion": 1,
"protoInputManifest": "clients/proto/proto-inputs.json",
"fixtures": [
diff --git a/clients/proto/fixtures/golden/open-session-reply.ok.json b/clients/proto/fixtures/golden/open-session-reply.ok.json
index e242b6d..1be1b4d 100644
--- a/clients/proto/fixtures/golden/open-session-reply.ok.json
+++ b/clients/proto/fixtures/golden/open-session-reply.ok.json
@@ -3,12 +3,14 @@
"backendName": "mxaccess-worker",
"workerProcessId": 1234,
"workerProtocolVersion": 1,
- "gatewayProtocolVersion": 2,
+ "gatewayProtocolVersion": 3,
"capabilities": [
"unary-open-session",
"unary-close-session",
"unary-invoke",
- "server-stream-events"
+ "server-stream-events",
+ "unary-acknowledge-alarm",
+ "server-stream-active-alarms"
],
"defaultCommandTimeout": "30s",
"protocolStatus": {
diff --git a/clients/proto/fixtures/parity/parity-fixture-matrix.json b/clients/proto/fixtures/parity/parity-fixture-matrix.json
index e4f0a5e..447e795 100644
--- a/clients/proto/fixtures/parity/parity-fixture-matrix.json
+++ b/clients/proto/fixtures/parity/parity-fixture-matrix.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"fixtureSet": "mxaccess-gateway-parity-fixture-matrix",
"contractName": "mxaccess-gateway",
- "gatewayProtocolVersion": 2,
+ "gatewayProtocolVersion": 3,
"workerProtocolVersion": 1,
"sourceCaptureRoot": "C:/Users/dohertj2/Desktop/mxaccess/captures",
"sourceDocs": [
diff --git a/clients/proto/proto-inputs.json b/clients/proto/proto-inputs.json
index 9d424b0..4feba3c 100644
--- a/clients/proto/proto-inputs.json
+++ b/clients/proto/proto-inputs.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"contractName": "mxaccess-gateway",
- "gatewayProtocolVersion": 2,
+ "gatewayProtocolVersion": 3,
"workerProtocolVersion": 1,
"protoRoot": "src/MxGateway.Contracts/Protos",
"sourceFiles": [
diff --git a/src/MxGateway.Contracts/GatewayContractInfo.cs b/src/MxGateway.Contracts/GatewayContractInfo.cs
index a6b6c92..633623d 100644
--- a/src/MxGateway.Contracts/GatewayContractInfo.cs
+++ b/src/MxGateway.Contracts/GatewayContractInfo.cs
@@ -6,7 +6,7 @@ namespace MxGateway.Contracts;
///
public static class GatewayContractInfo
{
- public const uint GatewayProtocolVersion = 2;
+ public const uint GatewayProtocolVersion = 3;
public const uint WorkerProtocolVersion = 1;
diff --git a/src/MxGateway.Contracts/Generated/MxaccessGateway.cs b/src/MxGateway.Contracts/Generated/MxaccessGateway.cs
index dc74ff7..05c543c 100644
--- a/src/MxGateway.Contracts/Generated/MxaccessGateway.cs
+++ b/src/MxGateway.Contracts/Generated/MxaccessGateway.cs
@@ -192,7 +192,7 @@ namespace MxGateway.Contracts.Proto {
"ckluZm9SZXBseRIZChF3b3JrZXJfcHJvY2Vzc19pZBgBIAEoBRIWCg53b3Jr",
"ZXJfdmVyc2lvbhgCIAEoCRIXCg9teGFjY2Vzc19wcm9naWQYAyABKAkSFgoO",
"bXhhY2Nlc3NfY2xzaWQYBCABKAkiQAoQRHJhaW5FdmVudHNSZXBseRIsCgZl",
- "dmVudHMYASADKAsyHC5teGFjY2Vzc19nYXRld2F5LnYxLk14RXZlbnQimwYK",
+ "dmVudHMYASADKAsyHC5teGFjY2Vzc19nYXRld2F5LnYxLk14RXZlbnQi5wYK",
"B014RXZlbnQSMgoGZmFtaWx5GAEgASgOMiIubXhhY2Nlc3NfZ2F0ZXdheS52",
"MS5NeEV2ZW50RmFtaWx5EhIKCnNlc3Npb25faWQYAiABKAkSFQoNc2VydmVy",
"X2hhbmRsZRgDIAEoBRITCgtpdGVtX2hhbmRsZRgEIAEoBRIrCgV2YWx1ZRgF",
@@ -210,138 +210,188 @@ namespace MxGateway.Contracts.Proto {
"Y29tcGxldGUYFiABKAsyKy5teGFjY2Vzc19nYXRld2F5LnYxLk9wZXJhdGlv",
"bkNvbXBsZXRlRXZlbnRIABJRChdvbl9idWZmZXJlZF9kYXRhX2NoYW5nZRgX",
"IAEoCzIuLm14YWNjZXNzX2dhdGV3YXkudjEuT25CdWZmZXJlZERhdGFDaGFu",
- "Z2VFdmVudEgAQgYKBGJvZHlCCgoIX2hyZXN1bHQiEwoRT25EYXRhQ2hhbmdl",
- "RXZlbnQiFgoUT25Xcml0ZUNvbXBsZXRlRXZlbnQiGAoWT3BlcmF0aW9uQ29t",
- "cGxldGVFdmVudCLUAQoZT25CdWZmZXJlZERhdGFDaGFuZ2VFdmVudBIyCglk",
- "YXRhX3R5cGUYASABKA4yHy5teGFjY2Vzc19nYXRld2F5LnYxLk14RGF0YVR5",
- "cGUSNAoOcXVhbGl0eV92YWx1ZXMYAiABKAsyHC5teGFjY2Vzc19nYXRld2F5",
- "LnYxLk14QXJyYXkSNgoQdGltZXN0YW1wX3ZhbHVlcxgDIAEoCzIcLm14YWNj",
- "ZXNzX2dhdGV3YXkudjEuTXhBcnJheRIVCg1yYXdfZGF0YV90eXBlGAQgASgF",
- "IusBCg1NeFN0YXR1c1Byb3h5Eg8KB3N1Y2Nlc3MYASABKAUSNwoIY2F0ZWdv",
- "cnkYAiABKA4yJS5teGFjY2Vzc19nYXRld2F5LnYxLk14U3RhdHVzQ2F0ZWdv",
- "cnkSOAoLZGV0ZWN0ZWRfYnkYAyABKA4yIy5teGFjY2Vzc19nYXRld2F5LnYx",
- "Lk14U3RhdHVzU291cmNlEg4KBmRldGFpbBgEIAEoBRIUCgxyYXdfY2F0ZWdv",
- "cnkYBSABKAUSFwoPcmF3X2RldGVjdGVkX2J5GAYgASgFEhcKD2RpYWdub3N0",
- "aWNfdGV4dBgHIAEoCSKnAwoHTXhWYWx1ZRIyCglkYXRhX3R5cGUYASABKA4y",
- "Hy5teGFjY2Vzc19nYXRld2F5LnYxLk14RGF0YVR5cGUSFAoMdmFyaWFudF90",
- "eXBlGAIgASgJEg8KB2lzX251bGwYAyABKAgSFgoOcmF3X2RpYWdub3N0aWMY",
- "BCABKAkSFQoNcmF3X2RhdGFfdHlwZRgFIAEoBRIUCgpib29sX3ZhbHVlGAog",
- "ASgISAASFQoLaW50MzJfdmFsdWUYCyABKAVIABIVCgtpbnQ2NF92YWx1ZRgM",
- "IAEoA0gAEhUKC2Zsb2F0X3ZhbHVlGA0gASgCSAASFgoMZG91YmxlX3ZhbHVl",
- "GA4gASgBSAASFgoMc3RyaW5nX3ZhbHVlGA8gASgJSAASNQoPdGltZXN0YW1w",
- "X3ZhbHVlGBAgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAEjMK",
- "C2FycmF5X3ZhbHVlGBEgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEFy",
- "cmF5SAASEwoJcmF3X3ZhbHVlGBIgASgMSABCBgoEa2luZCL+BAoHTXhBcnJh",
- "eRI6ChFlbGVtZW50X2RhdGFfdHlwZRgBIAEoDjIfLm14YWNjZXNzX2dhdGV3",
- "YXkudjEuTXhEYXRhVHlwZRIUCgx2YXJpYW50X3R5cGUYAiABKAkSEgoKZGlt",
- "ZW5zaW9ucxgDIAMoDRIWCg5yYXdfZGlhZ25vc3RpYxgEIAEoCRIdChVyYXdf",
- "ZWxlbWVudF9kYXRhX3R5cGUYBSABKAUSNQoLYm9vbF92YWx1ZXMYCiABKAsy",
- "Hi5teGFjY2Vzc19nYXRld2F5LnYxLkJvb2xBcnJheUgAEjcKDGludDMyX3Zh",
- "bHVlcxgLIAEoCzIfLm14YWNjZXNzX2dhdGV3YXkudjEuSW50MzJBcnJheUgA",
- "EjcKDGludDY0X3ZhbHVlcxgMIAEoCzIfLm14YWNjZXNzX2dhdGV3YXkudjEu",
- "SW50NjRBcnJheUgAEjcKDGZsb2F0X3ZhbHVlcxgNIAEoCzIfLm14YWNjZXNz",
- "X2dhdGV3YXkudjEuRmxvYXRBcnJheUgAEjkKDWRvdWJsZV92YWx1ZXMYDiAB",
- "KAsyIC5teGFjY2Vzc19nYXRld2F5LnYxLkRvdWJsZUFycmF5SAASOQoNc3Ry",
- "aW5nX3ZhbHVlcxgPIAEoCzIgLm14YWNjZXNzX2dhdGV3YXkudjEuU3RyaW5n",
- "QXJyYXlIABI/ChB0aW1lc3RhbXBfdmFsdWVzGBAgASgLMiMubXhhY2Nlc3Nf",
- "Z2F0ZXdheS52MS5UaW1lc3RhbXBBcnJheUgAEjMKCnJhd192YWx1ZXMYESAB",
- "KAsyHS5teGFjY2Vzc19nYXRld2F5LnYxLlJhd0FycmF5SABCCAoGdmFsdWVz",
- "IhsKCUJvb2xBcnJheRIOCgZ2YWx1ZXMYASADKAgiHAoKSW50MzJBcnJheRIO",
- "CgZ2YWx1ZXMYASADKAUiHAoKSW50NjRBcnJheRIOCgZ2YWx1ZXMYASADKAMi",
- "HAoKRmxvYXRBcnJheRIOCgZ2YWx1ZXMYASADKAIiHQoLRG91YmxlQXJyYXkS",
- "DgoGdmFsdWVzGAEgAygBIh0KC1N0cmluZ0FycmF5Eg4KBnZhbHVlcxgBIAMo",
- "CSI8Cg5UaW1lc3RhbXBBcnJheRIqCgZ2YWx1ZXMYASADKAsyGi5nb29nbGUu",
- "cHJvdG9idWYuVGltZXN0YW1wIhoKCFJhd0FycmF5Eg4KBnZhbHVlcxgBIAMo",
- "DCJYCg5Qcm90b2NvbFN0YXR1cxI1CgRjb2RlGAEgASgOMicubXhhY2Nlc3Nf",
- "Z2F0ZXdheS52MS5Qcm90b2NvbFN0YXR1c0NvZGUSDwoHbWVzc2FnZRgCIAEo",
- "CSqhCAoNTXhDb21tYW5kS2luZBIfChtNWF9DT01NQU5EX0tJTkRfVU5TUEVD",
- "SUZJRUQQABIcChhNWF9DT01NQU5EX0tJTkRfUkVHSVNURVIQARIeChpNWF9D",
- "T01NQU5EX0tJTkRfVU5SRUdJU1RFUhACEhwKGE1YX0NPTU1BTkRfS0lORF9B",
- "RERfSVRFTRADEh0KGU1YX0NPTU1BTkRfS0lORF9BRERfSVRFTTIQBBIfChtN",
- "WF9DT01NQU5EX0tJTkRfUkVNT1ZFX0lURU0QBRIaChZNWF9DT01NQU5EX0tJ",
- "TkRfQURWSVNFEAYSHQoZTVhfQ09NTUFORF9LSU5EX1VOX0FEVklTRRAHEiYK",
- "Ik1YX0NPTU1BTkRfS0lORF9BRFZJU0VfU1VQRVJWSVNPUlkQCBIlCiFNWF9D",
- "T01NQU5EX0tJTkRfQUREX0JVRkZFUkVEX0lURU0QCRIwCixNWF9DT01NQU5E",
- "X0tJTkRfU0VUX0JVRkZFUkVEX1VQREFURV9JTlRFUlZBTBAKEhsKF01YX0NP",
- "TU1BTkRfS0lORF9TVVNQRU5EEAsSHAoYTVhfQ09NTUFORF9LSU5EX0FDVElW",
- "QVRFEAwSGQoVTVhfQ09NTUFORF9LSU5EX1dSSVRFEA0SGgoWTVhfQ09NTUFO",
- "RF9LSU5EX1dSSVRFMhAOEiEKHU1YX0NPTU1BTkRfS0lORF9XUklURV9TRUNV",
- "UkVEEA8SIgoeTVhfQ09NTUFORF9LSU5EX1dSSVRFX1NFQ1VSRUQyEBASJQoh",
- "TVhfQ09NTUFORF9LSU5EX0FVVEhFTlRJQ0FURV9VU0VSEBESKAokTVhfQ09N",
- "TUFORF9LSU5EX0FSQ0hFU1RSQV9VU0VSX1RPX0lEEBISIQodTVhfQ09NTUFO",
- "RF9LSU5EX0FERF9JVEVNX0JVTEsQExIkCiBNWF9DT01NQU5EX0tJTkRfQURW",
- "SVNFX0lURU1fQlVMSxAUEiQKIE1YX0NPTU1BTkRfS0lORF9SRU1PVkVfSVRF",
- "TV9CVUxLEBUSJwojTVhfQ09NTUFORF9LSU5EX1VOX0FEVklTRV9JVEVNX0JV",
- "TEsQFhIiCh5NWF9DT01NQU5EX0tJTkRfU1VCU0NSSUJFX0JVTEsQFxIkCiBN",
- "WF9DT01NQU5EX0tJTkRfVU5TVUJTQ1JJQkVfQlVMSxAYEhgKFE1YX0NPTU1B",
- "TkRfS0lORF9QSU5HEGQSJQohTVhfQ09NTUFORF9LSU5EX0dFVF9TRVNTSU9O",
- "X1NUQVRFEGUSIwofTVhfQ09NTUFORF9LSU5EX0dFVF9XT1JLRVJfSU5GTxBm",
- "EiAKHE1YX0NPTU1BTkRfS0lORF9EUkFJTl9FVkVOVFMQZxIjCh9NWF9DT01N",
- "QU5EX0tJTkRfU0hVVERPV05fV09SS0VSEGgq0AEKDU14RXZlbnRGYW1pbHkS",
- "HwobTVhfRVZFTlRfRkFNSUxZX1VOU1BFQ0lGSUVEEAASIgoeTVhfRVZFTlRf",
- "RkFNSUxZX09OX0RBVEFfQ0hBTkdFEAESJQohTVhfRVZFTlRfRkFNSUxZX09O",
- "X1dSSVRFX0NPTVBMRVRFEAISJgoiTVhfRVZFTlRfRkFNSUxZX09QRVJBVElP",
- "Tl9DT01QTEVURRADEisKJ01YX0VWRU5UX0ZBTUlMWV9PTl9CVUZGRVJFRF9E",
- "QVRBX0NIQU5HRRAEKqUDChBNeFN0YXR1c0NhdGVnb3J5EiIKHk1YX1NUQVRV",
- "U19DQVRFR09SWV9VTlNQRUNJRklFRBAAEh4KGk1YX1NUQVRVU19DQVRFR09S",
- "WV9VTktOT1dOEAESGQoVTVhfU1RBVFVTX0NBVEVHT1JZX09LEAISHgoaTVhf",
- "U1RBVFVTX0NBVEVHT1JZX1BFTkRJTkcQAxIeChpNWF9TVEFUVVNfQ0FURUdP",
- "UllfV0FSTklORxAEEioKJk1YX1NUQVRVU19DQVRFR09SWV9DT01NVU5JQ0FU",
- "SU9OX0VSUk9SEAUSKgomTVhfU1RBVFVTX0NBVEVHT1JZX0NPTkZJR1VSQVRJ",
- "T05fRVJST1IQBhIoCiRNWF9TVEFUVVNfQ0FURUdPUllfT1BFUkFUSU9OQUxf",
- "RVJST1IQBxIlCiFNWF9TVEFUVVNfQ0FURUdPUllfU0VDVVJJVFlfRVJST1IQ",
- "CBIlCiFNWF9TVEFUVVNfQ0FURUdPUllfU09GVFdBUkVfRVJST1IQCRIiCh5N",
- "WF9TVEFUVVNfQ0FURUdPUllfT1RIRVJfRVJST1IQCirKAgoOTXhTdGF0dXNT",
- "b3VyY2USIAocTVhfU1RBVFVTX1NPVVJDRV9VTlNQRUNJRklFRBAAEhwKGE1Y",
- "X1NUQVRVU19TT1VSQ0VfVU5LTk9XThABEiMKH01YX1NUQVRVU19TT1VSQ0Vf",
- "UkVRVUVTVElOR19MTVgQAhIjCh9NWF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJ",
- "TkdfTE1YEAMSIwofTVhfU1RBVFVTX1NPVVJDRV9SRVFVRVNUSU5HX05NWBAE",
- "EiMKH01YX1NUQVRVU19TT1VSQ0VfUkVTUE9ORElOR19OTVgQBRIxCi1NWF9T",
- "VEFUVVNfU09VUkNFX1JFUVVFU1RJTkdfQVVUT01BVElPTl9PQkpFQ1QQBhIx",
- "Ci1NWF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJTkdfQVVUT01BVElPTl9PQkpF",
- "Q1QQByrdBAoKTXhEYXRhVHlwZRIcChhNWF9EQVRBX1RZUEVfVU5TUEVDSUZJ",
- "RUQQABIYChRNWF9EQVRBX1RZUEVfVU5LTk9XThABEhgKFE1YX0RBVEFfVFlQ",
- "RV9OT19EQVRBEAISGAoUTVhfREFUQV9UWVBFX0JPT0xFQU4QAxIYChRNWF9E",
- "QVRBX1RZUEVfSU5URUdFUhAEEhYKEk1YX0RBVEFfVFlQRV9GTE9BVBAFEhcK",
- "E01YX0RBVEFfVFlQRV9ET1VCTEUQBhIXChNNWF9EQVRBX1RZUEVfU1RSSU5H",
- "EAcSFQoRTVhfREFUQV9UWVBFX1RJTUUQCBIdChlNWF9EQVRBX1RZUEVfRUxB",
- "UFNFRF9USU1FEAkSHwobTVhfREFUQV9UWVBFX1JFRkVSRU5DRV9UWVBFEAoS",
- "HAoYTVhfREFUQV9UWVBFX1NUQVRVU19UWVBFEAsSFQoRTVhfREFUQV9UWVBF",
- "X0VOVU0QDBItCilNWF9EQVRBX1RZUEVfU0VDVVJJVFlfQ0xBU1NJRklDQVRJ",
- "T05fRU5VTRANEiIKHk1YX0RBVEFfVFlQRV9EQVRBX1FVQUxJVFlfVFlQRRAO",
- "Eh8KG01YX0RBVEFfVFlQRV9RVUFMSUZJRURfRU5VTRAPEiEKHU1YX0RBVEFf",
- "VFlQRV9RVUFMSUZJRURfU1RSVUNUEBASKQolTVhfREFUQV9UWVBFX0lOVEVS",
- "TkFUSU9OQUxJWkVEX1NUUklORxAREhsKF01YX0RBVEFfVFlQRV9CSUdfU1RS",
- "SU5HEBISFAoQTVhfREFUQV9UWVBFX0VORBATKqMDChJQcm90b2NvbFN0YXR1",
- "c0NvZGUSJAogUFJPVE9DT0xfU1RBVFVTX0NPREVfVU5TUEVDSUZJRUQQABIb",
- "ChdQUk9UT0NPTF9TVEFUVVNfQ09ERV9PSxABEigKJFBST1RPQ09MX1NUQVRV",
- "U19DT0RFX0lOVkFMSURfUkVRVUVTVBACEioKJlBST1RPQ09MX1NUQVRVU19D",
- "T0RFX1NFU1NJT05fTk9UX0ZPVU5EEAMSKgomUFJPVE9DT0xfU1RBVFVTX0NP",
- "REVfU0VTU0lPTl9OT1RfUkVBRFkQBBIrCidQUk9UT0NPTF9TVEFUVVNfQ09E",
- "RV9XT1JLRVJfVU5BVkFJTEFCTEUQBRIgChxQUk9UT0NPTF9TVEFUVVNfQ09E",
- "RV9USU1FT1VUEAYSIQodUFJPVE9DT0xfU1RBVFVTX0NPREVfQ0FOQ0VMRUQQ",
- "BxIrCidQUk9UT0NPTF9TVEFUVVNfQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04Q",
- "CBIpCiVQUk9UT0NPTF9TVEFUVVNfQ09ERV9NWEFDQ0VTU19GQUlMVVJFEAkq",
- "vwIKDFNlc3Npb25TdGF0ZRIdChlTRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVE",
- "EAASGgoWU0VTU0lPTl9TVEFURV9DUkVBVElORxABEiEKHVNFU1NJT05fU1RB",
- "VEVfU1RBUlRJTkdfV09SS0VSEAISIgoeU0VTU0lPTl9TVEFURV9XQUlUSU5H",
- "X0ZPUl9QSVBFEAMSHQoZU0VTU0lPTl9TVEFURV9IQU5EU0hBS0lORxAEEiUK",
- "IVNFU1NJT05fU1RBVEVfSU5JVElBTElaSU5HX1dPUktFUhAFEhcKE1NFU1NJ",
- "T05fU1RBVEVfUkVBRFkQBhIZChVTRVNTSU9OX1NUQVRFX0NMT1NJTkcQBxIY",
- "ChRTRVNTSU9OX1NUQVRFX0NMT1NFRBAIEhkKFVNFU1NJT05fU1RBVEVfRkFV",
- "TFRFRBAJMoIDCg9NeEFjY2Vzc0dhdGV3YXkSXQoLT3BlblNlc3Npb24SJy5t",
- "eGFjY2Vzc19nYXRld2F5LnYxLk9wZW5TZXNzaW9uUmVxdWVzdBolLm14YWNj",
- "ZXNzX2dhdGV3YXkudjEuT3BlblNlc3Npb25SZXBseRJgCgxDbG9zZVNlc3Np",
- "b24SKC5teGFjY2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcXVlc3Qa",
- "Ji5teGFjY2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcGx5ElQKBklu",
- "dm9rZRIlLm14YWNjZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVxdWVzdBoj",
- "Lm14YWNjZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVwbHkSWAoMU3RyZWFt",
- "RXZlbnRzEigubXhhY2Nlc3NfZ2F0ZXdheS52MS5TdHJlYW1FdmVudHNSZXF1",
- "ZXN0GhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEV2ZW50MAFCHKoCGU14R2F0",
- "ZXdheS5Db250cmFjdHMuUHJvdG9iBnByb3RvMw=="));
+ "Z2VFdmVudEgAEkoKE29uX2FsYXJtX3RyYW5zaXRpb24YGCABKAsyKy5teGFj",
+ "Y2Vzc19nYXRld2F5LnYxLk9uQWxhcm1UcmFuc2l0aW9uRXZlbnRIAEIGCgRi",
+ "b2R5QgoKCF9ocmVzdWx0IhMKEU9uRGF0YUNoYW5nZUV2ZW50IhYKFE9uV3Jp",
+ "dGVDb21wbGV0ZUV2ZW50IhgKFk9wZXJhdGlvbkNvbXBsZXRlRXZlbnQi1AEK",
+ "GU9uQnVmZmVyZWREYXRhQ2hhbmdlRXZlbnQSMgoJZGF0YV90eXBlGAEgASgO",
+ "Mh8ubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeERhdGFUeXBlEjQKDnF1YWxpdHlf",
+ "dmFsdWVzGAIgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEFycmF5EjYK",
+ "EHRpbWVzdGFtcF92YWx1ZXMYAyABKAsyHC5teGFjY2Vzc19nYXRld2F5LnYx",
+ "Lk14QXJyYXkSFQoNcmF3X2RhdGFfdHlwZRgEIAEoBSL9AwoWT25BbGFybVRy",
+ "YW5zaXRpb25FdmVudBIcChRhbGFybV9mdWxsX3JlZmVyZW5jZRgBIAEoCRIf",
+ "Chdzb3VyY2Vfb2JqZWN0X3JlZmVyZW5jZRgCIAEoCRIXCg9hbGFybV90eXBl",
+ "X25hbWUYAyABKAkSQQoPdHJhbnNpdGlvbl9raW5kGAQgASgOMigubXhhY2Nl",
+ "c3NfZ2F0ZXdheS52MS5BbGFybVRyYW5zaXRpb25LaW5kEhAKCHNldmVyaXR5",
+ "GAUgASgFEjwKGG9yaWdpbmFsX3JhaXNlX3RpbWVzdGFtcBgGIAEoCzIaLmdv",
+ "b2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOAoUdHJhbnNpdGlvbl90aW1lc3Rh",
+ "bXAYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhUKDW9wZXJh",
+ "dG9yX3VzZXIYCCABKAkSGAoQb3BlcmF0b3JfY29tbWVudBgJIAEoCRIQCghj",
+ "YXRlZ29yeRgKIAEoCRITCgtkZXNjcmlwdGlvbhgLIAEoCRIzCg1jdXJyZW50",
+ "X3ZhbHVlGAwgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFZhbHVlEjEK",
+ "C2xpbWl0X3ZhbHVlGA0gASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFZh",
+ "bHVlIv0DChNBY3RpdmVBbGFybVNuYXBzaG90EhwKFGFsYXJtX2Z1bGxfcmVm",
+ "ZXJlbmNlGAEgASgJEh8KF3NvdXJjZV9vYmplY3RfcmVmZXJlbmNlGAIgASgJ",
+ "EhcKD2FsYXJtX3R5cGVfbmFtZRgDIAEoCRIQCghzZXZlcml0eRgEIAEoBRI8",
+ "ChhvcmlnaW5hbF9yYWlzZV90aW1lc3RhbXAYBSABKAsyGi5nb29nbGUucHJv",
+ "dG9idWYuVGltZXN0YW1wEj8KDWN1cnJlbnRfc3RhdGUYBiABKA4yKC5teGFj",
+ "Y2Vzc19nYXRld2F5LnYxLkFsYXJtQ29uZGl0aW9uU3RhdGUSEAoIY2F0ZWdv",
+ "cnkYByABKAkSEwoLZGVzY3JpcHRpb24YCCABKAkSPQoZbGFzdF90cmFuc2l0",
+ "aW9uX3RpbWVzdGFtcBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh",
+ "bXASFQoNb3BlcmF0b3JfdXNlchgKIAEoCRIYChBvcGVyYXRvcl9jb21tZW50",
+ "GAsgASgJEjMKDWN1cnJlbnRfdmFsdWUYDCABKAsyHC5teGFjY2Vzc19nYXRl",
+ "d2F5LnYxLk14VmFsdWUSMQoLbGltaXRfdmFsdWUYDSABKAsyHC5teGFjY2Vz",
+ "c19nYXRld2F5LnYxLk14VmFsdWUikgEKF0Fja25vd2xlZGdlQWxhcm1SZXF1",
+ "ZXN0EhIKCnNlc3Npb25faWQYASABKAkSHQoVY2xpZW50X2NvcnJlbGF0aW9u",
+ "X2lkGAIgASgJEhwKFGFsYXJtX2Z1bGxfcmVmZXJlbmNlGAMgASgJEg8KB2Nv",
+ "bW1lbnQYBCABKAkSFQoNb3BlcmF0b3JfdXNlchgFIAEoCSLzAQoVQWNrbm93",
+ "bGVkZ2VBbGFybVJlcGx5EhIKCnNlc3Npb25faWQYASABKAkSFgoOY29ycmVs",
+ "YXRpb25faWQYAiABKAkSPAoPcHJvdG9jb2xfc3RhdHVzGAMgASgLMiMubXhh",
+ "Y2Nlc3NfZ2F0ZXdheS52MS5Qcm90b2NvbFN0YXR1cxIUCgdocmVzdWx0GAQg",
+ "ASgFSACIAQESMgoGc3RhdHVzGAUgASgLMiIubXhhY2Nlc3NfZ2F0ZXdheS52",
+ "MS5NeFN0YXR1c1Byb3h5EhoKEmRpYWdub3N0aWNfbWVzc2FnZRgGIAEoCUIK",
+ "CghfaHJlc3VsdCJqChhRdWVyeUFjdGl2ZUFsYXJtc1JlcXVlc3QSEgoKc2Vz",
+ "c2lvbl9pZBgBIAEoCRIdChVjbGllbnRfY29ycmVsYXRpb25faWQYAiABKAkS",
+ "GwoTYWxhcm1fZmlsdGVyX3ByZWZpeBgDIAEoCSLrAQoNTXhTdGF0dXNQcm94",
+ "eRIPCgdzdWNjZXNzGAEgASgFEjcKCGNhdGVnb3J5GAIgASgOMiUubXhhY2Nl",
+ "c3NfZ2F0ZXdheS52MS5NeFN0YXR1c0NhdGVnb3J5EjgKC2RldGVjdGVkX2J5",
+ "GAMgASgOMiMubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c1NvdXJjZRIO",
+ "CgZkZXRhaWwYBCABKAUSFAoMcmF3X2NhdGVnb3J5GAUgASgFEhcKD3Jhd19k",
+ "ZXRlY3RlZF9ieRgGIAEoBRIXCg9kaWFnbm9zdGljX3RleHQYByABKAkipwMK",
+ "B014VmFsdWUSMgoJZGF0YV90eXBlGAEgASgOMh8ubXhhY2Nlc3NfZ2F0ZXdh",
+ "eS52MS5NeERhdGFUeXBlEhQKDHZhcmlhbnRfdHlwZRgCIAEoCRIPCgdpc19u",
+ "dWxsGAMgASgIEhYKDnJhd19kaWFnbm9zdGljGAQgASgJEhUKDXJhd19kYXRh",
+ "X3R5cGUYBSABKAUSFAoKYm9vbF92YWx1ZRgKIAEoCEgAEhUKC2ludDMyX3Zh",
+ "bHVlGAsgASgFSAASFQoLaW50NjRfdmFsdWUYDCABKANIABIVCgtmbG9hdF92",
+ "YWx1ZRgNIAEoAkgAEhYKDGRvdWJsZV92YWx1ZRgOIAEoAUgAEhYKDHN0cmlu",
+ "Z192YWx1ZRgPIAEoCUgAEjUKD3RpbWVzdGFtcF92YWx1ZRgQIAEoCzIaLmdv",
+ "b2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIABIzCgthcnJheV92YWx1ZRgRIAEo",
+ "CzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhBcnJheUgAEhMKCXJhd192YWx1",
+ "ZRgSIAEoDEgAQgYKBGtpbmQi/gQKB014QXJyYXkSOgoRZWxlbWVudF9kYXRh",
+ "X3R5cGUYASABKA4yHy5teGFjY2Vzc19nYXRld2F5LnYxLk14RGF0YVR5cGUS",
+ "FAoMdmFyaWFudF90eXBlGAIgASgJEhIKCmRpbWVuc2lvbnMYAyADKA0SFgoO",
+ "cmF3X2RpYWdub3N0aWMYBCABKAkSHQoVcmF3X2VsZW1lbnRfZGF0YV90eXBl",
+ "GAUgASgFEjUKC2Jvb2xfdmFsdWVzGAogASgLMh4ubXhhY2Nlc3NfZ2F0ZXdh",
+ "eS52MS5Cb29sQXJyYXlIABI3CgxpbnQzMl92YWx1ZXMYCyABKAsyHy5teGFj",
+ "Y2Vzc19nYXRld2F5LnYxLkludDMyQXJyYXlIABI3CgxpbnQ2NF92YWx1ZXMY",
+ "DCABKAsyHy5teGFjY2Vzc19nYXRld2F5LnYxLkludDY0QXJyYXlIABI3Cgxm",
+ "bG9hdF92YWx1ZXMYDSABKAsyHy5teGFjY2Vzc19nYXRld2F5LnYxLkZsb2F0",
+ "QXJyYXlIABI5Cg1kb3VibGVfdmFsdWVzGA4gASgLMiAubXhhY2Nlc3NfZ2F0",
+ "ZXdheS52MS5Eb3VibGVBcnJheUgAEjkKDXN0cmluZ192YWx1ZXMYDyABKAsy",
+ "IC5teGFjY2Vzc19nYXRld2F5LnYxLlN0cmluZ0FycmF5SAASPwoQdGltZXN0",
+ "YW1wX3ZhbHVlcxgQIAEoCzIjLm14YWNjZXNzX2dhdGV3YXkudjEuVGltZXN0",
+ "YW1wQXJyYXlIABIzCgpyYXdfdmFsdWVzGBEgASgLMh0ubXhhY2Nlc3NfZ2F0",
+ "ZXdheS52MS5SYXdBcnJheUgAQggKBnZhbHVlcyIbCglCb29sQXJyYXkSDgoG",
+ "dmFsdWVzGAEgAygIIhwKCkludDMyQXJyYXkSDgoGdmFsdWVzGAEgAygFIhwK",
+ "CkludDY0QXJyYXkSDgoGdmFsdWVzGAEgAygDIhwKCkZsb2F0QXJyYXkSDgoG",
+ "dmFsdWVzGAEgAygCIh0KC0RvdWJsZUFycmF5Eg4KBnZhbHVlcxgBIAMoASId",
+ "CgtTdHJpbmdBcnJheRIOCgZ2YWx1ZXMYASADKAkiPAoOVGltZXN0YW1wQXJy",
+ "YXkSKgoGdmFsdWVzGAEgAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt",
+ "cCIaCghSYXdBcnJheRIOCgZ2YWx1ZXMYASADKAwiWAoOUHJvdG9jb2xTdGF0",
+ "dXMSNQoEY29kZRgBIAEoDjInLm14YWNjZXNzX2dhdGV3YXkudjEuUHJvdG9j",
+ "b2xTdGF0dXNDb2RlEg8KB21lc3NhZ2UYAiABKAkqoQgKDU14Q29tbWFuZEtp",
+ "bmQSHwobTVhfQ09NTUFORF9LSU5EX1VOU1BFQ0lGSUVEEAASHAoYTVhfQ09N",
+ "TUFORF9LSU5EX1JFR0lTVEVSEAESHgoaTVhfQ09NTUFORF9LSU5EX1VOUkVH",
+ "SVNURVIQAhIcChhNWF9DT01NQU5EX0tJTkRfQUREX0lURU0QAxIdChlNWF9D",
+ "T01NQU5EX0tJTkRfQUREX0lURU0yEAQSHwobTVhfQ09NTUFORF9LSU5EX1JF",
+ "TU9WRV9JVEVNEAUSGgoWTVhfQ09NTUFORF9LSU5EX0FEVklTRRAGEh0KGU1Y",
+ "X0NPTU1BTkRfS0lORF9VTl9BRFZJU0UQBxImCiJNWF9DT01NQU5EX0tJTkRf",
+ "QURWSVNFX1NVUEVSVklTT1JZEAgSJQohTVhfQ09NTUFORF9LSU5EX0FERF9C",
+ "VUZGRVJFRF9JVEVNEAkSMAosTVhfQ09NTUFORF9LSU5EX1NFVF9CVUZGRVJF",
+ "RF9VUERBVEVfSU5URVJWQUwQChIbChdNWF9DT01NQU5EX0tJTkRfU1VTUEVO",
+ "RBALEhwKGE1YX0NPTU1BTkRfS0lORF9BQ1RJVkFURRAMEhkKFU1YX0NPTU1B",
+ "TkRfS0lORF9XUklURRANEhoKFk1YX0NPTU1BTkRfS0lORF9XUklURTIQDhIh",
+ "Ch1NWF9DT01NQU5EX0tJTkRfV1JJVEVfU0VDVVJFRBAPEiIKHk1YX0NPTU1B",
+ "TkRfS0lORF9XUklURV9TRUNVUkVEMhAQEiUKIU1YX0NPTU1BTkRfS0lORF9B",
+ "VVRIRU5USUNBVEVfVVNFUhAREigKJE1YX0NPTU1BTkRfS0lORF9BUkNIRVNU",
+ "UkFfVVNFUl9UT19JRBASEiEKHU1YX0NPTU1BTkRfS0lORF9BRERfSVRFTV9C",
+ "VUxLEBMSJAogTVhfQ09NTUFORF9LSU5EX0FEVklTRV9JVEVNX0JVTEsQFBIk",
+ "CiBNWF9DT01NQU5EX0tJTkRfUkVNT1ZFX0lURU1fQlVMSxAVEicKI01YX0NP",
+ "TU1BTkRfS0lORF9VTl9BRFZJU0VfSVRFTV9CVUxLEBYSIgoeTVhfQ09NTUFO",
+ "RF9LSU5EX1NVQlNDUklCRV9CVUxLEBcSJAogTVhfQ09NTUFORF9LSU5EX1VO",
+ "U1VCU0NSSUJFX0JVTEsQGBIYChRNWF9DT01NQU5EX0tJTkRfUElORxBkEiUK",
+ "IU1YX0NPTU1BTkRfS0lORF9HRVRfU0VTU0lPTl9TVEFURRBlEiMKH01YX0NP",
+ "TU1BTkRfS0lORF9HRVRfV09SS0VSX0lORk8QZhIgChxNWF9DT01NQU5EX0tJ",
+ "TkRfRFJBSU5fRVZFTlRTEGcSIwofTVhfQ09NTUFORF9LSU5EX1NIVVRET1dO",
+ "X1dPUktFUhBoKvkBCg1NeEV2ZW50RmFtaWx5Eh8KG01YX0VWRU5UX0ZBTUlM",
+ "WV9VTlNQRUNJRklFRBAAEiIKHk1YX0VWRU5UX0ZBTUlMWV9PTl9EQVRBX0NI",
+ "QU5HRRABEiUKIU1YX0VWRU5UX0ZBTUlMWV9PTl9XUklURV9DT01QTEVURRAC",
+ "EiYKIk1YX0VWRU5UX0ZBTUlMWV9PUEVSQVRJT05fQ09NUExFVEUQAxIrCidN",
+ "WF9FVkVOVF9GQU1JTFlfT05fQlVGRkVSRURfREFUQV9DSEFOR0UQBBInCiNN",
+ "WF9FVkVOVF9GQU1JTFlfT05fQUxBUk1fVFJBTlNJVElPThAFKsoBChNBbGFy",
+ "bVRyYW5zaXRpb25LaW5kEiUKIUFMQVJNX1RSQU5TSVRJT05fS0lORF9VTlNQ",
+ "RUNJRklFRBAAEh8KG0FMQVJNX1RSQU5TSVRJT05fS0lORF9SQUlTRRABEiUK",
+ "IUFMQVJNX1RSQU5TSVRJT05fS0lORF9BQ0tOT1dMRURHRRACEh8KG0FMQVJN",
+ "X1RSQU5TSVRJT05fS0lORF9DTEVBUhADEiMKH0FMQVJNX1RSQU5TSVRJT05f",
+ "S0lORF9SRVRSSUdHRVIQBCqqAQoTQWxhcm1Db25kaXRpb25TdGF0ZRIlCiFB",
+ "TEFSTV9DT05ESVRJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBTEFSTV9D",
+ "T05ESVRJT05fU1RBVEVfQUNUSVZFEAESJgoiQUxBUk1fQ09ORElUSU9OX1NU",
+ "QVRFX0FDVElWRV9BQ0tFRBACEiIKHkFMQVJNX0NPTkRJVElPTl9TVEFURV9J",
+ "TkFDVElWRRADKqUDChBNeFN0YXR1c0NhdGVnb3J5EiIKHk1YX1NUQVRVU19D",
+ "QVRFR09SWV9VTlNQRUNJRklFRBAAEh4KGk1YX1NUQVRVU19DQVRFR09SWV9V",
+ "TktOT1dOEAESGQoVTVhfU1RBVFVTX0NBVEVHT1JZX09LEAISHgoaTVhfU1RB",
+ "VFVTX0NBVEVHT1JZX1BFTkRJTkcQAxIeChpNWF9TVEFUVVNfQ0FURUdPUllf",
+ "V0FSTklORxAEEioKJk1YX1NUQVRVU19DQVRFR09SWV9DT01NVU5JQ0FUSU9O",
+ "X0VSUk9SEAUSKgomTVhfU1RBVFVTX0NBVEVHT1JZX0NPTkZJR1VSQVRJT05f",
+ "RVJST1IQBhIoCiRNWF9TVEFUVVNfQ0FURUdPUllfT1BFUkFUSU9OQUxfRVJS",
+ "T1IQBxIlCiFNWF9TVEFUVVNfQ0FURUdPUllfU0VDVVJJVFlfRVJST1IQCBIl",
+ "CiFNWF9TVEFUVVNfQ0FURUdPUllfU09GVFdBUkVfRVJST1IQCRIiCh5NWF9T",
+ "VEFUVVNfQ0FURUdPUllfT1RIRVJfRVJST1IQCirKAgoOTXhTdGF0dXNTb3Vy",
+ "Y2USIAocTVhfU1RBVFVTX1NPVVJDRV9VTlNQRUNJRklFRBAAEhwKGE1YX1NU",
+ "QVRVU19TT1VSQ0VfVU5LTk9XThABEiMKH01YX1NUQVRVU19TT1VSQ0VfUkVR",
+ "VUVTVElOR19MTVgQAhIjCh9NWF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJTkdf",
+ "TE1YEAMSIwofTVhfU1RBVFVTX1NPVVJDRV9SRVFVRVNUSU5HX05NWBAEEiMK",
+ "H01YX1NUQVRVU19TT1VSQ0VfUkVTUE9ORElOR19OTVgQBRIxCi1NWF9TVEFU",
+ "VVNfU09VUkNFX1JFUVVFU1RJTkdfQVVUT01BVElPTl9PQkpFQ1QQBhIxCi1N",
+ "WF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJTkdfQVVUT01BVElPTl9PQkpFQ1QQ",
+ "ByrdBAoKTXhEYXRhVHlwZRIcChhNWF9EQVRBX1RZUEVfVU5TUEVDSUZJRUQQ",
+ "ABIYChRNWF9EQVRBX1RZUEVfVU5LTk9XThABEhgKFE1YX0RBVEFfVFlQRV9O",
+ "T19EQVRBEAISGAoUTVhfREFUQV9UWVBFX0JPT0xFQU4QAxIYChRNWF9EQVRB",
+ "X1RZUEVfSU5URUdFUhAEEhYKEk1YX0RBVEFfVFlQRV9GTE9BVBAFEhcKE01Y",
+ "X0RBVEFfVFlQRV9ET1VCTEUQBhIXChNNWF9EQVRBX1RZUEVfU1RSSU5HEAcS",
+ "FQoRTVhfREFUQV9UWVBFX1RJTUUQCBIdChlNWF9EQVRBX1RZUEVfRUxBUFNF",
+ "RF9USU1FEAkSHwobTVhfREFUQV9UWVBFX1JFRkVSRU5DRV9UWVBFEAoSHAoY",
+ "TVhfREFUQV9UWVBFX1NUQVRVU19UWVBFEAsSFQoRTVhfREFUQV9UWVBFX0VO",
+ "VU0QDBItCilNWF9EQVRBX1RZUEVfU0VDVVJJVFlfQ0xBU1NJRklDQVRJT05f",
+ "RU5VTRANEiIKHk1YX0RBVEFfVFlQRV9EQVRBX1FVQUxJVFlfVFlQRRAOEh8K",
+ "G01YX0RBVEFfVFlQRV9RVUFMSUZJRURfRU5VTRAPEiEKHU1YX0RBVEFfVFlQ",
+ "RV9RVUFMSUZJRURfU1RSVUNUEBASKQolTVhfREFUQV9UWVBFX0lOVEVSTkFU",
+ "SU9OQUxJWkVEX1NUUklORxAREhsKF01YX0RBVEFfVFlQRV9CSUdfU1RSSU5H",
+ "EBISFAoQTVhfREFUQV9UWVBFX0VORBATKqMDChJQcm90b2NvbFN0YXR1c0Nv",
+ "ZGUSJAogUFJPVE9DT0xfU1RBVFVTX0NPREVfVU5TUEVDSUZJRUQQABIbChdQ",
+ "Uk9UT0NPTF9TVEFUVVNfQ09ERV9PSxABEigKJFBST1RPQ09MX1NUQVRVU19D",
+ "T0RFX0lOVkFMSURfUkVRVUVTVBACEioKJlBST1RPQ09MX1NUQVRVU19DT0RF",
+ "X1NFU1NJT05fTk9UX0ZPVU5EEAMSKgomUFJPVE9DT0xfU1RBVFVTX0NPREVf",
+ "U0VTU0lPTl9OT1RfUkVBRFkQBBIrCidQUk9UT0NPTF9TVEFUVVNfQ09ERV9X",
+ "T1JLRVJfVU5BVkFJTEFCTEUQBRIgChxQUk9UT0NPTF9TVEFUVVNfQ09ERV9U",
+ "SU1FT1VUEAYSIQodUFJPVE9DT0xfU1RBVFVTX0NPREVfQ0FOQ0VMRUQQBxIr",
+ "CidQUk9UT0NPTF9TVEFUVVNfQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04QCBIp",
+ "CiVQUk9UT0NPTF9TVEFUVVNfQ09ERV9NWEFDQ0VTU19GQUlMVVJFEAkqvwIK",
+ "DFNlc3Npb25TdGF0ZRIdChlTRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAAS",
+ "GgoWU0VTU0lPTl9TVEFURV9DUkVBVElORxABEiEKHVNFU1NJT05fU1RBVEVf",
+ "U1RBUlRJTkdfV09SS0VSEAISIgoeU0VTU0lPTl9TVEFURV9XQUlUSU5HX0ZP",
+ "Ul9QSVBFEAMSHQoZU0VTU0lPTl9TVEFURV9IQU5EU0hBS0lORxAEEiUKIVNF",
+ "U1NJT05fU1RBVEVfSU5JVElBTElaSU5HX1dPUktFUhAFEhcKE1NFU1NJT05f",
+ "U1RBVEVfUkVBRFkQBhIZChVTRVNTSU9OX1NUQVRFX0NMT1NJTkcQBxIYChRT",
+ "RVNTSU9OX1NUQVRFX0NMT1NFRBAIEhkKFVNFU1NJT05fU1RBVEVfRkFVTFRF",
+ "RBAJMuAECg9NeEFjY2Vzc0dhdGV3YXkSXQoLT3BlblNlc3Npb24SJy5teGFj",
+ "Y2Vzc19nYXRld2F5LnYxLk9wZW5TZXNzaW9uUmVxdWVzdBolLm14YWNjZXNz",
+ "X2dhdGV3YXkudjEuT3BlblNlc3Npb25SZXBseRJgCgxDbG9zZVNlc3Npb24S",
+ "KC5teGFjY2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcXVlc3QaJi5t",
+ "eGFjY2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcGx5ElQKBkludm9r",
+ "ZRIlLm14YWNjZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVxdWVzdBojLm14",
+ "YWNjZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVwbHkSWAoMU3RyZWFtRXZl",
+ "bnRzEigubXhhY2Nlc3NfZ2F0ZXdheS52MS5TdHJlYW1FdmVudHNSZXF1ZXN0",
+ "GhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEV2ZW50MAESbAoQQWNrbm93bGVk",
+ "Z2VBbGFybRIsLm14YWNjZXNzX2dhdGV3YXkudjEuQWNrbm93bGVkZ2VBbGFy",
+ "bVJlcXVlc3QaKi5teGFjY2Vzc19nYXRld2F5LnYxLkFja25vd2xlZGdlQWxh",
+ "cm1SZXBseRJuChFRdWVyeUFjdGl2ZUFsYXJtcxItLm14YWNjZXNzX2dhdGV3",
+ "YXkudjEuUXVlcnlBY3RpdmVBbGFybXNSZXF1ZXN0GigubXhhY2Nlc3NfZ2F0",
+ "ZXdheS52MS5BY3RpdmVBbGFybVNuYXBzaG90MAFCHKoCGU14R2F0ZXdheS5D",
+ "b250cmFjdHMuUHJvdG9iBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.DurationReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, },
- new pbr::GeneratedClrTypeInfo(new[] {typeof(global::MxGateway.Contracts.Proto.MxCommandKind), typeof(global::MxGateway.Contracts.Proto.MxEventFamily), typeof(global::MxGateway.Contracts.Proto.MxStatusCategory), typeof(global::MxGateway.Contracts.Proto.MxStatusSource), typeof(global::MxGateway.Contracts.Proto.MxDataType), typeof(global::MxGateway.Contracts.Proto.ProtocolStatusCode), typeof(global::MxGateway.Contracts.Proto.SessionState), }, null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::MxGateway.Contracts.Proto.MxCommandKind), typeof(global::MxGateway.Contracts.Proto.MxEventFamily), typeof(global::MxGateway.Contracts.Proto.AlarmTransitionKind), typeof(global::MxGateway.Contracts.Proto.AlarmConditionState), typeof(global::MxGateway.Contracts.Proto.MxStatusCategory), typeof(global::MxGateway.Contracts.Proto.MxStatusSource), typeof(global::MxGateway.Contracts.Proto.MxDataType), typeof(global::MxGateway.Contracts.Proto.ProtocolStatusCode), typeof(global::MxGateway.Contracts.Proto.SessionState), }, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OpenSessionRequest), global::MxGateway.Contracts.Proto.OpenSessionRequest.Parser, new[]{ "RequestedBackend", "ClientSessionName", "ClientCorrelationId", "CommandTimeout" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OpenSessionReply), global::MxGateway.Contracts.Proto.OpenSessionReply.Parser, new[]{ "SessionId", "BackendName", "WorkerProcessId", "WorkerProtocolVersion", "Capabilities", "DefaultCommandTimeout", "ProtocolStatus", "GatewayProtocolVersion" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.CloseSessionRequest), global::MxGateway.Contracts.Proto.CloseSessionRequest.Parser, new[]{ "SessionId", "ClientCorrelationId" }, null, null, null, null),
@@ -392,11 +442,16 @@ namespace MxGateway.Contracts.Proto {
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.SessionStateReply), global::MxGateway.Contracts.Proto.SessionStateReply.Parser, new[]{ "State" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.WorkerInfoReply), global::MxGateway.Contracts.Proto.WorkerInfoReply.Parser, new[]{ "WorkerProcessId", "WorkerVersion", "MxaccessProgid", "MxaccessClsid" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.DrainEventsReply), global::MxGateway.Contracts.Proto.DrainEventsReply.Parser, new[]{ "Events" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.MxEvent), global::MxGateway.Contracts.Proto.MxEvent.Parser, new[]{ "Family", "SessionId", "ServerHandle", "ItemHandle", "Value", "Quality", "SourceTimestamp", "Statuses", "WorkerSequence", "WorkerTimestamp", "GatewayReceiveTimestamp", "Hresult", "RawStatus", "OnDataChange", "OnWriteComplete", "OperationComplete", "OnBufferedDataChange" }, new[]{ "Body", "Hresult" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.MxEvent), global::MxGateway.Contracts.Proto.MxEvent.Parser, new[]{ "Family", "SessionId", "ServerHandle", "ItemHandle", "Value", "Quality", "SourceTimestamp", "Statuses", "WorkerSequence", "WorkerTimestamp", "GatewayReceiveTimestamp", "Hresult", "RawStatus", "OnDataChange", "OnWriteComplete", "OperationComplete", "OnBufferedDataChange", "OnAlarmTransition" }, new[]{ "Body", "Hresult" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OnDataChangeEvent), global::MxGateway.Contracts.Proto.OnDataChangeEvent.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OnWriteCompleteEvent), global::MxGateway.Contracts.Proto.OnWriteCompleteEvent.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OperationCompleteEvent), global::MxGateway.Contracts.Proto.OperationCompleteEvent.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OnBufferedDataChangeEvent), global::MxGateway.Contracts.Proto.OnBufferedDataChangeEvent.Parser, new[]{ "DataType", "QualityValues", "TimestampValues", "RawDataType" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent), global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent.Parser, new[]{ "AlarmFullReference", "SourceObjectReference", "AlarmTypeName", "TransitionKind", "Severity", "OriginalRaiseTimestamp", "TransitionTimestamp", "OperatorUser", "OperatorComment", "Category", "Description", "CurrentValue", "LimitValue" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.ActiveAlarmSnapshot), global::MxGateway.Contracts.Proto.ActiveAlarmSnapshot.Parser, new[]{ "AlarmFullReference", "SourceObjectReference", "AlarmTypeName", "Severity", "OriginalRaiseTimestamp", "CurrentState", "Category", "Description", "LastTransitionTimestamp", "OperatorUser", "OperatorComment", "CurrentValue", "LimitValue" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest), global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest.Parser, new[]{ "SessionId", "ClientCorrelationId", "AlarmFullReference", "Comment", "OperatorUser" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.AcknowledgeAlarmReply), global::MxGateway.Contracts.Proto.AcknowledgeAlarmReply.Parser, new[]{ "SessionId", "CorrelationId", "ProtocolStatus", "Hresult", "Status", "DiagnosticMessage" }, new[]{ "Hresult" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest), global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest.Parser, new[]{ "SessionId", "ClientCorrelationId", "AlarmFilterPrefix" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.MxStatusProxy), global::MxGateway.Contracts.Proto.MxStatusProxy.Parser, new[]{ "Success", "Category", "DetectedBy", "Detail", "RawCategory", "RawDetectedBy", "DiagnosticText" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.MxValue), global::MxGateway.Contracts.Proto.MxValue.Parser, new[]{ "DataType", "VariantType", "IsNull", "RawDiagnostic", "RawDataType", "BoolValue", "Int32Value", "Int64Value", "FloatValue", "DoubleValue", "StringValue", "TimestampValue", "ArrayValue", "RawValue" }, new[]{ "Kind" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.MxArray), global::MxGateway.Contracts.Proto.MxArray.Parser, new[]{ "ElementDataType", "VariantType", "Dimensions", "RawDiagnostic", "RawElementDataType", "BoolValues", "Int32Values", "Int64Values", "FloatValues", "DoubleValues", "StringValues", "TimestampValues", "RawValues" }, new[]{ "Values" }, null, null, null),
@@ -454,6 +509,22 @@ namespace MxGateway.Contracts.Proto {
[pbr::OriginalName("MX_EVENT_FAMILY_ON_WRITE_COMPLETE")] OnWriteComplete = 2,
[pbr::OriginalName("MX_EVENT_FAMILY_OPERATION_COMPLETE")] OperationComplete = 3,
[pbr::OriginalName("MX_EVENT_FAMILY_ON_BUFFERED_DATA_CHANGE")] OnBufferedDataChange = 4,
+ [pbr::OriginalName("MX_EVENT_FAMILY_ON_ALARM_TRANSITION")] OnAlarmTransition = 5,
+ }
+
+ public enum AlarmTransitionKind {
+ [pbr::OriginalName("ALARM_TRANSITION_KIND_UNSPECIFIED")] Unspecified = 0,
+ [pbr::OriginalName("ALARM_TRANSITION_KIND_RAISE")] Raise = 1,
+ [pbr::OriginalName("ALARM_TRANSITION_KIND_ACKNOWLEDGE")] Acknowledge = 2,
+ [pbr::OriginalName("ALARM_TRANSITION_KIND_CLEAR")] Clear = 3,
+ [pbr::OriginalName("ALARM_TRANSITION_KIND_RETRIGGER")] Retrigger = 4,
+ }
+
+ public enum AlarmConditionState {
+ [pbr::OriginalName("ALARM_CONDITION_STATE_UNSPECIFIED")] Unspecified = 0,
+ [pbr::OriginalName("ALARM_CONDITION_STATE_ACTIVE")] Active = 1,
+ [pbr::OriginalName("ALARM_CONDITION_STATE_ACTIVE_ACKED")] ActiveAcked = 2,
+ [pbr::OriginalName("ALARM_CONDITION_STATE_INACTIVE")] Inactive = 3,
}
public enum MxStatusCategory {
@@ -15474,6 +15545,9 @@ namespace MxGateway.Contracts.Proto {
case BodyOneofCase.OnBufferedDataChange:
OnBufferedDataChange = other.OnBufferedDataChange.Clone();
break;
+ case BodyOneofCase.OnAlarmTransition:
+ OnAlarmTransition = other.OnAlarmTransition.Clone();
+ break;
}
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
@@ -15703,6 +15777,18 @@ namespace MxGateway.Contracts.Proto {
}
}
+ /// Field number for the "on_alarm_transition" field.
+ public const int OnAlarmTransitionFieldNumber = 24;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent OnAlarmTransition {
+ get { return bodyCase_ == BodyOneofCase.OnAlarmTransition ? (global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent) body_ : null; }
+ set {
+ body_ = value;
+ bodyCase_ = value == null ? BodyOneofCase.None : BodyOneofCase.OnAlarmTransition;
+ }
+ }
+
private object body_;
/// Enum of possible cases for the "body" oneof.
public enum BodyOneofCase {
@@ -15711,6 +15797,7 @@ namespace MxGateway.Contracts.Proto {
OnWriteComplete = 21,
OperationComplete = 22,
OnBufferedDataChange = 23,
+ OnAlarmTransition = 24,
}
private BodyOneofCase bodyCase_ = BodyOneofCase.None;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -15758,6 +15845,7 @@ namespace MxGateway.Contracts.Proto {
if (!object.Equals(OnWriteComplete, other.OnWriteComplete)) return false;
if (!object.Equals(OperationComplete, other.OperationComplete)) return false;
if (!object.Equals(OnBufferedDataChange, other.OnBufferedDataChange)) return false;
+ if (!object.Equals(OnAlarmTransition, other.OnAlarmTransition)) return false;
if (BodyCase != other.BodyCase) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -15783,6 +15871,7 @@ namespace MxGateway.Contracts.Proto {
if (bodyCase_ == BodyOneofCase.OnWriteComplete) hash ^= OnWriteComplete.GetHashCode();
if (bodyCase_ == BodyOneofCase.OperationComplete) hash ^= OperationComplete.GetHashCode();
if (bodyCase_ == BodyOneofCase.OnBufferedDataChange) hash ^= OnBufferedDataChange.GetHashCode();
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) hash ^= OnAlarmTransition.GetHashCode();
hash ^= (int) bodyCase_;
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
@@ -15867,6 +15956,10 @@ namespace MxGateway.Contracts.Proto {
output.WriteRawTag(186, 1);
output.WriteMessage(OnBufferedDataChange);
}
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) {
+ output.WriteRawTag(194, 1);
+ output.WriteMessage(OnAlarmTransition);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -15942,6 +16035,10 @@ namespace MxGateway.Contracts.Proto {
output.WriteRawTag(186, 1);
output.WriteMessage(OnBufferedDataChange);
}
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) {
+ output.WriteRawTag(194, 1);
+ output.WriteMessage(OnAlarmTransition);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -16001,6 +16098,9 @@ namespace MxGateway.Contracts.Proto {
if (bodyCase_ == BodyOneofCase.OnBufferedDataChange) {
size += 2 + pb::CodedOutputStream.ComputeMessageSize(OnBufferedDataChange);
}
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) {
+ size += 2 + pb::CodedOutputStream.ComputeMessageSize(OnAlarmTransition);
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -16087,6 +16187,12 @@ namespace MxGateway.Contracts.Proto {
}
OnBufferedDataChange.MergeFrom(other.OnBufferedDataChange);
break;
+ case BodyOneofCase.OnAlarmTransition:
+ if (OnAlarmTransition == null) {
+ OnAlarmTransition = new global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent();
+ }
+ OnAlarmTransition.MergeFrom(other.OnAlarmTransition);
+ break;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
@@ -16208,6 +16314,15 @@ namespace MxGateway.Contracts.Proto {
OnBufferedDataChange = subBuilder;
break;
}
+ case 194: {
+ global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent subBuilder = new global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent();
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) {
+ subBuilder.MergeFrom(OnAlarmTransition);
+ }
+ input.ReadMessage(subBuilder);
+ OnAlarmTransition = subBuilder;
+ break;
+ }
}
}
#endif
@@ -16327,6 +16442,15 @@ namespace MxGateway.Contracts.Proto {
OnBufferedDataChange = subBuilder;
break;
}
+ case 194: {
+ global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent subBuilder = new global::MxGateway.Contracts.Proto.OnAlarmTransitionEvent();
+ if (bodyCase_ == BodyOneofCase.OnAlarmTransition) {
+ subBuilder.MergeFrom(OnAlarmTransition);
+ }
+ input.ReadMessage(subBuilder);
+ OnAlarmTransition = subBuilder;
+ break;
+ }
}
}
}
@@ -17144,6 +17268,2492 @@ namespace MxGateway.Contracts.Proto {
}
+ ///
+ /// Carries a single MXAccess alarm transition (raise / acknowledge / clear /
+ /// re-trigger) in native MXAccess terms. The Part 9 state machine + ACL +
+ /// multi-source aggregation lives in lmxopcua's AlarmConditionService; the
+ /// gateway is UA-agnostic and forwards the raw payload.
+ ///
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class OnAlarmTransitionEvent : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new OnAlarmTransitionEvent());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[55]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public OnAlarmTransitionEvent() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public OnAlarmTransitionEvent(OnAlarmTransitionEvent other) : this() {
+ alarmFullReference_ = other.alarmFullReference_;
+ sourceObjectReference_ = other.sourceObjectReference_;
+ alarmTypeName_ = other.alarmTypeName_;
+ transitionKind_ = other.transitionKind_;
+ severity_ = other.severity_;
+ originalRaiseTimestamp_ = other.originalRaiseTimestamp_ != null ? other.originalRaiseTimestamp_.Clone() : null;
+ transitionTimestamp_ = other.transitionTimestamp_ != null ? other.transitionTimestamp_.Clone() : null;
+ operatorUser_ = other.operatorUser_;
+ operatorComment_ = other.operatorComment_;
+ category_ = other.category_;
+ description_ = other.description_;
+ currentValue_ = other.currentValue_ != null ? other.currentValue_.Clone() : null;
+ limitValue_ = other.limitValue_ != null ? other.limitValue_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public OnAlarmTransitionEvent Clone() {
+ return new OnAlarmTransitionEvent(this);
+ }
+
+ /// Field number for the "alarm_full_reference" field.
+ public const int AlarmFullReferenceFieldNumber = 1;
+ private string alarmFullReference_ = "";
+ ///
+ /// Fully-qualified alarm reference (e.g. "Tank01.Level.HiHi"). Stable across
+ /// transitions of the same condition; used by the lmxopcua side to correlate
+ /// raise/ack/clear into a single Part 9 condition.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmFullReference {
+ get { return alarmFullReference_; }
+ set {
+ alarmFullReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "source_object_reference" field.
+ public const int SourceObjectReferenceFieldNumber = 2;
+ private string sourceObjectReference_ = "";
+ ///
+ /// Galaxy-side source object reference (e.g. "Tank01"). Empty for alarms
+ /// that do not bind to a Galaxy object.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string SourceObjectReference {
+ get { return sourceObjectReference_; }
+ set {
+ sourceObjectReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "alarm_type_name" field.
+ public const int AlarmTypeNameFieldNumber = 3;
+ private string alarmTypeName_ = "";
+ ///
+ /// MxAccess alarm-type qualifier (e.g. "AnalogLimitAlarm.HiHi", "DiscAlarm").
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmTypeName {
+ get { return alarmTypeName_; }
+ set {
+ alarmTypeName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "transition_kind" field.
+ public const int TransitionKindFieldNumber = 4;
+ private global::MxGateway.Contracts.Proto.AlarmTransitionKind transitionKind_ = global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified;
+ ///
+ /// What kind of state change this event represents.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.AlarmTransitionKind TransitionKind {
+ get { return transitionKind_; }
+ set {
+ transitionKind_ = value;
+ }
+ }
+
+ /// Field number for the "severity" field.
+ public const int SeverityFieldNumber = 5;
+ private int severity_;
+ ///
+ /// Raw MXAccess severity value. Mapping to OPC UA 0-1000 happens server-side
+ /// in lmxopcua via MxAccessSeverityMapper; the gateway preserves the native
+ /// MXAccess scale.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int Severity {
+ get { return severity_; }
+ set {
+ severity_ = value;
+ }
+ }
+
+ /// Field number for the "original_raise_timestamp" field.
+ public const int OriginalRaiseTimestampFieldNumber = 6;
+ private global::Google.Protobuf.WellKnownTypes.Timestamp originalRaiseTimestamp_;
+ ///
+ /// When the alarm originally entered the active state. Preserved across
+ /// acknowledge transitions so the Part 9 condition keeps the original raise
+ /// time. Unset on retrigger from a previously-cleared condition.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::Google.Protobuf.WellKnownTypes.Timestamp OriginalRaiseTimestamp {
+ get { return originalRaiseTimestamp_; }
+ set {
+ originalRaiseTimestamp_ = value;
+ }
+ }
+
+ /// Field number for the "transition_timestamp" field.
+ public const int TransitionTimestampFieldNumber = 7;
+ private global::Google.Protobuf.WellKnownTypes.Timestamp transitionTimestamp_;
+ ///
+ /// When this specific transition occurred (raise time on Raise, ack time on
+ /// Acknowledge, clear time on Clear).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::Google.Protobuf.WellKnownTypes.Timestamp TransitionTimestamp {
+ get { return transitionTimestamp_; }
+ set {
+ transitionTimestamp_ = value;
+ }
+ }
+
+ /// Field number for the "operator_user" field.
+ public const int OperatorUserFieldNumber = 8;
+ private string operatorUser_ = "";
+ ///
+ /// Operator principal recorded by MXAccess on Acknowledge transitions.
+ /// Empty on raise / clear.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string OperatorUser {
+ get { return operatorUser_; }
+ set {
+ operatorUser_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "operator_comment" field.
+ public const int OperatorCommentFieldNumber = 9;
+ private string operatorComment_ = "";
+ ///
+ /// Operator-supplied comment recorded by MXAccess on Acknowledge transitions.
+ /// Empty on raise / clear or when no comment was supplied.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string OperatorComment {
+ get { return operatorComment_; }
+ set {
+ operatorComment_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "category" field.
+ public const int CategoryFieldNumber = 10;
+ private string category_ = "";
+ ///
+ /// MxAccess alarm category (taxonomy bucket configured in the Galaxy
+ /// template, e.g. "Process", "Safety", "Diagnostics").
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Category {
+ get { return category_; }
+ set {
+ category_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description" field.
+ public const int DescriptionFieldNumber = 11;
+ private string description_ = "";
+ ///
+ /// Human-readable alarm description from the MxAccess alarm definition.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Description {
+ get { return description_; }
+ set {
+ description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "current_value" field.
+ public const int CurrentValueFieldNumber = 12;
+ private global::MxGateway.Contracts.Proto.MxValue currentValue_;
+ ///
+ /// Current alarm value (the value of the source attribute at the moment of
+ /// transition). Optional; populated when MxAccess surfaces it.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.MxValue CurrentValue {
+ get { return currentValue_; }
+ set {
+ currentValue_ = value;
+ }
+ }
+
+ /// Field number for the "limit_value" field.
+ public const int LimitValueFieldNumber = 13;
+ private global::MxGateway.Contracts.Proto.MxValue limitValue_;
+ ///
+ /// Limit/threshold value that triggered the transition for limit alarms.
+ /// Optional; populated for AnalogLimitAlarm-family transitions.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.MxValue LimitValue {
+ get { return limitValue_; }
+ set {
+ limitValue_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as OnAlarmTransitionEvent);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(OnAlarmTransitionEvent other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (AlarmFullReference != other.AlarmFullReference) return false;
+ if (SourceObjectReference != other.SourceObjectReference) return false;
+ if (AlarmTypeName != other.AlarmTypeName) return false;
+ if (TransitionKind != other.TransitionKind) return false;
+ if (Severity != other.Severity) return false;
+ if (!object.Equals(OriginalRaiseTimestamp, other.OriginalRaiseTimestamp)) return false;
+ if (!object.Equals(TransitionTimestamp, other.TransitionTimestamp)) return false;
+ if (OperatorUser != other.OperatorUser) return false;
+ if (OperatorComment != other.OperatorComment) return false;
+ if (Category != other.Category) return false;
+ if (Description != other.Description) return false;
+ if (!object.Equals(CurrentValue, other.CurrentValue)) return false;
+ if (!object.Equals(LimitValue, other.LimitValue)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (AlarmFullReference.Length != 0) hash ^= AlarmFullReference.GetHashCode();
+ if (SourceObjectReference.Length != 0) hash ^= SourceObjectReference.GetHashCode();
+ if (AlarmTypeName.Length != 0) hash ^= AlarmTypeName.GetHashCode();
+ if (TransitionKind != global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified) hash ^= TransitionKind.GetHashCode();
+ if (Severity != 0) hash ^= Severity.GetHashCode();
+ if (originalRaiseTimestamp_ != null) hash ^= OriginalRaiseTimestamp.GetHashCode();
+ if (transitionTimestamp_ != null) hash ^= TransitionTimestamp.GetHashCode();
+ if (OperatorUser.Length != 0) hash ^= OperatorUser.GetHashCode();
+ if (OperatorComment.Length != 0) hash ^= OperatorComment.GetHashCode();
+ if (Category.Length != 0) hash ^= Category.GetHashCode();
+ if (Description.Length != 0) hash ^= Description.GetHashCode();
+ if (currentValue_ != null) hash ^= CurrentValue.GetHashCode();
+ if (limitValue_ != null) hash ^= LimitValue.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmTypeName);
+ }
+ if (TransitionKind != global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified) {
+ output.WriteRawTag(32);
+ output.WriteEnum((int) TransitionKind);
+ }
+ if (Severity != 0) {
+ output.WriteRawTag(40);
+ output.WriteInt32(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ output.WriteRawTag(50);
+ output.WriteMessage(OriginalRaiseTimestamp);
+ }
+ if (transitionTimestamp_ != null) {
+ output.WriteRawTag(58);
+ output.WriteMessage(TransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(66);
+ output.WriteString(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ output.WriteRawTag(74);
+ output.WriteString(OperatorComment);
+ }
+ if (Category.Length != 0) {
+ output.WriteRawTag(82);
+ output.WriteString(Category);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(90);
+ output.WriteString(Description);
+ }
+ if (currentValue_ != null) {
+ output.WriteRawTag(98);
+ output.WriteMessage(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ output.WriteRawTag(106);
+ output.WriteMessage(LimitValue);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmTypeName);
+ }
+ if (TransitionKind != global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified) {
+ output.WriteRawTag(32);
+ output.WriteEnum((int) TransitionKind);
+ }
+ if (Severity != 0) {
+ output.WriteRawTag(40);
+ output.WriteInt32(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ output.WriteRawTag(50);
+ output.WriteMessage(OriginalRaiseTimestamp);
+ }
+ if (transitionTimestamp_ != null) {
+ output.WriteRawTag(58);
+ output.WriteMessage(TransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(66);
+ output.WriteString(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ output.WriteRawTag(74);
+ output.WriteString(OperatorComment);
+ }
+ if (Category.Length != 0) {
+ output.WriteRawTag(82);
+ output.WriteString(Category);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(90);
+ output.WriteString(Description);
+ }
+ if (currentValue_ != null) {
+ output.WriteRawTag(98);
+ output.WriteMessage(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ output.WriteRawTag(106);
+ output.WriteMessage(LimitValue);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (AlarmFullReference.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmTypeName);
+ }
+ if (TransitionKind != global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) TransitionKind);
+ }
+ if (Severity != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(OriginalRaiseTimestamp);
+ }
+ if (transitionTimestamp_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(TransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorComment);
+ }
+ if (Category.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Category);
+ }
+ if (Description.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+ }
+ if (currentValue_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(LimitValue);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(OnAlarmTransitionEvent other) {
+ if (other == null) {
+ return;
+ }
+ if (other.AlarmFullReference.Length != 0) {
+ AlarmFullReference = other.AlarmFullReference;
+ }
+ if (other.SourceObjectReference.Length != 0) {
+ SourceObjectReference = other.SourceObjectReference;
+ }
+ if (other.AlarmTypeName.Length != 0) {
+ AlarmTypeName = other.AlarmTypeName;
+ }
+ if (other.TransitionKind != global::MxGateway.Contracts.Proto.AlarmTransitionKind.Unspecified) {
+ TransitionKind = other.TransitionKind;
+ }
+ if (other.Severity != 0) {
+ Severity = other.Severity;
+ }
+ if (other.originalRaiseTimestamp_ != null) {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ OriginalRaiseTimestamp.MergeFrom(other.OriginalRaiseTimestamp);
+ }
+ if (other.transitionTimestamp_ != null) {
+ if (transitionTimestamp_ == null) {
+ TransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ TransitionTimestamp.MergeFrom(other.TransitionTimestamp);
+ }
+ if (other.OperatorUser.Length != 0) {
+ OperatorUser = other.OperatorUser;
+ }
+ if (other.OperatorComment.Length != 0) {
+ OperatorComment = other.OperatorComment;
+ }
+ if (other.Category.Length != 0) {
+ Category = other.Category;
+ }
+ if (other.Description.Length != 0) {
+ Description = other.Description;
+ }
+ if (other.currentValue_ != null) {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ CurrentValue.MergeFrom(other.CurrentValue);
+ }
+ if (other.limitValue_ != null) {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ LimitValue.MergeFrom(other.LimitValue);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 18: {
+ SourceObjectReference = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmTypeName = input.ReadString();
+ break;
+ }
+ case 32: {
+ TransitionKind = (global::MxGateway.Contracts.Proto.AlarmTransitionKind) input.ReadEnum();
+ break;
+ }
+ case 40: {
+ Severity = input.ReadInt32();
+ break;
+ }
+ case 50: {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(OriginalRaiseTimestamp);
+ break;
+ }
+ case 58: {
+ if (transitionTimestamp_ == null) {
+ TransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(TransitionTimestamp);
+ break;
+ }
+ case 66: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ case 74: {
+ OperatorComment = input.ReadString();
+ break;
+ }
+ case 82: {
+ Category = input.ReadString();
+ break;
+ }
+ case 90: {
+ Description = input.ReadString();
+ break;
+ }
+ case 98: {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(CurrentValue);
+ break;
+ }
+ case 106: {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(LimitValue);
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 18: {
+ SourceObjectReference = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmTypeName = input.ReadString();
+ break;
+ }
+ case 32: {
+ TransitionKind = (global::MxGateway.Contracts.Proto.AlarmTransitionKind) input.ReadEnum();
+ break;
+ }
+ case 40: {
+ Severity = input.ReadInt32();
+ break;
+ }
+ case 50: {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(OriginalRaiseTimestamp);
+ break;
+ }
+ case 58: {
+ if (transitionTimestamp_ == null) {
+ TransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(TransitionTimestamp);
+ break;
+ }
+ case 66: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ case 74: {
+ OperatorComment = input.ReadString();
+ break;
+ }
+ case 82: {
+ Category = input.ReadString();
+ break;
+ }
+ case 90: {
+ Description = input.ReadString();
+ break;
+ }
+ case 98: {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(CurrentValue);
+ break;
+ }
+ case 106: {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(LimitValue);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ ///
+ /// Snapshot of a currently-active MXAccess alarm condition, returned from a
+ /// QueryActiveAlarms ConditionRefresh stream.
+ ///
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class ActiveAlarmSnapshot : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ActiveAlarmSnapshot());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[56]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public ActiveAlarmSnapshot() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public ActiveAlarmSnapshot(ActiveAlarmSnapshot other) : this() {
+ alarmFullReference_ = other.alarmFullReference_;
+ sourceObjectReference_ = other.sourceObjectReference_;
+ alarmTypeName_ = other.alarmTypeName_;
+ severity_ = other.severity_;
+ originalRaiseTimestamp_ = other.originalRaiseTimestamp_ != null ? other.originalRaiseTimestamp_.Clone() : null;
+ currentState_ = other.currentState_;
+ category_ = other.category_;
+ description_ = other.description_;
+ lastTransitionTimestamp_ = other.lastTransitionTimestamp_ != null ? other.lastTransitionTimestamp_.Clone() : null;
+ operatorUser_ = other.operatorUser_;
+ operatorComment_ = other.operatorComment_;
+ currentValue_ = other.currentValue_ != null ? other.currentValue_.Clone() : null;
+ limitValue_ = other.limitValue_ != null ? other.limitValue_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public ActiveAlarmSnapshot Clone() {
+ return new ActiveAlarmSnapshot(this);
+ }
+
+ /// Field number for the "alarm_full_reference" field.
+ public const int AlarmFullReferenceFieldNumber = 1;
+ private string alarmFullReference_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmFullReference {
+ get { return alarmFullReference_; }
+ set {
+ alarmFullReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "source_object_reference" field.
+ public const int SourceObjectReferenceFieldNumber = 2;
+ private string sourceObjectReference_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string SourceObjectReference {
+ get { return sourceObjectReference_; }
+ set {
+ sourceObjectReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "alarm_type_name" field.
+ public const int AlarmTypeNameFieldNumber = 3;
+ private string alarmTypeName_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmTypeName {
+ get { return alarmTypeName_; }
+ set {
+ alarmTypeName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "severity" field.
+ public const int SeverityFieldNumber = 4;
+ private int severity_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int Severity {
+ get { return severity_; }
+ set {
+ severity_ = value;
+ }
+ }
+
+ /// Field number for the "original_raise_timestamp" field.
+ public const int OriginalRaiseTimestampFieldNumber = 5;
+ private global::Google.Protobuf.WellKnownTypes.Timestamp originalRaiseTimestamp_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::Google.Protobuf.WellKnownTypes.Timestamp OriginalRaiseTimestamp {
+ get { return originalRaiseTimestamp_; }
+ set {
+ originalRaiseTimestamp_ = value;
+ }
+ }
+
+ /// Field number for the "current_state" field.
+ public const int CurrentStateFieldNumber = 6;
+ private global::MxGateway.Contracts.Proto.AlarmConditionState currentState_ = global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.AlarmConditionState CurrentState {
+ get { return currentState_; }
+ set {
+ currentState_ = value;
+ }
+ }
+
+ /// Field number for the "category" field.
+ public const int CategoryFieldNumber = 7;
+ private string category_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Category {
+ get { return category_; }
+ set {
+ category_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description" field.
+ public const int DescriptionFieldNumber = 8;
+ private string description_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Description {
+ get { return description_; }
+ set {
+ description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "last_transition_timestamp" field.
+ public const int LastTransitionTimestampFieldNumber = 9;
+ private global::Google.Protobuf.WellKnownTypes.Timestamp lastTransitionTimestamp_;
+ ///
+ /// When the most recent state transition occurred (last raise, last ack,
+ /// last clear).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::Google.Protobuf.WellKnownTypes.Timestamp LastTransitionTimestamp {
+ get { return lastTransitionTimestamp_; }
+ set {
+ lastTransitionTimestamp_ = value;
+ }
+ }
+
+ /// Field number for the "operator_user" field.
+ public const int OperatorUserFieldNumber = 10;
+ private string operatorUser_ = "";
+ ///
+ /// Operator who acknowledged the alarm if the current state is ActiveAcked.
+ /// Empty otherwise.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string OperatorUser {
+ get { return operatorUser_; }
+ set {
+ operatorUser_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "operator_comment" field.
+ public const int OperatorCommentFieldNumber = 11;
+ private string operatorComment_ = "";
+ ///
+ /// Operator comment recorded with the most recent acknowledge if the current
+ /// state is ActiveAcked. Empty otherwise.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string OperatorComment {
+ get { return operatorComment_; }
+ set {
+ operatorComment_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "current_value" field.
+ public const int CurrentValueFieldNumber = 12;
+ private global::MxGateway.Contracts.Proto.MxValue currentValue_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.MxValue CurrentValue {
+ get { return currentValue_; }
+ set {
+ currentValue_ = value;
+ }
+ }
+
+ /// Field number for the "limit_value" field.
+ public const int LimitValueFieldNumber = 13;
+ private global::MxGateway.Contracts.Proto.MxValue limitValue_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.MxValue LimitValue {
+ get { return limitValue_; }
+ set {
+ limitValue_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as ActiveAlarmSnapshot);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(ActiveAlarmSnapshot other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (AlarmFullReference != other.AlarmFullReference) return false;
+ if (SourceObjectReference != other.SourceObjectReference) return false;
+ if (AlarmTypeName != other.AlarmTypeName) return false;
+ if (Severity != other.Severity) return false;
+ if (!object.Equals(OriginalRaiseTimestamp, other.OriginalRaiseTimestamp)) return false;
+ if (CurrentState != other.CurrentState) return false;
+ if (Category != other.Category) return false;
+ if (Description != other.Description) return false;
+ if (!object.Equals(LastTransitionTimestamp, other.LastTransitionTimestamp)) return false;
+ if (OperatorUser != other.OperatorUser) return false;
+ if (OperatorComment != other.OperatorComment) return false;
+ if (!object.Equals(CurrentValue, other.CurrentValue)) return false;
+ if (!object.Equals(LimitValue, other.LimitValue)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (AlarmFullReference.Length != 0) hash ^= AlarmFullReference.GetHashCode();
+ if (SourceObjectReference.Length != 0) hash ^= SourceObjectReference.GetHashCode();
+ if (AlarmTypeName.Length != 0) hash ^= AlarmTypeName.GetHashCode();
+ if (Severity != 0) hash ^= Severity.GetHashCode();
+ if (originalRaiseTimestamp_ != null) hash ^= OriginalRaiseTimestamp.GetHashCode();
+ if (CurrentState != global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified) hash ^= CurrentState.GetHashCode();
+ if (Category.Length != 0) hash ^= Category.GetHashCode();
+ if (Description.Length != 0) hash ^= Description.GetHashCode();
+ if (lastTransitionTimestamp_ != null) hash ^= LastTransitionTimestamp.GetHashCode();
+ if (OperatorUser.Length != 0) hash ^= OperatorUser.GetHashCode();
+ if (OperatorComment.Length != 0) hash ^= OperatorComment.GetHashCode();
+ if (currentValue_ != null) hash ^= CurrentValue.GetHashCode();
+ if (limitValue_ != null) hash ^= LimitValue.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmTypeName);
+ }
+ if (Severity != 0) {
+ output.WriteRawTag(32);
+ output.WriteInt32(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ output.WriteRawTag(42);
+ output.WriteMessage(OriginalRaiseTimestamp);
+ }
+ if (CurrentState != global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified) {
+ output.WriteRawTag(48);
+ output.WriteEnum((int) CurrentState);
+ }
+ if (Category.Length != 0) {
+ output.WriteRawTag(58);
+ output.WriteString(Category);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(66);
+ output.WriteString(Description);
+ }
+ if (lastTransitionTimestamp_ != null) {
+ output.WriteRawTag(74);
+ output.WriteMessage(LastTransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(82);
+ output.WriteString(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ output.WriteRawTag(90);
+ output.WriteString(OperatorComment);
+ }
+ if (currentValue_ != null) {
+ output.WriteRawTag(98);
+ output.WriteMessage(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ output.WriteRawTag(106);
+ output.WriteMessage(LimitValue);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmTypeName);
+ }
+ if (Severity != 0) {
+ output.WriteRawTag(32);
+ output.WriteInt32(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ output.WriteRawTag(42);
+ output.WriteMessage(OriginalRaiseTimestamp);
+ }
+ if (CurrentState != global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified) {
+ output.WriteRawTag(48);
+ output.WriteEnum((int) CurrentState);
+ }
+ if (Category.Length != 0) {
+ output.WriteRawTag(58);
+ output.WriteString(Category);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(66);
+ output.WriteString(Description);
+ }
+ if (lastTransitionTimestamp_ != null) {
+ output.WriteRawTag(74);
+ output.WriteMessage(LastTransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(82);
+ output.WriteString(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ output.WriteRawTag(90);
+ output.WriteString(OperatorComment);
+ }
+ if (currentValue_ != null) {
+ output.WriteRawTag(98);
+ output.WriteMessage(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ output.WriteRawTag(106);
+ output.WriteMessage(LimitValue);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (AlarmFullReference.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmFullReference);
+ }
+ if (SourceObjectReference.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceObjectReference);
+ }
+ if (AlarmTypeName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmTypeName);
+ }
+ if (Severity != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Severity);
+ }
+ if (originalRaiseTimestamp_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(OriginalRaiseTimestamp);
+ }
+ if (CurrentState != global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) CurrentState);
+ }
+ if (Category.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Category);
+ }
+ if (Description.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+ }
+ if (lastTransitionTimestamp_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(LastTransitionTimestamp);
+ }
+ if (OperatorUser.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorUser);
+ }
+ if (OperatorComment.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorComment);
+ }
+ if (currentValue_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(CurrentValue);
+ }
+ if (limitValue_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(LimitValue);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(ActiveAlarmSnapshot other) {
+ if (other == null) {
+ return;
+ }
+ if (other.AlarmFullReference.Length != 0) {
+ AlarmFullReference = other.AlarmFullReference;
+ }
+ if (other.SourceObjectReference.Length != 0) {
+ SourceObjectReference = other.SourceObjectReference;
+ }
+ if (other.AlarmTypeName.Length != 0) {
+ AlarmTypeName = other.AlarmTypeName;
+ }
+ if (other.Severity != 0) {
+ Severity = other.Severity;
+ }
+ if (other.originalRaiseTimestamp_ != null) {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ OriginalRaiseTimestamp.MergeFrom(other.OriginalRaiseTimestamp);
+ }
+ if (other.CurrentState != global::MxGateway.Contracts.Proto.AlarmConditionState.Unspecified) {
+ CurrentState = other.CurrentState;
+ }
+ if (other.Category.Length != 0) {
+ Category = other.Category;
+ }
+ if (other.Description.Length != 0) {
+ Description = other.Description;
+ }
+ if (other.lastTransitionTimestamp_ != null) {
+ if (lastTransitionTimestamp_ == null) {
+ LastTransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ LastTransitionTimestamp.MergeFrom(other.LastTransitionTimestamp);
+ }
+ if (other.OperatorUser.Length != 0) {
+ OperatorUser = other.OperatorUser;
+ }
+ if (other.OperatorComment.Length != 0) {
+ OperatorComment = other.OperatorComment;
+ }
+ if (other.currentValue_ != null) {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ CurrentValue.MergeFrom(other.CurrentValue);
+ }
+ if (other.limitValue_ != null) {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ LimitValue.MergeFrom(other.LimitValue);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 18: {
+ SourceObjectReference = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmTypeName = input.ReadString();
+ break;
+ }
+ case 32: {
+ Severity = input.ReadInt32();
+ break;
+ }
+ case 42: {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(OriginalRaiseTimestamp);
+ break;
+ }
+ case 48: {
+ CurrentState = (global::MxGateway.Contracts.Proto.AlarmConditionState) input.ReadEnum();
+ break;
+ }
+ case 58: {
+ Category = input.ReadString();
+ break;
+ }
+ case 66: {
+ Description = input.ReadString();
+ break;
+ }
+ case 74: {
+ if (lastTransitionTimestamp_ == null) {
+ LastTransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(LastTransitionTimestamp);
+ break;
+ }
+ case 82: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ case 90: {
+ OperatorComment = input.ReadString();
+ break;
+ }
+ case 98: {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(CurrentValue);
+ break;
+ }
+ case 106: {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(LimitValue);
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 18: {
+ SourceObjectReference = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmTypeName = input.ReadString();
+ break;
+ }
+ case 32: {
+ Severity = input.ReadInt32();
+ break;
+ }
+ case 42: {
+ if (originalRaiseTimestamp_ == null) {
+ OriginalRaiseTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(OriginalRaiseTimestamp);
+ break;
+ }
+ case 48: {
+ CurrentState = (global::MxGateway.Contracts.Proto.AlarmConditionState) input.ReadEnum();
+ break;
+ }
+ case 58: {
+ Category = input.ReadString();
+ break;
+ }
+ case 66: {
+ Description = input.ReadString();
+ break;
+ }
+ case 74: {
+ if (lastTransitionTimestamp_ == null) {
+ LastTransitionTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
+ }
+ input.ReadMessage(LastTransitionTimestamp);
+ break;
+ }
+ case 82: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ case 90: {
+ OperatorComment = input.ReadString();
+ break;
+ }
+ case 98: {
+ if (currentValue_ == null) {
+ CurrentValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(CurrentValue);
+ break;
+ }
+ case 106: {
+ if (limitValue_ == null) {
+ LimitValue = new global::MxGateway.Contracts.Proto.MxValue();
+ }
+ input.ReadMessage(LimitValue);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class AcknowledgeAlarmRequest : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AcknowledgeAlarmRequest());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[57]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmRequest(AcknowledgeAlarmRequest other) : this() {
+ sessionId_ = other.sessionId_;
+ clientCorrelationId_ = other.clientCorrelationId_;
+ alarmFullReference_ = other.alarmFullReference_;
+ comment_ = other.comment_;
+ operatorUser_ = other.operatorUser_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmRequest Clone() {
+ return new AcknowledgeAlarmRequest(this);
+ }
+
+ /// Field number for the "session_id" field.
+ public const int SessionIdFieldNumber = 1;
+ private string sessionId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string SessionId {
+ get { return sessionId_; }
+ set {
+ sessionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "client_correlation_id" field.
+ public const int ClientCorrelationIdFieldNumber = 2;
+ private string clientCorrelationId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string ClientCorrelationId {
+ get { return clientCorrelationId_; }
+ set {
+ clientCorrelationId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "alarm_full_reference" field.
+ public const int AlarmFullReferenceFieldNumber = 3;
+ private string alarmFullReference_ = "";
+ ///
+ /// Fully-qualified alarm reference matching OnAlarmTransitionEvent.alarm_full_reference.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmFullReference {
+ get { return alarmFullReference_; }
+ set {
+ alarmFullReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "comment" field.
+ public const int CommentFieldNumber = 4;
+ private string comment_ = "";
+ ///
+ /// Operator-supplied comment forwarded to MXAccess.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Comment {
+ get { return comment_; }
+ set {
+ comment_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "operator_user" field.
+ public const int OperatorUserFieldNumber = 5;
+ private string operatorUser_ = "";
+ ///
+ /// Operator principal performing the acknowledgement. The lmxopcua side
+ /// resolves this from the OPC UA session prior to invoking the RPC.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string OperatorUser {
+ get { return operatorUser_; }
+ set {
+ operatorUser_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as AcknowledgeAlarmRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(AcknowledgeAlarmRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (SessionId != other.SessionId) return false;
+ if (ClientCorrelationId != other.ClientCorrelationId) return false;
+ if (AlarmFullReference != other.AlarmFullReference) return false;
+ if (Comment != other.Comment) return false;
+ if (OperatorUser != other.OperatorUser) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (SessionId.Length != 0) hash ^= SessionId.GetHashCode();
+ if (ClientCorrelationId.Length != 0) hash ^= ClientCorrelationId.GetHashCode();
+ if (AlarmFullReference.Length != 0) hash ^= AlarmFullReference.GetHashCode();
+ if (Comment.Length != 0) hash ^= Comment.GetHashCode();
+ if (OperatorUser.Length != 0) hash ^= OperatorUser.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(ClientCorrelationId);
+ }
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmFullReference);
+ }
+ if (Comment.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(Comment);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(42);
+ output.WriteString(OperatorUser);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(ClientCorrelationId);
+ }
+ if (AlarmFullReference.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmFullReference);
+ }
+ if (Comment.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(Comment);
+ }
+ if (OperatorUser.Length != 0) {
+ output.WriteRawTag(42);
+ output.WriteString(OperatorUser);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (SessionId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(ClientCorrelationId);
+ }
+ if (AlarmFullReference.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmFullReference);
+ }
+ if (Comment.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Comment);
+ }
+ if (OperatorUser.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorUser);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(AcknowledgeAlarmRequest other) {
+ if (other == null) {
+ return;
+ }
+ if (other.SessionId.Length != 0) {
+ SessionId = other.SessionId;
+ }
+ if (other.ClientCorrelationId.Length != 0) {
+ ClientCorrelationId = other.ClientCorrelationId;
+ }
+ if (other.AlarmFullReference.Length != 0) {
+ AlarmFullReference = other.AlarmFullReference;
+ }
+ if (other.Comment.Length != 0) {
+ Comment = other.Comment;
+ }
+ if (other.OperatorUser.Length != 0) {
+ OperatorUser = other.OperatorUser;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ ClientCorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 34: {
+ Comment = input.ReadString();
+ break;
+ }
+ case 42: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ ClientCorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmFullReference = input.ReadString();
+ break;
+ }
+ case 34: {
+ Comment = input.ReadString();
+ break;
+ }
+ case 42: {
+ OperatorUser = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class AcknowledgeAlarmReply : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AcknowledgeAlarmReply());
+ private pb::UnknownFieldSet _unknownFields;
+ private int _hasBits0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[58]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmReply() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmReply(AcknowledgeAlarmReply other) : this() {
+ _hasBits0 = other._hasBits0;
+ sessionId_ = other.sessionId_;
+ correlationId_ = other.correlationId_;
+ protocolStatus_ = other.protocolStatus_ != null ? other.protocolStatus_.Clone() : null;
+ hresult_ = other.hresult_;
+ status_ = other.status_ != null ? other.status_.Clone() : null;
+ diagnosticMessage_ = other.diagnosticMessage_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public AcknowledgeAlarmReply Clone() {
+ return new AcknowledgeAlarmReply(this);
+ }
+
+ /// Field number for the "session_id" field.
+ public const int SessionIdFieldNumber = 1;
+ private string sessionId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string SessionId {
+ get { return sessionId_; }
+ set {
+ sessionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "correlation_id" field.
+ public const int CorrelationIdFieldNumber = 2;
+ private string correlationId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string CorrelationId {
+ get { return correlationId_; }
+ set {
+ correlationId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "protocol_status" field.
+ public const int ProtocolStatusFieldNumber = 3;
+ private global::MxGateway.Contracts.Proto.ProtocolStatus protocolStatus_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.ProtocolStatus ProtocolStatus {
+ get { return protocolStatus_; }
+ set {
+ protocolStatus_ = value;
+ }
+ }
+
+ /// Field number for the "hresult" field.
+ public const int HresultFieldNumber = 4;
+ private readonly static int HresultDefaultValue = 0;
+
+ private int hresult_;
+ ///
+ /// HRESULT captured from MXAccess if the ack failed at the COM layer.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int Hresult {
+ get { if ((_hasBits0 & 1) != 0) { return hresult_; } else { return HresultDefaultValue; } }
+ set {
+ _hasBits0 |= 1;
+ hresult_ = value;
+ }
+ }
+ /// Gets whether the "hresult" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasHresult {
+ get { return (_hasBits0 & 1) != 0; }
+ }
+ /// Clears the value of the "hresult" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearHresult() {
+ _hasBits0 &= ~1;
+ }
+
+ /// Field number for the "status" field.
+ public const int StatusFieldNumber = 5;
+ private global::MxGateway.Contracts.Proto.MxStatusProxy status_;
+ ///
+ /// Native MxAccess status describing the outcome of the ack.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::MxGateway.Contracts.Proto.MxStatusProxy Status {
+ get { return status_; }
+ set {
+ status_ = value;
+ }
+ }
+
+ /// Field number for the "diagnostic_message" field.
+ public const int DiagnosticMessageFieldNumber = 6;
+ private string diagnosticMessage_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string DiagnosticMessage {
+ get { return diagnosticMessage_; }
+ set {
+ diagnosticMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as AcknowledgeAlarmReply);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(AcknowledgeAlarmReply other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (SessionId != other.SessionId) return false;
+ if (CorrelationId != other.CorrelationId) return false;
+ if (!object.Equals(ProtocolStatus, other.ProtocolStatus)) return false;
+ if (Hresult != other.Hresult) return false;
+ if (!object.Equals(Status, other.Status)) return false;
+ if (DiagnosticMessage != other.DiagnosticMessage) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (SessionId.Length != 0) hash ^= SessionId.GetHashCode();
+ if (CorrelationId.Length != 0) hash ^= CorrelationId.GetHashCode();
+ if (protocolStatus_ != null) hash ^= ProtocolStatus.GetHashCode();
+ if (HasHresult) hash ^= Hresult.GetHashCode();
+ if (status_ != null) hash ^= Status.GetHashCode();
+ if (DiagnosticMessage.Length != 0) hash ^= DiagnosticMessage.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (CorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(CorrelationId);
+ }
+ if (protocolStatus_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(ProtocolStatus);
+ }
+ if (HasHresult) {
+ output.WriteRawTag(32);
+ output.WriteInt32(Hresult);
+ }
+ if (status_ != null) {
+ output.WriteRawTag(42);
+ output.WriteMessage(Status);
+ }
+ if (DiagnosticMessage.Length != 0) {
+ output.WriteRawTag(50);
+ output.WriteString(DiagnosticMessage);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (CorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(CorrelationId);
+ }
+ if (protocolStatus_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(ProtocolStatus);
+ }
+ if (HasHresult) {
+ output.WriteRawTag(32);
+ output.WriteInt32(Hresult);
+ }
+ if (status_ != null) {
+ output.WriteRawTag(42);
+ output.WriteMessage(Status);
+ }
+ if (DiagnosticMessage.Length != 0) {
+ output.WriteRawTag(50);
+ output.WriteString(DiagnosticMessage);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (SessionId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(SessionId);
+ }
+ if (CorrelationId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(CorrelationId);
+ }
+ if (protocolStatus_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(ProtocolStatus);
+ }
+ if (HasHresult) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Hresult);
+ }
+ if (status_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Status);
+ }
+ if (DiagnosticMessage.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(DiagnosticMessage);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(AcknowledgeAlarmReply other) {
+ if (other == null) {
+ return;
+ }
+ if (other.SessionId.Length != 0) {
+ SessionId = other.SessionId;
+ }
+ if (other.CorrelationId.Length != 0) {
+ CorrelationId = other.CorrelationId;
+ }
+ if (other.protocolStatus_ != null) {
+ if (protocolStatus_ == null) {
+ ProtocolStatus = new global::MxGateway.Contracts.Proto.ProtocolStatus();
+ }
+ ProtocolStatus.MergeFrom(other.ProtocolStatus);
+ }
+ if (other.HasHresult) {
+ Hresult = other.Hresult;
+ }
+ if (other.status_ != null) {
+ if (status_ == null) {
+ Status = new global::MxGateway.Contracts.Proto.MxStatusProxy();
+ }
+ Status.MergeFrom(other.Status);
+ }
+ if (other.DiagnosticMessage.Length != 0) {
+ DiagnosticMessage = other.DiagnosticMessage;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ CorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ if (protocolStatus_ == null) {
+ ProtocolStatus = new global::MxGateway.Contracts.Proto.ProtocolStatus();
+ }
+ input.ReadMessage(ProtocolStatus);
+ break;
+ }
+ case 32: {
+ Hresult = input.ReadInt32();
+ break;
+ }
+ case 42: {
+ if (status_ == null) {
+ Status = new global::MxGateway.Contracts.Proto.MxStatusProxy();
+ }
+ input.ReadMessage(Status);
+ break;
+ }
+ case 50: {
+ DiagnosticMessage = input.ReadString();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ CorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ if (protocolStatus_ == null) {
+ ProtocolStatus = new global::MxGateway.Contracts.Proto.ProtocolStatus();
+ }
+ input.ReadMessage(ProtocolStatus);
+ break;
+ }
+ case 32: {
+ Hresult = input.ReadInt32();
+ break;
+ }
+ case 42: {
+ if (status_ == null) {
+ Status = new global::MxGateway.Contracts.Proto.MxStatusProxy();
+ }
+ input.ReadMessage(Status);
+ break;
+ }
+ case 50: {
+ DiagnosticMessage = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class QueryActiveAlarmsRequest : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new QueryActiveAlarmsRequest());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[59]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public QueryActiveAlarmsRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public QueryActiveAlarmsRequest(QueryActiveAlarmsRequest other) : this() {
+ sessionId_ = other.sessionId_;
+ clientCorrelationId_ = other.clientCorrelationId_;
+ alarmFilterPrefix_ = other.alarmFilterPrefix_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public QueryActiveAlarmsRequest Clone() {
+ return new QueryActiveAlarmsRequest(this);
+ }
+
+ /// Field number for the "session_id" field.
+ public const int SessionIdFieldNumber = 1;
+ private string sessionId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string SessionId {
+ get { return sessionId_; }
+ set {
+ sessionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "client_correlation_id" field.
+ public const int ClientCorrelationIdFieldNumber = 2;
+ private string clientCorrelationId_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string ClientCorrelationId {
+ get { return clientCorrelationId_; }
+ set {
+ clientCorrelationId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "alarm_filter_prefix" field.
+ public const int AlarmFilterPrefixFieldNumber = 3;
+ private string alarmFilterPrefix_ = "";
+ ///
+ /// Optional alarm-reference prefix used to scope a partial ConditionRefresh
+ /// (e.g. equipment sub-tree). Empty means full refresh.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string AlarmFilterPrefix {
+ get { return alarmFilterPrefix_; }
+ set {
+ alarmFilterPrefix_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as QueryActiveAlarmsRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(QueryActiveAlarmsRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (SessionId != other.SessionId) return false;
+ if (ClientCorrelationId != other.ClientCorrelationId) return false;
+ if (AlarmFilterPrefix != other.AlarmFilterPrefix) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (SessionId.Length != 0) hash ^= SessionId.GetHashCode();
+ if (ClientCorrelationId.Length != 0) hash ^= ClientCorrelationId.GetHashCode();
+ if (AlarmFilterPrefix.Length != 0) hash ^= AlarmFilterPrefix.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(ClientCorrelationId);
+ }
+ if (AlarmFilterPrefix.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmFilterPrefix);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (SessionId.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(ClientCorrelationId);
+ }
+ if (AlarmFilterPrefix.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AlarmFilterPrefix);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (SessionId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(SessionId);
+ }
+ if (ClientCorrelationId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(ClientCorrelationId);
+ }
+ if (AlarmFilterPrefix.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AlarmFilterPrefix);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(QueryActiveAlarmsRequest other) {
+ if (other == null) {
+ return;
+ }
+ if (other.SessionId.Length != 0) {
+ SessionId = other.SessionId;
+ }
+ if (other.ClientCorrelationId.Length != 0) {
+ ClientCorrelationId = other.ClientCorrelationId;
+ }
+ if (other.AlarmFilterPrefix.Length != 0) {
+ AlarmFilterPrefix = other.AlarmFilterPrefix;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ ClientCorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmFilterPrefix = input.ReadString();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ SessionId = input.ReadString();
+ break;
+ }
+ case 18: {
+ ClientCorrelationId = input.ReadString();
+ break;
+ }
+ case 26: {
+ AlarmFilterPrefix = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
[global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
public sealed partial class MxStatusProxy : pb::IMessage
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
@@ -17159,7 +19769,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[55]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[60]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -17579,7 +20189,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[56]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[61]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -18436,7 +21046,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[57]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[62]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -19224,7 +21834,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[58]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[63]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -19413,7 +22023,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[59]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[64]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -19602,7 +22212,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[60]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[65]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -19791,7 +22401,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[61]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[66]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -19980,7 +22590,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[62]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[67]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -20169,7 +22779,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[63]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[68]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -20356,7 +22966,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[64]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[69]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -20543,7 +23153,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[65]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[70]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -20730,7 +23340,7 @@ namespace MxGateway.Contracts.Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[66]; }
+ get { return global::MxGateway.Contracts.Proto.MxaccessGatewayReflection.Descriptor.MessageTypes[71]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
diff --git a/src/MxGateway.Contracts/Generated/MxaccessGatewayGrpc.cs b/src/MxGateway.Contracts/Generated/MxaccessGatewayGrpc.cs
index 0165045..55606d7 100644
--- a/src/MxGateway.Contracts/Generated/MxaccessGatewayGrpc.cs
+++ b/src/MxGateway.Contracts/Generated/MxaccessGatewayGrpc.cs
@@ -64,6 +64,14 @@ namespace MxGateway.Contracts.Proto {
static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_StreamEventsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.StreamEventsRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_MxEvent = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.MxEvent.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_AcknowledgeAlarmRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_AcknowledgeAlarmReply = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.AcknowledgeAlarmReply.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_QueryActiveAlarmsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_mxaccess_gateway_v1_ActiveAlarmSnapshot = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::MxGateway.Contracts.Proto.ActiveAlarmSnapshot.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method __Method_OpenSession = new grpc::Method(
@@ -97,6 +105,22 @@ namespace MxGateway.Contracts.Proto {
__Marshaller_mxaccess_gateway_v1_StreamEventsRequest,
__Marshaller_mxaccess_gateway_v1_MxEvent);
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Method __Method_AcknowledgeAlarm = new grpc::Method(
+ grpc::MethodType.Unary,
+ __ServiceName,
+ "AcknowledgeAlarm",
+ __Marshaller_mxaccess_gateway_v1_AcknowledgeAlarmRequest,
+ __Marshaller_mxaccess_gateway_v1_AcknowledgeAlarmReply);
+
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Method __Method_QueryActiveAlarms = new grpc::Method(
+ grpc::MethodType.ServerStreaming,
+ __ServiceName,
+ "QueryActiveAlarms",
+ __Marshaller_mxaccess_gateway_v1_QueryActiveAlarmsRequest,
+ __Marshaller_mxaccess_gateway_v1_ActiveAlarmSnapshot);
+
/// Service descriptor
public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
{
@@ -131,6 +155,18 @@ namespace MxGateway.Contracts.Proto {
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::System.Threading.Tasks.Task AcknowledgeAlarm(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest request, grpc::ServerCallContext context)
+ {
+ throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
+ }
+
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::System.Threading.Tasks.Task QueryActiveAlarms(global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest request, grpc::IServerStreamWriter responseStream, grpc::ServerCallContext context)
+ {
+ throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
+ }
+
}
/// Client for MxAccessGateway
@@ -230,6 +266,36 @@ namespace MxGateway.Contracts.Proto {
{
return CallInvoker.AsyncServerStreamingCall(__Method_StreamEvents, null, options, request);
}
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::MxGateway.Contracts.Proto.AcknowledgeAlarmReply AcknowledgeAlarm(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return AcknowledgeAlarm(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::MxGateway.Contracts.Proto.AcknowledgeAlarmReply AcknowledgeAlarm(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.BlockingUnaryCall(__Method_AcknowledgeAlarm, null, options, request);
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncUnaryCall AcknowledgeAlarmAsync(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return AcknowledgeAlarmAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncUnaryCall AcknowledgeAlarmAsync(global::MxGateway.Contracts.Proto.AcknowledgeAlarmRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.AsyncUnaryCall(__Method_AcknowledgeAlarm, null, options, request);
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncServerStreamingCall QueryActiveAlarms(global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return QueryActiveAlarms(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncServerStreamingCall QueryActiveAlarms(global::MxGateway.Contracts.Proto.QueryActiveAlarmsRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.AsyncServerStreamingCall(__Method_QueryActiveAlarms, null, options, request);
+ }
/// Creates a new instance of client from given ClientBaseConfiguration.
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
protected override MxAccessGatewayClient NewInstance(ClientBaseConfiguration configuration)
@@ -247,7 +313,9 @@ namespace MxGateway.Contracts.Proto {
.AddMethod(__Method_OpenSession, serviceImpl.OpenSession)
.AddMethod(__Method_CloseSession, serviceImpl.CloseSession)
.AddMethod(__Method_Invoke, serviceImpl.Invoke)
- .AddMethod(__Method_StreamEvents, serviceImpl.StreamEvents).Build();
+ .AddMethod(__Method_StreamEvents, serviceImpl.StreamEvents)
+ .AddMethod(__Method_AcknowledgeAlarm, serviceImpl.AcknowledgeAlarm)
+ .AddMethod(__Method_QueryActiveAlarms, serviceImpl.QueryActiveAlarms).Build();
}
/// Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
@@ -261,6 +329,8 @@ namespace MxGateway.Contracts.Proto {
serviceBinder.AddMethod(__Method_CloseSession, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.CloseSession));
serviceBinder.AddMethod(__Method_Invoke, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.Invoke));
serviceBinder.AddMethod(__Method_StreamEvents, serviceImpl == null ? null : new grpc::ServerStreamingServerMethod(serviceImpl.StreamEvents));
+ serviceBinder.AddMethod(__Method_AcknowledgeAlarm, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.AcknowledgeAlarm));
+ serviceBinder.AddMethod(__Method_QueryActiveAlarms, serviceImpl == null ? null : new grpc::ServerStreamingServerMethod(serviceImpl.QueryActiveAlarms));
}
}
diff --git a/src/MxGateway.Contracts/Protos/mxaccess_gateway.proto b/src/MxGateway.Contracts/Protos/mxaccess_gateway.proto
index 394a3ec..b7ecf29 100644
--- a/src/MxGateway.Contracts/Protos/mxaccess_gateway.proto
+++ b/src/MxGateway.Contracts/Protos/mxaccess_gateway.proto
@@ -13,6 +13,8 @@ service MxAccessGateway {
rpc CloseSession(CloseSessionRequest) returns (CloseSessionReply);
rpc Invoke(MxCommandRequest) returns (MxCommandReply);
rpc StreamEvents(StreamEventsRequest) returns (stream MxEvent);
+ rpc AcknowledgeAlarm(AcknowledgeAlarmRequest) returns (AcknowledgeAlarmReply);
+ rpc QueryActiveAlarms(QueryActiveAlarmsRequest) returns (stream ActiveAlarmSnapshot);
}
message OpenSessionRequest {
@@ -397,6 +399,7 @@ message MxEvent {
OnWriteCompleteEvent on_write_complete = 21;
OperationCompleteEvent operation_complete = 22;
OnBufferedDataChangeEvent on_buffered_data_change = 23;
+ OnAlarmTransitionEvent on_alarm_transition = 24;
}
}
@@ -406,6 +409,7 @@ enum MxEventFamily {
MX_EVENT_FAMILY_ON_WRITE_COMPLETE = 2;
MX_EVENT_FAMILY_OPERATION_COMPLETE = 3;
MX_EVENT_FAMILY_ON_BUFFERED_DATA_CHANGE = 4;
+ MX_EVENT_FAMILY_ON_ALARM_TRANSITION = 5;
}
message OnDataChangeEvent {
@@ -424,6 +428,134 @@ message OnBufferedDataChangeEvent {
int32 raw_data_type = 4;
}
+// Carries a single MXAccess alarm transition (raise / acknowledge / clear /
+// re-trigger) in native MXAccess terms. The Part 9 state machine + ACL +
+// multi-source aggregation lives in lmxopcua's AlarmConditionService; the
+// gateway is UA-agnostic and forwards the raw payload.
+message OnAlarmTransitionEvent {
+ // Fully-qualified alarm reference (e.g. "Tank01.Level.HiHi"). Stable across
+ // transitions of the same condition; used by the lmxopcua side to correlate
+ // raise/ack/clear into a single Part 9 condition.
+ string alarm_full_reference = 1;
+
+ // Galaxy-side source object reference (e.g. "Tank01"). Empty for alarms
+ // that do not bind to a Galaxy object.
+ string source_object_reference = 2;
+
+ // MxAccess alarm-type qualifier (e.g. "AnalogLimitAlarm.HiHi", "DiscAlarm").
+ string alarm_type_name = 3;
+
+ // What kind of state change this event represents.
+ AlarmTransitionKind transition_kind = 4;
+
+ // Raw MXAccess severity value. Mapping to OPC UA 0-1000 happens server-side
+ // in lmxopcua via MxAccessSeverityMapper; the gateway preserves the native
+ // MXAccess scale.
+ int32 severity = 5;
+
+ // When the alarm originally entered the active state. Preserved across
+ // acknowledge transitions so the Part 9 condition keeps the original raise
+ // time. Unset on retrigger from a previously-cleared condition.
+ google.protobuf.Timestamp original_raise_timestamp = 6;
+
+ // When this specific transition occurred (raise time on Raise, ack time on
+ // Acknowledge, clear time on Clear).
+ google.protobuf.Timestamp transition_timestamp = 7;
+
+ // Operator principal recorded by MXAccess on Acknowledge transitions.
+ // Empty on raise / clear.
+ string operator_user = 8;
+
+ // Operator-supplied comment recorded by MXAccess on Acknowledge transitions.
+ // Empty on raise / clear or when no comment was supplied.
+ string operator_comment = 9;
+
+ // MxAccess alarm category (taxonomy bucket configured in the Galaxy
+ // template, e.g. "Process", "Safety", "Diagnostics").
+ string category = 10;
+
+ // Human-readable alarm description from the MxAccess alarm definition.
+ string description = 11;
+
+ // Current alarm value (the value of the source attribute at the moment of
+ // transition). Optional; populated when MxAccess surfaces it.
+ MxValue current_value = 12;
+
+ // Limit/threshold value that triggered the transition for limit alarms.
+ // Optional; populated for AnalogLimitAlarm-family transitions.
+ MxValue limit_value = 13;
+}
+
+enum AlarmTransitionKind {
+ ALARM_TRANSITION_KIND_UNSPECIFIED = 0;
+ ALARM_TRANSITION_KIND_RAISE = 1;
+ ALARM_TRANSITION_KIND_ACKNOWLEDGE = 2;
+ ALARM_TRANSITION_KIND_CLEAR = 3;
+ ALARM_TRANSITION_KIND_RETRIGGER = 4;
+}
+
+// Snapshot of a currently-active MXAccess alarm condition, returned from a
+// QueryActiveAlarms ConditionRefresh stream.
+message ActiveAlarmSnapshot {
+ string alarm_full_reference = 1;
+ string source_object_reference = 2;
+ string alarm_type_name = 3;
+ int32 severity = 4;
+ google.protobuf.Timestamp original_raise_timestamp = 5;
+ AlarmConditionState current_state = 6;
+ string category = 7;
+ string description = 8;
+ // When the most recent state transition occurred (last raise, last ack,
+ // last clear).
+ google.protobuf.Timestamp last_transition_timestamp = 9;
+ // Operator who acknowledged the alarm if the current state is ActiveAcked.
+ // Empty otherwise.
+ string operator_user = 10;
+ // Operator comment recorded with the most recent acknowledge if the current
+ // state is ActiveAcked. Empty otherwise.
+ string operator_comment = 11;
+ MxValue current_value = 12;
+ MxValue limit_value = 13;
+}
+
+enum AlarmConditionState {
+ ALARM_CONDITION_STATE_UNSPECIFIED = 0;
+ ALARM_CONDITION_STATE_ACTIVE = 1;
+ ALARM_CONDITION_STATE_ACTIVE_ACKED = 2;
+ ALARM_CONDITION_STATE_INACTIVE = 3;
+}
+
+message AcknowledgeAlarmRequest {
+ string session_id = 1;
+ string client_correlation_id = 2;
+ // Fully-qualified alarm reference matching OnAlarmTransitionEvent.alarm_full_reference.
+ string alarm_full_reference = 3;
+ // Operator-supplied comment forwarded to MXAccess.
+ string comment = 4;
+ // Operator principal performing the acknowledgement. The lmxopcua side
+ // resolves this from the OPC UA session prior to invoking the RPC.
+ string operator_user = 5;
+}
+
+message AcknowledgeAlarmReply {
+ string session_id = 1;
+ string correlation_id = 2;
+ ProtocolStatus protocol_status = 3;
+ // HRESULT captured from MXAccess if the ack failed at the COM layer.
+ optional int32 hresult = 4;
+ // Native MxAccess status describing the outcome of the ack.
+ MxStatusProxy status = 5;
+ string diagnostic_message = 6;
+}
+
+message QueryActiveAlarmsRequest {
+ string session_id = 1;
+ string client_correlation_id = 2;
+ // Optional alarm-reference prefix used to scope a partial ConditionRefresh
+ // (e.g. equipment sub-tree). Empty means full refresh.
+ string alarm_filter_prefix = 3;
+}
+
message MxStatusProxy {
int32 success = 1;
MxStatusCategory category = 2;
diff --git a/src/MxGateway.Tests/Contracts/GatewayContractInfoTests.cs b/src/MxGateway.Tests/Contracts/GatewayContractInfoTests.cs
index 3dcc8ef..df98abe 100644
--- a/src/MxGateway.Tests/Contracts/GatewayContractInfoTests.cs
+++ b/src/MxGateway.Tests/Contracts/GatewayContractInfoTests.cs
@@ -11,11 +11,11 @@ public sealed class GatewayContractInfoTests
Assert.Equal("mxaccess-worker", GatewayContractInfo.DefaultBackendName);
}
- /// Verifies that the gateway protocol version starts at version one.
+ /// Verifies that the gateway protocol version is bumped to three after the alarm proto extension.
[Fact]
- public void GatewayProtocolVersion_IsVersionTwo()
+ public void GatewayProtocolVersion_IsVersionThree()
{
- Assert.Equal(2u, GatewayContractInfo.GatewayProtocolVersion);
+ Assert.Equal(3u, GatewayContractInfo.GatewayProtocolVersion);
}
/// Verifies that the worker protocol version starts at version one.
diff --git a/src/MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs b/src/MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs
index d077935..f746766 100644
--- a/src/MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs
+++ b/src/MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs
@@ -19,6 +19,8 @@ public sealed class ProtobufContractRoundTripTests
Assert.Contains(service.Methods, method => method.Name == "CloseSession");
Assert.Contains(service.Methods, method => method.Name == "Invoke");
Assert.Contains(service.Methods, method => method.Name == "StreamEvents");
+ Assert.Contains(service.Methods, method => method.Name == "AcknowledgeAlarm");
+ Assert.Contains(service.Methods, method => method.Name == "QueryActiveAlarms");
}
/// Verifies that worker envelope descriptor contains required correlation fields.
@@ -198,4 +200,193 @@ public sealed class ProtobufContractRoundTripTests
Assert.Equal(WorkerEnvelope.BodyOneofCase.WorkerCommand, parsed.BodyCase);
Assert.Equal(MxCommand.PayloadOneofCase.Advise, parsed.WorkerCommand.Command.PayloadCase);
}
+
+ /// Verifies that an OnAlarmTransition event round-trips with full payload.
+ [Fact]
+ public void Event_RoundTripsOnAlarmTransitionWithFullPayload()
+ {
+ var raise = Timestamp.FromDateTime(new DateTime(2026, 5, 1, 12, 0, 0, DateTimeKind.Utc));
+ var ack = Timestamp.FromDateTime(new DateTime(2026, 5, 1, 12, 0, 30, DateTimeKind.Utc));
+ var original = new MxEvent
+ {
+ Family = MxEventFamily.OnAlarmTransition,
+ SessionId = "session-1",
+ WorkerSequence = 99,
+ WorkerTimestamp = ack,
+ GatewayReceiveTimestamp = ack,
+ OnAlarmTransition = new OnAlarmTransitionEvent
+ {
+ AlarmFullReference = "Tank01.Level.HiHi",
+ SourceObjectReference = "Tank01",
+ AlarmTypeName = "AnalogLimitAlarm.HiHi",
+ TransitionKind = AlarmTransitionKind.Acknowledge,
+ Severity = 750,
+ OriginalRaiseTimestamp = raise,
+ TransitionTimestamp = ack,
+ OperatorUser = "operator1",
+ OperatorComment = "investigating",
+ Category = "Process",
+ Description = "Tank 01 high-high level",
+ CurrentValue = new MxValue
+ {
+ DataType = MxDataType.Float,
+ FloatValue = 95.4f,
+ VariantType = "VT_R4",
+ },
+ LimitValue = new MxValue
+ {
+ DataType = MxDataType.Float,
+ FloatValue = 90.0f,
+ VariantType = "VT_R4",
+ },
+ },
+ };
+
+ var parsed = MxEvent.Parser.ParseFrom(original.ToByteArray());
+
+ Assert.Equal(original, parsed);
+ Assert.Equal(MxEvent.BodyOneofCase.OnAlarmTransition, parsed.BodyCase);
+ Assert.Equal(AlarmTransitionKind.Acknowledge, parsed.OnAlarmTransition.TransitionKind);
+ Assert.Equal(raise, parsed.OnAlarmTransition.OriginalRaiseTimestamp);
+ Assert.Equal("operator1", parsed.OnAlarmTransition.OperatorUser);
+ }
+
+ /// Verifies that an OnAlarmTransition event round-trips with only the required fields populated.
+ [Fact]
+ public void Event_RoundTripsOnAlarmTransitionWithOptionalFieldsEmpty()
+ {
+ var raise = Timestamp.FromDateTime(new DateTime(2026, 5, 1, 12, 0, 0, DateTimeKind.Utc));
+ var original = new MxEvent
+ {
+ Family = MxEventFamily.OnAlarmTransition,
+ SessionId = "session-1",
+ WorkerSequence = 100,
+ OnAlarmTransition = new OnAlarmTransitionEvent
+ {
+ AlarmFullReference = "Tank01.Level.HiHi",
+ AlarmTypeName = "AnalogLimitAlarm.HiHi",
+ TransitionKind = AlarmTransitionKind.Raise,
+ Severity = 750,
+ TransitionTimestamp = raise,
+ },
+ };
+
+ var parsed = MxEvent.Parser.ParseFrom(original.ToByteArray());
+
+ Assert.Equal(original, parsed);
+ Assert.Equal(string.Empty, parsed.OnAlarmTransition.OperatorUser);
+ Assert.Equal(string.Empty, parsed.OnAlarmTransition.OperatorComment);
+ Assert.Null(parsed.OnAlarmTransition.OriginalRaiseTimestamp);
+ Assert.Null(parsed.OnAlarmTransition.CurrentValue);
+ }
+
+ /// Verifies that an MxEvent body oneof rejects multiple bodies — last write wins per proto3 semantics.
+ [Fact]
+ public void Event_OneofGuard_LastBodyWins()
+ {
+ var ev = new MxEvent
+ {
+ Family = MxEventFamily.OnAlarmTransition,
+ OnDataChange = new OnDataChangeEvent(),
+ OnAlarmTransition = new OnAlarmTransitionEvent
+ {
+ AlarmFullReference = "X",
+ TransitionKind = AlarmTransitionKind.Raise,
+ },
+ };
+
+ Assert.Equal(MxEvent.BodyOneofCase.OnAlarmTransition, ev.BodyCase);
+ Assert.Null(ev.OnDataChange);
+ }
+
+ /// Verifies that AcknowledgeAlarmRequest round-trips through serialization.
+ [Fact]
+ public void AcknowledgeAlarmRequest_RoundTripsAllFields()
+ {
+ var original = new AcknowledgeAlarmRequest
+ {
+ SessionId = "session-1",
+ ClientCorrelationId = "client-correlation-7",
+ AlarmFullReference = "Tank01.Level.HiHi",
+ Comment = "shift handover",
+ OperatorUser = "operator2",
+ };
+
+ var parsed = AcknowledgeAlarmRequest.Parser.ParseFrom(original.ToByteArray());
+
+ Assert.Equal(original, parsed);
+ }
+
+ /// Verifies that AcknowledgeAlarmReply round-trips with status, hresult, and diagnostics.
+ [Fact]
+ public void AcknowledgeAlarmReply_RoundTripsStatusAndHresult()
+ {
+ var original = new AcknowledgeAlarmReply
+ {
+ SessionId = "session-1",
+ CorrelationId = "gateway-correlation-7",
+ ProtocolStatus = new ProtocolStatus { Code = ProtocolStatusCode.Ok },
+ Hresult = 0,
+ Status = new MxStatusProxy
+ {
+ Success = 1,
+ Category = MxStatusCategory.Ok,
+ DetectedBy = MxStatusSource.RespondingLmx,
+ },
+ DiagnosticMessage = "ack accepted",
+ };
+
+ var parsed = AcknowledgeAlarmReply.Parser.ParseFrom(original.ToByteArray());
+
+ Assert.Equal(original, parsed);
+ Assert.True(parsed.HasHresult);
+ }
+
+ /// Verifies that ActiveAlarmSnapshot round-trips with current state and operator metadata.
+ [Fact]
+ public void ActiveAlarmSnapshot_RoundTripsAllFields()
+ {
+ var raise = Timestamp.FromDateTime(new DateTime(2026, 5, 1, 12, 0, 0, DateTimeKind.Utc));
+ var ack = Timestamp.FromDateTime(new DateTime(2026, 5, 1, 12, 0, 30, DateTimeKind.Utc));
+ var original = new ActiveAlarmSnapshot
+ {
+ AlarmFullReference = "Tank01.Level.HiHi",
+ SourceObjectReference = "Tank01",
+ AlarmTypeName = "AnalogLimitAlarm.HiHi",
+ Severity = 750,
+ OriginalRaiseTimestamp = raise,
+ CurrentState = AlarmConditionState.ActiveAcked,
+ Category = "Process",
+ Description = "Tank 01 high-high level",
+ LastTransitionTimestamp = ack,
+ OperatorUser = "operator2",
+ OperatorComment = "investigating",
+ };
+
+ var parsed = ActiveAlarmSnapshot.Parser.ParseFrom(original.ToByteArray());
+
+ Assert.Equal(original, parsed);
+ Assert.Equal(AlarmConditionState.ActiveAcked, parsed.CurrentState);
+ }
+
+ /// Verifies that QueryActiveAlarmsRequest round-trips empty filter prefix.
+ [Fact]
+ public void QueryActiveAlarmsRequest_RoundTripsWithAndWithoutFilter()
+ {
+ var withoutFilter = new QueryActiveAlarmsRequest
+ {
+ SessionId = "session-1",
+ ClientCorrelationId = "client-correlation-8",
+ };
+
+ var withFilter = new QueryActiveAlarmsRequest
+ {
+ SessionId = "session-1",
+ ClientCorrelationId = "client-correlation-9",
+ AlarmFilterPrefix = "Tank01.",
+ };
+
+ Assert.Equal(withoutFilter, QueryActiveAlarmsRequest.Parser.ParseFrom(withoutFilter.ToByteArray()));
+ Assert.Equal(withFilter, QueryActiveAlarmsRequest.Parser.ParseFrom(withFilter.ToByteArray()));
+ }
}