feat(mqtt): add MQTT listener, client creation, and shutdown wiring

Wire up the MQTT server-side orchestration layer (Task 1 of 7):
- Create NatsServer.Mqtt.cs with StartMqttListener(), CreateMqttClient(), MqttAddr()
- Forward MqttHandler.StartMqtt() to server.StartMqttListener()
- Add _mqttListener to Shutdown() doneExpected counting
- Fix ReadyForConnections to recognize active MQTT listener
- Handle RandomPort (-1) as ephemeral for MQTT listener
- Remove duplicate Mqtt field from ClientConnection.cs (already in ClientConnection.Mqtt.cs)
- Add 2 MQTT boot integration tests (accept + shutdown lifecycle)
This commit is contained in:
Joseph Doherty
2026-03-01 15:35:41 -05:00
parent 60bb56a90c
commit 6fb7f43335
7 changed files with 266 additions and 6 deletions
@@ -79,9 +79,11 @@ public sealed partial class NatsServer
_listener = null;
}
doneExpected += CloseWebsocketServer();
if (_gateway.Enabled)
if (_mqttListener != null)
{
// mqtt listener managed by session 22
doneExpected++;
_mqttListener.Stop();
_mqttListener = null;
}
if (_leafNodeListener != null)
{
@@ -505,7 +507,7 @@ public sealed partial class NatsServer
leafOk = opts.LeafNode.Port == 0 || _leafNodeListener != null;
leafErr = _leafNodeListenerErr;
wsOk = opts.Websocket.Port == 0 || _websocket.Listener != null;
mqttOk = opts.Mqtt.Port == 0;
mqttOk = opts.Mqtt.Port == 0 || _mqttListener != null;
_mu.ExitReadLock();
checks["server"] = (serverOk, serverErr);