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())); + } }