123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- using System.Text;
- using System.Threading.Tasks;
- using System;
- using MQTTnet.Client;
- using Microsoft.Extensions.DependencyInjection;
- using MQTTnet;
- using MQTTnet.Protocol;
- using Microsoft.Extensions.Caching.Memory;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System.Collections.Generic;
- using System.Drawing;
- using Microsoft.AspNetCore.Mvc;
- using System.Linq;
- using Microsoft.Extensions.Logging;
- using System.Collections;
- using Swashbuckle.AspNetCore.SwaggerGen;
- using Microsoft.AspNetCore.DataProtection.KeyManagement;
- using static Ropin.IOT.MqttService.MqttClientService;
- using System.Collections.Concurrent;
- using log4net;
- namespace Ropin.IOT.MqttService
- {
- public static class MqttClientService
- {
- public static IMqttClient _mqttClient;
- public static IMemoryCache _memoryCache;
- public static MqttOptions _mqttOptions;
- public static List<MqttDevicePoint> _mqttDevicePointList;
- public static ConcurrentDictionary<string, MqttDevicePoint> _mqttDevicePointDic;
- public static ConcurrentDictionary<string, string> _mqttDevicePointNameMappingDic;
- private static readonly ILog log = LogManager.GetLogger(typeof(MqttClientService));
- public static void AddMqttClient(this IServiceCollection services, MqttOptions mqttOptions)
- {
- _mqttDevicePointList = new List<MqttDevicePoint>();
- _mqttDevicePointList.Add(new MqttDevicePoint { Id = "08d9ce00-8c61-4abb-8a8b-26e2fbf62e76", ChineseName = "模式", BoxId = "02700123060200004510", EnglishName = "MV", GroupName = "分组1" });
- _mqttDevicePointDic = new ConcurrentDictionary<string, MqttDevicePoint>();
- _mqttDevicePointNameMappingDic = new ConcurrentDictionary<string, string>();
- _mqttOptions = mqttOptions ?? new MqttOptions();
- var optionsBuilder = new MqttClientOptionsBuilder()
- .WithTcpServer(mqttOptions.Ip, mqttOptions.Port)
- .WithCredentials(mqttOptions.UserName, mqttOptions.Password)
- .WithClientId(Guid.NewGuid().ToString())
- .WithCleanSession()
- .WithTls(new MqttClientOptionsBuilderTlsParameters
- {
- UseTls = false
- });
- var clientOptions = optionsBuilder.Build();
- _mqttClient = new MqttFactory().CreateMqttClient();
- _mqttClient.ConnectedAsync += _mqttClient_ConnectedAsync;
- _mqttClient.DisconnectedAsync += _mqttClient_DisconnectedAsync;
- _mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
- _mqttClient.ConnectAsync(clientOptions);
- }
- public static void AddMqttClient1(MqttOptions mqttOptions,List<MqttDevicePoint> DevicePointList)
- {
- log.Info(" AddMqttClient1 ");
-
- _mqttDevicePointList = DevicePointList;
- _mqttDevicePointDic = new ConcurrentDictionary<string, MqttDevicePoint>();
- _mqttDevicePointNameMappingDic = new ConcurrentDictionary<string, string>();
- _mqttOptions = mqttOptions ?? new MqttOptions();
- var optionsBuilder = new MqttClientOptionsBuilder()
- .WithTcpServer(mqttOptions.Ip, mqttOptions.Port)
- .WithCredentials(mqttOptions.UserName, mqttOptions.Password)
- .WithClientId(Guid.NewGuid().ToString())
- .WithCleanSession()
- .WithTls(new MqttClientOptionsBuilderTlsParameters
- {
- UseTls = false
- });
- var clientOptions = optionsBuilder.Build();
- _mqttClient = new MqttFactory().CreateMqttClient();
- _mqttClient.ConnectedAsync += _mqttClient_ConnectedAsync;
- _mqttClient.DisconnectedAsync += _mqttClient_DisconnectedAsync;
- _mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
- _mqttClient.ConnectAsync(clientOptions);
- }
-
-
-
-
-
- private static Task _mqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
- {
- Console.WriteLine($"客户端已断开与服务端的连接……");
- _mqttClient.ReconnectAsync();
- return Task.CompletedTask;
- }
-
-
-
-
-
-
- private static Task _mqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
- {
- Console.WriteLine($"客户端已连接服务端……");
- #region 注释数据
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #endregion
- foreach (var dp in _mqttDevicePointList)
- {
- _mqttDevicePointDic.TryAdd(dp.BoxId + "分组1" + dp.EnglishName, dp);
- _mqttDevicePointNameMappingDic.TryAdd(dp.BoxId + "分组1" + dp.ChineseName, dp.BoxId + "分组1" + dp.EnglishName);
- }
-
-
-
-
- _mqttClient.SubscribeAsync(_mqttOptions.Theme, MqttQualityOfServiceLevel.AtLeastOnce);
- return Task.CompletedTask;
- }
- public class MqttDeviceData
- {
- public Dictionary<string,string> data { set; get; }
- public string boxid { set; get; }
- }
-
-
-
-
-
- private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg)
- {
- Console.WriteLine(Encoding.UTF8.GetString(arg?.ApplicationMessage?.PayloadSegment.ToArray()));
- var payload = Encoding.UTF8.GetString(arg?.ApplicationMessage?.PayloadSegment.ToArray());
- MqttDeviceData mqttDeviceData = JsonConvert.DeserializeObject<MqttDeviceData>(payload);
- if (mqttDeviceData != null && mqttDeviceData.data.Count > 0)
- {
- foreach (var key in mqttDeviceData.data.Keys)
- {
- MqttDevicePoint mqttDevicePoint = _mqttDevicePointDic[mqttDeviceData.boxid + "分组1" + key];
- mqttDevicePoint.BoxStatus = "1";
- mqttDevicePoint.DataType = "3";
- mqttDevicePoint.UpLoadTime = DateTime.Now;
- mqttDevicePoint.Value = mqttDeviceData.data[key];
- _mqttDevicePointDic[mqttDeviceData.boxid + "分组1" + key] = mqttDevicePoint;
- }
- }
-
-
-
- return Task.CompletedTask;
- }
- }
- }
|