From b0c5b4acd8a50c870b48672f4dea0c305788a948 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 23 Feb 2026 05:26:25 -0500 Subject: [PATCH] feat: add system event subject constants and SystemMessageHandler delegate --- src/NATS.Server/Events/EventSubjects.cs | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/NATS.Server/Events/EventSubjects.cs diff --git a/src/NATS.Server/Events/EventSubjects.cs b/src/NATS.Server/Events/EventSubjects.cs new file mode 100644 index 0000000..f29460f --- /dev/null +++ b/src/NATS.Server/Events/EventSubjects.cs @@ -0,0 +1,49 @@ +using NATS.Server.Auth; +using NATS.Server.Subscriptions; + +namespace NATS.Server.Events; + +/// +/// System event subject patterns. +/// Maps to Go events.go:41-97 subject constants. +/// +public static class EventSubjects +{ + // Account-scoped events + public const string ConnectEvent = "$SYS.ACCOUNT.{0}.CONNECT"; + public const string DisconnectEvent = "$SYS.ACCOUNT.{0}.DISCONNECT"; + public const string AccountConnsNew = "$SYS.ACCOUNT.{0}.SERVER.CONNS"; + public const string AccountConnsOld = "$SYS.SERVER.ACCOUNT.{0}.CONNS"; + + // Server-scoped events + public const string ServerStats = "$SYS.SERVER.{0}.STATSZ"; + public const string ServerShutdown = "$SYS.SERVER.{0}.SHUTDOWN"; + public const string ServerLameDuck = "$SYS.SERVER.{0}.LAMEDUCK"; + public const string AuthError = "$SYS.SERVER.{0}.CLIENT.AUTH.ERR"; + public const string AuthErrorAccount = "$SYS.ACCOUNT.CLIENT.AUTH.ERR"; + + // Request-reply subjects (server-specific) + public const string ServerReq = "$SYS.REQ.SERVER.{0}.{1}"; + + // Wildcard ping subjects (all servers respond) + public const string ServerPing = "$SYS.REQ.SERVER.PING.{0}"; + + // Account-scoped request subjects + public const string AccountReq = "$SYS.REQ.ACCOUNT.{0}.{1}"; + + // Inbox for responses + public const string InboxResponse = "$SYS._INBOX_.{0}"; +} + +/// +/// Callback signature for system message handlers. +/// Maps to Go's sysMsgHandler type in events.go:109. +/// +public delegate void SystemMessageHandler( + Subscription? sub, + INatsClient? client, + Account? account, + string subject, + string? reply, + ReadOnlyMemory headers, + ReadOnlyMemory message);