Merge origin/main with local pending work and update AGENTS.md references

- Resolve 14 conflicts from popping local stash on top of origin's
  eed1e88 + 8d3352f doc-comment additions (11 mechanical, plus
  version.rs, DashboardAuthenticatorTests.cs, DashboardGalaxyProjector.cs)
- Fix 4 test files that used AGENTS.md as the repo-root sentinel
  (now use CLAUDE.md, since AGENTS.md was removed in 4731ab5)
- Redirect 10 doc citations from AGENTS.md to the matching gateway.md
  sections (Value Model, Status Model, Security, STA Worker Thread
  Model, gRPC Layer rule, cancellation rule)

Verified: solution build clean, x86 worker build clean, 266/266
gateway tests passing, 121/121 worker tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph Doherty
2026-04-30 14:13:33 -04:00
parent 8d3352f2c6
commit ddad573b75
101 changed files with 6053 additions and 621 deletions
@@ -6,7 +6,7 @@ namespace MxGateway.Contracts;
/// </summary>
public static class GatewayContractInfo
{
public const uint GatewayProtocolVersion = 1;
public const uint GatewayProtocolVersion = 2;
public const uint WorkerProtocolVersion = 1;
@@ -25,54 +25,64 @@ namespace MxGateway.Contracts.Proto.Galaxy {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"ChdnYWxheHlfcmVwb3NpdG9yeS5wcm90bxIUZ2FsYXh5X3JlcG9zaXRvcnku",
"djEaH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8iFwoVVGVzdENv",
"bm5lY3Rpb25SZXF1ZXN0IiEKE1Rlc3RDb25uZWN0aW9uUmVwbHkSCgoCb2sY",
"ASABKAgiGgoYR2V0TGFzdERlcGxveVRpbWVSZXF1ZXN0ImIKFkdldExhc3RE",
"ZXBsb3lUaW1lUmVwbHkSDwoHcHJlc2VudBgBIAEoCBI3ChN0aW1lX29mX2xh",
"c3RfZGVwbG95GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIa",
"ChhEaXNjb3ZlckhpZXJhcmNoeVJlcXVlc3QiTQoWRGlzY292ZXJIaWVyYXJj",
"aHlSZXBseRIzCgdvYmplY3RzGAEgAygLMiIuZ2FsYXh5X3JlcG9zaXRvcnku",
"djEuR2FsYXh5T2JqZWN0IlUKGFdhdGNoRGVwbG95RXZlbnRzUmVxdWVzdBI5",
"ChVsYXN0X3NlZW5fZGVwbG95X3RpbWUYASABKAsyGi5nb29nbGUucHJvdG9i",
"dWYuVGltZXN0YW1wIt0BCgtEZXBsb3lFdmVudBIQCghzZXF1ZW5jZRgBIAEo",
"BBIvCgtvYnNlcnZlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"c3RhbXASNwoTdGltZV9vZl9sYXN0X2RlcGxveRgDIAEoCzIaLmdvb2dsZS5w",
"cm90b2J1Zi5UaW1lc3RhbXASIwobdGltZV9vZl9sYXN0X2RlcGxveV9wcmVz",
"ZW50GAQgASgIEhQKDG9iamVjdF9jb3VudBgFIAEoBRIXCg9hdHRyaWJ1dGVf",
"Y291bnQYBiABKAUikwIKDEdhbGF4eU9iamVjdBISCgpnb2JqZWN0X2lkGAEg",
"ASgFEhAKCHRhZ19uYW1lGAIgASgJEhYKDmNvbnRhaW5lZF9uYW1lGAMgASgJ",
"EhMKC2Jyb3dzZV9uYW1lGAQgASgJEhkKEXBhcmVudF9nb2JqZWN0X2lkGAUg",
"ASgFEg8KB2lzX2FyZWEYBiABKAgSEwoLY2F0ZWdvcnlfaWQYByABKAUSHAoU",
"aG9zdGVkX2J5X2dvYmplY3RfaWQYCCABKAUSFgoOdGVtcGxhdGVfY2hhaW4Y",
"CSADKAkSOQoKYXR0cmlidXRlcxgKIAMoCzIlLmdhbGF4eV9yZXBvc2l0b3J5",
"LnYxLkdhbGF4eUF0dHJpYnV0ZSKoAgoPR2FsYXh5QXR0cmlidXRlEhYKDmF0",
"dHJpYnV0ZV9uYW1lGAEgASgJEhoKEmZ1bGxfdGFnX3JlZmVyZW5jZRgCIAEo",
"CRIUCgxteF9kYXRhX3R5cGUYAyABKAUSFgoOZGF0YV90eXBlX25hbWUYBCAB",
"KAkSEAoIaXNfYXJyYXkYBSABKAgSFwoPYXJyYXlfZGltZW5zaW9uGAYgASgF",
"Eh8KF2FycmF5X2RpbWVuc2lvbl9wcmVzZW50GAcgASgIEh0KFW14X2F0dHJp",
"YnV0ZV9jYXRlZ29yeRgIIAEoBRIfChdzZWN1cml0eV9jbGFzc2lmaWNhdGlv",
"bhgJIAEoBRIVCg1pc19oaXN0b3JpemVkGAogASgIEhAKCGlzX2FsYXJtGAsg",
"ASgIMswDChBHYWxheHlSZXBvc2l0b3J5EmgKDlRlc3RDb25uZWN0aW9uEisu",
"Z2FsYXh5X3JlcG9zaXRvcnkudjEuVGVzdENvbm5lY3Rpb25SZXF1ZXN0Giku",
"Z2FsYXh5X3JlcG9zaXRvcnkudjEuVGVzdENvbm5lY3Rpb25SZXBseRJxChFH",
"ZXRMYXN0RGVwbG95VGltZRIuLmdhbGF4eV9yZXBvc2l0b3J5LnYxLkdldExh",
"c3REZXBsb3lUaW1lUmVxdWVzdBosLmdhbGF4eV9yZXBvc2l0b3J5LnYxLkdl",
"dExhc3REZXBsb3lUaW1lUmVwbHkScQoRRGlzY292ZXJIaWVyYXJjaHkSLi5n",
"YWxheHlfcmVwb3NpdG9yeS52MS5EaXNjb3ZlckhpZXJhcmNoeVJlcXVlc3Qa",
"LC5nYWxheHlfcmVwb3NpdG9yeS52MS5EaXNjb3ZlckhpZXJhcmNoeVJlcGx5",
"EmgKEVdhdGNoRGVwbG95RXZlbnRzEi4uZ2FsYXh5X3JlcG9zaXRvcnkudjEu",
"V2F0Y2hEZXBsb3lFdmVudHNSZXF1ZXN0GiEuZ2FsYXh5X3JlcG9zaXRvcnku",
"djEuRGVwbG95RXZlbnQwAUIjqgIgTXhHYXRld2F5LkNvbnRyYWN0cy5Qcm90",
"by5HYWxheHliBnByb3RvMw=="));
"djEaH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8aHmdvb2dsZS9w",
"cm90b2J1Zi93cmFwcGVycy5wcm90byIXChVUZXN0Q29ubmVjdGlvblJlcXVl",
"c3QiIQoTVGVzdENvbm5lY3Rpb25SZXBseRIKCgJvaxgBIAEoCCIaChhHZXRM",
"YXN0RGVwbG95VGltZVJlcXVlc3QiYgoWR2V0TGFzdERlcGxveVRpbWVSZXBs",
"eRIPCgdwcmVzZW50GAEgASgIEjcKE3RpbWVfb2ZfbGFzdF9kZXBsb3kYAiAB",
"KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIocDChhEaXNjb3Zlckhp",
"ZXJhcmNoeVJlcXVlc3QSEQoJcGFnZV9zaXplGAEgASgFEhIKCnBhZ2VfdG9r",
"ZW4YAiABKAkSGQoPcm9vdF9nb2JqZWN0X2lkGAMgASgFSAASFwoNcm9vdF90",
"YWdfbmFtZRgEIAEoCUgAEh0KE3Jvb3RfY29udGFpbmVkX3BhdGgYBSABKAlI",
"ABIuCgltYXhfZGVwdGgYBiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJW",
"YWx1ZRIUCgxjYXRlZ29yeV9pZHMYByADKAUSHwoXdGVtcGxhdGVfY2hhaW5f",
"Y29udGFpbnMYCCADKAkSFQoNdGFnX25hbWVfZ2xvYhgJIAEoCRIfChJpbmNs",
"dWRlX2F0dHJpYnV0ZXMYCiABKAhIAYgBARIaChJhbGFybV9iZWFyaW5nX29u",
"bHkYCyABKAgSFwoPaGlzdG9yaXplZF9vbmx5GAwgASgIQgYKBHJvb3RCFQoT",
"X2luY2x1ZGVfYXR0cmlidXRlcyKCAQoWRGlzY292ZXJIaWVyYXJjaHlSZXBs",
"eRIzCgdvYmplY3RzGAEgAygLMiIuZ2FsYXh5X3JlcG9zaXRvcnkudjEuR2Fs",
"YXh5T2JqZWN0EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRIaChJ0b3RhbF9v",
"YmplY3RfY291bnQYAyABKAUiVQoYV2F0Y2hEZXBsb3lFdmVudHNSZXF1ZXN0",
"EjkKFWxhc3Rfc2Vlbl9kZXBsb3lfdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90",
"b2J1Zi5UaW1lc3RhbXAi3QEKC0RlcGxveUV2ZW50EhAKCHNlcXVlbmNlGAEg",
"ASgEEi8KC29ic2VydmVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRp",
"bWVzdGFtcBI3ChN0aW1lX29mX2xhc3RfZGVwbG95GAMgASgLMhouZ29vZ2xl",
"LnByb3RvYnVmLlRpbWVzdGFtcBIjCht0aW1lX29mX2xhc3RfZGVwbG95X3By",
"ZXNlbnQYBCABKAgSFAoMb2JqZWN0X2NvdW50GAUgASgFEhcKD2F0dHJpYnV0",
"ZV9jb3VudBgGIAEoBSKTAgoMR2FsYXh5T2JqZWN0EhIKCmdvYmplY3RfaWQY",
"ASABKAUSEAoIdGFnX25hbWUYAiABKAkSFgoOY29udGFpbmVkX25hbWUYAyAB",
"KAkSEwoLYnJvd3NlX25hbWUYBCABKAkSGQoRcGFyZW50X2dvYmplY3RfaWQY",
"BSABKAUSDwoHaXNfYXJlYRgGIAEoCBITCgtjYXRlZ29yeV9pZBgHIAEoBRIc",
"ChRob3N0ZWRfYnlfZ29iamVjdF9pZBgIIAEoBRIWCg50ZW1wbGF0ZV9jaGFp",
"bhgJIAMoCRI5CgphdHRyaWJ1dGVzGAogAygLMiUuZ2FsYXh5X3JlcG9zaXRv",
"cnkudjEuR2FsYXh5QXR0cmlidXRlIqgCCg9HYWxheHlBdHRyaWJ1dGUSFgoO",
"YXR0cmlidXRlX25hbWUYASABKAkSGgoSZnVsbF90YWdfcmVmZXJlbmNlGAIg",
"ASgJEhQKDG14X2RhdGFfdHlwZRgDIAEoBRIWCg5kYXRhX3R5cGVfbmFtZRgE",
"IAEoCRIQCghpc19hcnJheRgFIAEoCBIXCg9hcnJheV9kaW1lbnNpb24YBiAB",
"KAUSHwoXYXJyYXlfZGltZW5zaW9uX3ByZXNlbnQYByABKAgSHQoVbXhfYXR0",
"cmlidXRlX2NhdGVnb3J5GAggASgFEh8KF3NlY3VyaXR5X2NsYXNzaWZpY2F0",
"aW9uGAkgASgFEhUKDWlzX2hpc3Rvcml6ZWQYCiABKAgSEAoIaXNfYWxhcm0Y",
"CyABKAgyzAMKEEdhbGF4eVJlcG9zaXRvcnkSaAoOVGVzdENvbm5lY3Rpb24S",
"Ky5nYWxheHlfcmVwb3NpdG9yeS52MS5UZXN0Q29ubmVjdGlvblJlcXVlc3Qa",
"KS5nYWxheHlfcmVwb3NpdG9yeS52MS5UZXN0Q29ubmVjdGlvblJlcGx5EnEK",
"EUdldExhc3REZXBsb3lUaW1lEi4uZ2FsYXh5X3JlcG9zaXRvcnkudjEuR2V0",
"TGFzdERlcGxveVRpbWVSZXF1ZXN0GiwuZ2FsYXh5X3JlcG9zaXRvcnkudjEu",
"R2V0TGFzdERlcGxveVRpbWVSZXBseRJxChFEaXNjb3ZlckhpZXJhcmNoeRIu",
"LmdhbGF4eV9yZXBvc2l0b3J5LnYxLkRpc2NvdmVySGllcmFyY2h5UmVxdWVz",
"dBosLmdhbGF4eV9yZXBvc2l0b3J5LnYxLkRpc2NvdmVySGllcmFyY2h5UmVw",
"bHkSaAoRV2F0Y2hEZXBsb3lFdmVudHMSLi5nYWxheHlfcmVwb3NpdG9yeS52",
"MS5XYXRjaERlcGxveUV2ZW50c1JlcXVlc3QaIS5nYWxheHlfcmVwb3NpdG9y",
"eS52MS5EZXBsb3lFdmVudDABQiOqAiBNeEdhdGV3YXkuQ29udHJhY3RzLlBy",
"b3RvLkdhbGF4eWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, },
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.TestConnectionRequest), global::MxGateway.Contracts.Proto.Galaxy.TestConnectionRequest.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.TestConnectionReply), global::MxGateway.Contracts.Proto.Galaxy.TestConnectionReply.Parser, new[]{ "Ok" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.GetLastDeployTimeRequest), global::MxGateway.Contracts.Proto.Galaxy.GetLastDeployTimeRequest.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.GetLastDeployTimeReply), global::MxGateway.Contracts.Proto.Galaxy.GetLastDeployTimeReply.Parser, new[]{ "Present", "TimeOfLastDeploy" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyRequest), global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyRequest.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyReply), global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyReply.Parser, new[]{ "Objects" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyRequest), global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyRequest.Parser, new[]{ "PageSize", "PageToken", "RootGobjectId", "RootTagName", "RootContainedPath", "MaxDepth", "CategoryIds", "TemplateChainContains", "TagNameGlob", "IncludeAttributes", "AlarmBearingOnly", "HistorizedOnly" }, new[]{ "Root", "IncludeAttributes" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyReply), global::MxGateway.Contracts.Proto.Galaxy.DiscoverHierarchyReply.Parser, new[]{ "Objects", "NextPageToken", "TotalObjectCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.WatchDeployEventsRequest), global::MxGateway.Contracts.Proto.Galaxy.WatchDeployEventsRequest.Parser, new[]{ "LastSeenDeployTime" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.DeployEvent), global::MxGateway.Contracts.Proto.Galaxy.DeployEvent.Parser, new[]{ "Sequence", "ObservedAt", "TimeOfLastDeploy", "TimeOfLastDeployPresent", "ObjectCount", "AttributeCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::MxGateway.Contracts.Proto.Galaxy.GalaxyObject), global::MxGateway.Contracts.Proto.Galaxy.GalaxyObject.Parser, new[]{ "GobjectId", "TagName", "ContainedName", "BrowseName", "ParentGobjectId", "IsArea", "CategoryId", "HostedByGobjectId", "TemplateChain", "Attributes" }, null, null, null, null),
@@ -855,6 +865,7 @@ namespace MxGateway.Contracts.Proto.Galaxy {
{
private static readonly pb::MessageParser<DiscoverHierarchyRequest> _parser = new pb::MessageParser<DiscoverHierarchyRequest>(() => new DiscoverHierarchyRequest());
private pb::UnknownFieldSet _unknownFields;
private int _hasBits0;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser<DiscoverHierarchyRequest> Parser { get { return _parser; } }
@@ -882,6 +893,28 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public DiscoverHierarchyRequest(DiscoverHierarchyRequest other) : this() {
_hasBits0 = other._hasBits0;
pageSize_ = other.pageSize_;
pageToken_ = other.pageToken_;
MaxDepth = other.MaxDepth;
categoryIds_ = other.categoryIds_.Clone();
templateChainContains_ = other.templateChainContains_.Clone();
tagNameGlob_ = other.tagNameGlob_;
includeAttributes_ = other.includeAttributes_;
alarmBearingOnly_ = other.alarmBearingOnly_;
historizedOnly_ = other.historizedOnly_;
switch (other.RootCase) {
case RootOneofCase.RootGobjectId:
RootGobjectId = other.RootGobjectId;
break;
case RootOneofCase.RootTagName:
RootTagName = other.RootTagName;
break;
case RootOneofCase.RootContainedPath:
RootContainedPath = other.RootContainedPath;
break;
}
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -891,6 +924,258 @@ namespace MxGateway.Contracts.Proto.Galaxy {
return new DiscoverHierarchyRequest(this);
}
/// <summary>Field number for the "page_size" field.</summary>
public const int PageSizeFieldNumber = 1;
private int pageSize_;
/// <summary>
/// Maximum number of objects to return. The server applies its default when
/// unset and rejects non-positive values.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int PageSize {
get { return pageSize_; }
set {
pageSize_ = value;
}
}
/// <summary>Field number for the "page_token" field.</summary>
public const int PageTokenFieldNumber = 2;
private string pageToken_ = "";
/// <summary>
/// Opaque token returned by a previous DiscoverHierarchy response.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string PageToken {
get { return pageToken_; }
set {
pageToken_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "root_gobject_id" field.</summary>
public const int RootGobjectIdFieldNumber = 3;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int RootGobjectId {
get { return HasRootGobjectId ? (int) root_ : 0; }
set {
root_ = value;
rootCase_ = RootOneofCase.RootGobjectId;
}
}
/// <summary>Gets whether the "root_gobject_id" field is set</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool HasRootGobjectId {
get { return rootCase_ == RootOneofCase.RootGobjectId; }
}
/// <summary> Clears the value of the oneof if it's currently set to "root_gobject_id" </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void ClearRootGobjectId() {
if (HasRootGobjectId) {
ClearRoot();
}
}
/// <summary>Field number for the "root_tag_name" field.</summary>
public const int RootTagNameFieldNumber = 4;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string RootTagName {
get { return HasRootTagName ? (string) root_ : ""; }
set {
root_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
rootCase_ = RootOneofCase.RootTagName;
}
}
/// <summary>Gets whether the "root_tag_name" field is set</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool HasRootTagName {
get { return rootCase_ == RootOneofCase.RootTagName; }
}
/// <summary> Clears the value of the oneof if it's currently set to "root_tag_name" </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void ClearRootTagName() {
if (HasRootTagName) {
ClearRoot();
}
}
/// <summary>Field number for the "root_contained_path" field.</summary>
public const int RootContainedPathFieldNumber = 5;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string RootContainedPath {
get { return HasRootContainedPath ? (string) root_ : ""; }
set {
root_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
rootCase_ = RootOneofCase.RootContainedPath;
}
}
/// <summary>Gets whether the "root_contained_path" field is set</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool HasRootContainedPath {
get { return rootCase_ == RootOneofCase.RootContainedPath; }
}
/// <summary> Clears the value of the oneof if it's currently set to "root_contained_path" </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void ClearRootContainedPath() {
if (HasRootContainedPath) {
ClearRoot();
}
}
/// <summary>Field number for the "max_depth" field.</summary>
public const int MaxDepthFieldNumber = 6;
private static readonly pb::FieldCodec<int?> _single_maxDepth_codec = pb::FieldCodec.ForStructWrapper<int>(50);
private int? maxDepth_;
/// <summary>
/// Optional. Cap on descendant depth from root. Zero returns only the root.
/// Unset means unlimited depth.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int? MaxDepth {
get { return maxDepth_; }
set {
maxDepth_ = value;
}
}
/// <summary>Field number for the "category_ids" field.</summary>
public const int CategoryIdsFieldNumber = 7;
private static readonly pb::FieldCodec<int> _repeated_categoryIds_codec
= pb::FieldCodec.ForInt32(58);
private readonly pbc::RepeatedField<int> categoryIds_ = new pbc::RepeatedField<int>();
/// <summary>
/// Optional object category id filters.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public pbc::RepeatedField<int> CategoryIds {
get { return categoryIds_; }
}
/// <summary>Field number for the "template_chain_contains" field.</summary>
public const int TemplateChainContainsFieldNumber = 8;
private static readonly pb::FieldCodec<string> _repeated_templateChainContains_codec
= pb::FieldCodec.ForString(66);
private readonly pbc::RepeatedField<string> templateChainContains_ = new pbc::RepeatedField<string>();
/// <summary>
/// Optional case-insensitive substring filters against template names.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public pbc::RepeatedField<string> TemplateChainContains {
get { return templateChainContains_; }
}
/// <summary>Field number for the "tag_name_glob" field.</summary>
public const int TagNameGlobFieldNumber = 9;
private string tagNameGlob_ = "";
/// <summary>
/// Optional anchored, case-insensitive glob over object tag_name.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string TagNameGlob {
get { return tagNameGlob_; }
set {
tagNameGlob_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "include_attributes" field.</summary>
public const int IncludeAttributesFieldNumber = 10;
private readonly static bool IncludeAttributesDefaultValue = false;
private bool includeAttributes_;
/// <summary>
/// Optional. Unset or true includes attributes. False returns object skeletons.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool IncludeAttributes {
get { if ((_hasBits0 & 1) != 0) { return includeAttributes_; } else { return IncludeAttributesDefaultValue; } }
set {
_hasBits0 |= 1;
includeAttributes_ = value;
}
}
/// <summary>Gets whether the "include_attributes" field is set</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool HasIncludeAttributes {
get { return (_hasBits0 & 1) != 0; }
}
/// <summary>Clears the value of the "include_attributes" field</summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void ClearIncludeAttributes() {
_hasBits0 &= ~1;
}
/// <summary>Field number for the "alarm_bearing_only" field.</summary>
public const int AlarmBearingOnlyFieldNumber = 11;
private bool alarmBearingOnly_;
/// <summary>
/// Optional. Return only objects with at least one alarm-bearing attribute.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool AlarmBearingOnly {
get { return alarmBearingOnly_; }
set {
alarmBearingOnly_ = value;
}
}
/// <summary>Field number for the "historized_only" field.</summary>
public const int HistorizedOnlyFieldNumber = 12;
private bool historizedOnly_;
/// <summary>
/// Optional. Return only objects with at least one historized attribute.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool HistorizedOnly {
get { return historizedOnly_; }
set {
historizedOnly_ = value;
}
}
private object root_;
/// <summary>Enum of possible cases for the "root" oneof.</summary>
public enum RootOneofCase {
None = 0,
RootGobjectId = 3,
RootTagName = 4,
RootContainedPath = 5,
}
private RootOneofCase rootCase_ = RootOneofCase.None;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public RootOneofCase RootCase {
get { return rootCase_; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void ClearRoot() {
rootCase_ = RootOneofCase.None;
root_ = null;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@@ -906,6 +1191,19 @@ namespace MxGateway.Contracts.Proto.Galaxy {
if (ReferenceEquals(other, this)) {
return true;
}
if (PageSize != other.PageSize) return false;
if (PageToken != other.PageToken) return false;
if (RootGobjectId != other.RootGobjectId) return false;
if (RootTagName != other.RootTagName) return false;
if (RootContainedPath != other.RootContainedPath) return false;
if (MaxDepth != other.MaxDepth) return false;
if(!categoryIds_.Equals(other.categoryIds_)) return false;
if(!templateChainContains_.Equals(other.templateChainContains_)) return false;
if (TagNameGlob != other.TagNameGlob) return false;
if (IncludeAttributes != other.IncludeAttributes) return false;
if (AlarmBearingOnly != other.AlarmBearingOnly) return false;
if (HistorizedOnly != other.HistorizedOnly) return false;
if (RootCase != other.RootCase) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -913,6 +1211,19 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
if (PageSize != 0) hash ^= PageSize.GetHashCode();
if (PageToken.Length != 0) hash ^= PageToken.GetHashCode();
if (HasRootGobjectId) hash ^= RootGobjectId.GetHashCode();
if (HasRootTagName) hash ^= RootTagName.GetHashCode();
if (HasRootContainedPath) hash ^= RootContainedPath.GetHashCode();
if (maxDepth_ != null) hash ^= MaxDepth.GetHashCode();
hash ^= categoryIds_.GetHashCode();
hash ^= templateChainContains_.GetHashCode();
if (TagNameGlob.Length != 0) hash ^= TagNameGlob.GetHashCode();
if (HasIncludeAttributes) hash ^= IncludeAttributes.GetHashCode();
if (AlarmBearingOnly != false) hash ^= AlarmBearingOnly.GetHashCode();
if (HistorizedOnly != false) hash ^= HistorizedOnly.GetHashCode();
hash ^= (int) rootCase_;
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -931,6 +1242,47 @@ namespace MxGateway.Contracts.Proto.Galaxy {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (PageSize != 0) {
output.WriteRawTag(8);
output.WriteInt32(PageSize);
}
if (PageToken.Length != 0) {
output.WriteRawTag(18);
output.WriteString(PageToken);
}
if (HasRootGobjectId) {
output.WriteRawTag(24);
output.WriteInt32(RootGobjectId);
}
if (HasRootTagName) {
output.WriteRawTag(34);
output.WriteString(RootTagName);
}
if (HasRootContainedPath) {
output.WriteRawTag(42);
output.WriteString(RootContainedPath);
}
if (maxDepth_ != null) {
_single_maxDepth_codec.WriteTagAndValue(output, MaxDepth);
}
categoryIds_.WriteTo(output, _repeated_categoryIds_codec);
templateChainContains_.WriteTo(output, _repeated_templateChainContains_codec);
if (TagNameGlob.Length != 0) {
output.WriteRawTag(74);
output.WriteString(TagNameGlob);
}
if (HasIncludeAttributes) {
output.WriteRawTag(80);
output.WriteBool(IncludeAttributes);
}
if (AlarmBearingOnly != false) {
output.WriteRawTag(88);
output.WriteBool(AlarmBearingOnly);
}
if (HistorizedOnly != false) {
output.WriteRawTag(96);
output.WriteBool(HistorizedOnly);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -941,6 +1293,47 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (PageSize != 0) {
output.WriteRawTag(8);
output.WriteInt32(PageSize);
}
if (PageToken.Length != 0) {
output.WriteRawTag(18);
output.WriteString(PageToken);
}
if (HasRootGobjectId) {
output.WriteRawTag(24);
output.WriteInt32(RootGobjectId);
}
if (HasRootTagName) {
output.WriteRawTag(34);
output.WriteString(RootTagName);
}
if (HasRootContainedPath) {
output.WriteRawTag(42);
output.WriteString(RootContainedPath);
}
if (maxDepth_ != null) {
_single_maxDepth_codec.WriteTagAndValue(ref output, MaxDepth);
}
categoryIds_.WriteTo(ref output, _repeated_categoryIds_codec);
templateChainContains_.WriteTo(ref output, _repeated_templateChainContains_codec);
if (TagNameGlob.Length != 0) {
output.WriteRawTag(74);
output.WriteString(TagNameGlob);
}
if (HasIncludeAttributes) {
output.WriteRawTag(80);
output.WriteBool(IncludeAttributes);
}
if (AlarmBearingOnly != false) {
output.WriteRawTag(88);
output.WriteBool(AlarmBearingOnly);
}
if (HistorizedOnly != false) {
output.WriteRawTag(96);
output.WriteBool(HistorizedOnly);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -951,6 +1344,38 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
if (PageSize != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(PageSize);
}
if (PageToken.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(PageToken);
}
if (HasRootGobjectId) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(RootGobjectId);
}
if (HasRootTagName) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(RootTagName);
}
if (HasRootContainedPath) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(RootContainedPath);
}
if (maxDepth_ != null) {
size += _single_maxDepth_codec.CalculateSizeWithTag(MaxDepth);
}
size += categoryIds_.CalculateSize(_repeated_categoryIds_codec);
size += templateChainContains_.CalculateSize(_repeated_templateChainContains_codec);
if (TagNameGlob.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(TagNameGlob);
}
if (HasIncludeAttributes) {
size += 1 + 1;
}
if (AlarmBearingOnly != false) {
size += 1 + 1;
}
if (HistorizedOnly != false) {
size += 1 + 1;
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -963,6 +1388,43 @@ namespace MxGateway.Contracts.Proto.Galaxy {
if (other == null) {
return;
}
if (other.PageSize != 0) {
PageSize = other.PageSize;
}
if (other.PageToken.Length != 0) {
PageToken = other.PageToken;
}
if (other.maxDepth_ != null) {
if (maxDepth_ == null || other.MaxDepth != 0) {
MaxDepth = other.MaxDepth;
}
}
categoryIds_.Add(other.categoryIds_);
templateChainContains_.Add(other.templateChainContains_);
if (other.TagNameGlob.Length != 0) {
TagNameGlob = other.TagNameGlob;
}
if (other.HasIncludeAttributes) {
IncludeAttributes = other.IncludeAttributes;
}
if (other.AlarmBearingOnly != false) {
AlarmBearingOnly = other.AlarmBearingOnly;
}
if (other.HistorizedOnly != false) {
HistorizedOnly = other.HistorizedOnly;
}
switch (other.RootCase) {
case RootOneofCase.RootGobjectId:
RootGobjectId = other.RootGobjectId;
break;
case RootOneofCase.RootTagName:
RootTagName = other.RootTagName;
break;
case RootOneofCase.RootContainedPath:
RootContainedPath = other.RootContainedPath;
break;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -982,6 +1444,58 @@ namespace MxGateway.Contracts.Proto.Galaxy {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 8: {
PageSize = input.ReadInt32();
break;
}
case 18: {
PageToken = input.ReadString();
break;
}
case 24: {
RootGobjectId = input.ReadInt32();
break;
}
case 34: {
RootTagName = input.ReadString();
break;
}
case 42: {
RootContainedPath = input.ReadString();
break;
}
case 50: {
int? value = _single_maxDepth_codec.Read(input);
if (maxDepth_ == null || value != 0) {
MaxDepth = value;
}
break;
}
case 58:
case 56: {
categoryIds_.AddEntriesFrom(input, _repeated_categoryIds_codec);
break;
}
case 66: {
templateChainContains_.AddEntriesFrom(input, _repeated_templateChainContains_codec);
break;
}
case 74: {
TagNameGlob = input.ReadString();
break;
}
case 80: {
IncludeAttributes = input.ReadBool();
break;
}
case 88: {
AlarmBearingOnly = input.ReadBool();
break;
}
case 96: {
HistorizedOnly = input.ReadBool();
break;
}
}
}
#endif
@@ -1001,6 +1515,58 @@ namespace MxGateway.Contracts.Proto.Galaxy {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
case 8: {
PageSize = input.ReadInt32();
break;
}
case 18: {
PageToken = input.ReadString();
break;
}
case 24: {
RootGobjectId = input.ReadInt32();
break;
}
case 34: {
RootTagName = input.ReadString();
break;
}
case 42: {
RootContainedPath = input.ReadString();
break;
}
case 50: {
int? value = _single_maxDepth_codec.Read(ref input);
if (maxDepth_ == null || value != 0) {
MaxDepth = value;
}
break;
}
case 58:
case 56: {
categoryIds_.AddEntriesFrom(ref input, _repeated_categoryIds_codec);
break;
}
case 66: {
templateChainContains_.AddEntriesFrom(ref input, _repeated_templateChainContains_codec);
break;
}
case 74: {
TagNameGlob = input.ReadString();
break;
}
case 80: {
IncludeAttributes = input.ReadBool();
break;
}
case 88: {
AlarmBearingOnly = input.ReadBool();
break;
}
case 96: {
HistorizedOnly = input.ReadBool();
break;
}
}
}
}
@@ -1044,6 +1610,8 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public DiscoverHierarchyReply(DiscoverHierarchyReply other) : this() {
objects_ = other.objects_.Clone();
nextPageToken_ = other.nextPageToken_;
totalObjectCount_ = other.totalObjectCount_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -1064,6 +1632,36 @@ namespace MxGateway.Contracts.Proto.Galaxy {
get { return objects_; }
}
/// <summary>Field number for the "next_page_token" field.</summary>
public const int NextPageTokenFieldNumber = 2;
private string nextPageToken_ = "";
/// <summary>
/// Non-empty when another page is available.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string NextPageToken {
get { return nextPageToken_; }
set {
nextPageToken_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "total_object_count" field.</summary>
public const int TotalObjectCountFieldNumber = 3;
private int totalObjectCount_;
/// <summary>
/// Total number of objects in the cached hierarchy at the time of the call.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int TotalObjectCount {
get { return totalObjectCount_; }
set {
totalObjectCount_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@@ -1080,6 +1678,8 @@ namespace MxGateway.Contracts.Proto.Galaxy {
return true;
}
if(!objects_.Equals(other.objects_)) return false;
if (NextPageToken != other.NextPageToken) return false;
if (TotalObjectCount != other.TotalObjectCount) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -1088,6 +1688,8 @@ namespace MxGateway.Contracts.Proto.Galaxy {
public override int GetHashCode() {
int hash = 1;
hash ^= objects_.GetHashCode();
if (NextPageToken.Length != 0) hash ^= NextPageToken.GetHashCode();
if (TotalObjectCount != 0) hash ^= TotalObjectCount.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -1107,6 +1709,14 @@ namespace MxGateway.Contracts.Proto.Galaxy {
output.WriteRawMessage(this);
#else
objects_.WriteTo(output, _repeated_objects_codec);
if (NextPageToken.Length != 0) {
output.WriteRawTag(18);
output.WriteString(NextPageToken);
}
if (TotalObjectCount != 0) {
output.WriteRawTag(24);
output.WriteInt32(TotalObjectCount);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -1118,6 +1728,14 @@ namespace MxGateway.Contracts.Proto.Galaxy {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
objects_.WriteTo(ref output, _repeated_objects_codec);
if (NextPageToken.Length != 0) {
output.WriteRawTag(18);
output.WriteString(NextPageToken);
}
if (TotalObjectCount != 0) {
output.WriteRawTag(24);
output.WriteInt32(TotalObjectCount);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -1129,6 +1747,12 @@ namespace MxGateway.Contracts.Proto.Galaxy {
public int CalculateSize() {
int size = 0;
size += objects_.CalculateSize(_repeated_objects_codec);
if (NextPageToken.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(NextPageToken);
}
if (TotalObjectCount != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(TotalObjectCount);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -1142,6 +1766,12 @@ namespace MxGateway.Contracts.Proto.Galaxy {
return;
}
objects_.Add(other.objects_);
if (other.NextPageToken.Length != 0) {
NextPageToken = other.NextPageToken;
}
if (other.TotalObjectCount != 0) {
TotalObjectCount = other.TotalObjectCount;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -1165,6 +1795,14 @@ namespace MxGateway.Contracts.Proto.Galaxy {
objects_.AddEntriesFrom(input, _repeated_objects_codec);
break;
}
case 18: {
NextPageToken = input.ReadString();
break;
}
case 24: {
TotalObjectCount = input.ReadInt32();
break;
}
}
}
#endif
@@ -1188,6 +1826,14 @@ namespace MxGateway.Contracts.Proto.Galaxy {
objects_.AddEntriesFrom(ref input, _repeated_objects_codec);
break;
}
case 18: {
NextPageToken = input.ReadString();
break;
}
case 24: {
TotalObjectCount = input.ReadInt32();
break;
}
}
}
}
@@ -5,6 +5,7 @@ package galaxy_repository.v1;
option csharp_namespace = "MxGateway.Contracts.Proto.Galaxy";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
// Read-only browse over the AVEVA System Platform Galaxy Repository (ZB SQL
// database). Lets clients enumerate the deployed object hierarchy and each
@@ -37,10 +38,42 @@ message GetLastDeployTimeReply {
google.protobuf.Timestamp time_of_last_deploy = 2;
}
message DiscoverHierarchyRequest {}
message DiscoverHierarchyRequest {
// Maximum number of objects to return. The server applies its default when
// unset and rejects non-positive values.
int32 page_size = 1;
// Opaque token returned by a previous DiscoverHierarchy response.
string page_token = 2;
// Optional. When set, return only this object and its descendants.
// Empty = full hierarchy.
oneof root {
int32 root_gobject_id = 3;
string root_tag_name = 4;
string root_contained_path = 5;
}
// Optional. Cap on descendant depth from root. Zero returns only the root.
// Unset means unlimited depth.
google.protobuf.Int32Value max_depth = 6;
// Optional object category id filters.
repeated int32 category_ids = 7;
// Optional case-insensitive substring filters against template names.
repeated string template_chain_contains = 8;
// Optional anchored, case-insensitive glob over object tag_name.
string tag_name_glob = 9;
// Optional. Unset or true includes attributes. False returns object skeletons.
optional bool include_attributes = 10;
// Optional. Return only objects with at least one alarm-bearing attribute.
bool alarm_bearing_only = 11;
// Optional. Return only objects with at least one historized attribute.
bool historized_only = 12;
}
message DiscoverHierarchyReply {
repeated GalaxyObject objects = 1;
// Non-empty when another page is available.
string next_page_token = 2;
// Total number of objects in the cached hierarchy at the time of the call.
int32 total_object_count = 3;
}
message WatchDeployEventsRequest {