123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using MQTTnet;
- using MQTTnet.Protocol;
- using MQTTnet.Server;
- using System.Text;
- namespace MQTTServer.Controllers
- {
- public static class MQTTSERVER {
- public static async Task<bool> 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;
- }
- }
- }
|