using MQTTnet; using MQTTnet.Protocol; using MQTTnet.Server; using System.Text; namespace MQTTServer.Controllers { public static class MQTTSERVER { public static async Task InitMQTTServerAsync() { var mqttServer = CreateMqttServer(); mqttServer.ValidatingConnectionAsync += e => { //if (e.ClientId != "ValidClientId") //{ // e.ReasonCode = MqttConnectReasonCode.ClientIdentifierNotValid; //} if (e.UserName != "HSClient") { e.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword; } if (e.Password != "HS202503") { e.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword; } return Task.CompletedTask; }; await StartMqttServer(mqttServer); Console.WriteLine("MQTT Server started. Press Enter to exit."); // Console.ReadLine(); //await mqttServer.StopAsync(); //Console.WriteLine("MQTT Server stopped."); return true; } static MqttServer CreateMqttServer() { var optionsBuilder = new MqttServerOptionsBuilder() .WithDefaultEndpoint() // 监听所有IP,默认端口1883 .WithDefaultEndpointPort(1883) .WithConnectionBacklog(100) // 最大并发连接数 .WithPersistentSessions () // 订阅拦截器 ; return new MqttServerFactory().CreateMqttServer(optionsBuilder.Build()); } static async Task StartMqttServer(MqttServer mqttServer) { mqttServer.ClientConnectedAsync += OnClientConnected; mqttServer.ClientDisconnectedAsync += OnClientDisconnected; mqttServer.ClientSubscribedTopicAsync += OnClientSubscribed; mqttServer.ApplicationMessageEnqueuedOrDroppedAsync += MqttServer_ApplicationMessageEnqueuedOrDroppedAsync; await mqttServer.StartAsync(); } private static Task MqttServer_ApplicationMessageEnqueuedOrDroppedAsync(ApplicationMessageEnqueuedEventArgs arg) { Console.WriteLine($"Message received on [{arg.ApplicationMessage.Topic}]: {arg.SenderClientId}, {arg.ReceiverClientId}, {arg.ApplicationMessage.Payload}"); return Task.CompletedTask; } static Task OnClientConnected(ClientConnectedEventArgs arg) { Console.WriteLine($"Client connected: {arg.ClientId}"); return Task.CompletedTask; } static Task OnClientDisconnected(ClientDisconnectedEventArgs arg) { Console.WriteLine($"Client disconnected: {arg.ClientId}"); return Task.CompletedTask; } //static void OnNewConnection( context) //{ // // 示例验证逻辑(可根据需要修改) // if (context.ClientId.Length < 3) // { // context.ReasonCode = MQTTnet.Protocol.MqttConnectReasonCode.ClientIdentifierNotValid; // return; // } // context.ReasonCode = MQTTnet.Protocol.MqttConnectReasonCode.Success; //} static Task OnClientSubscribed(ClientSubscribedTopicEventArgs context) { Console.WriteLine($"Client [{context.ClientId}] subscribed to: {context.TopicFilter.Topic}"); return Task.CompletedTask; } } }