using Common; using Commonlib; using LogCap.Common; using LogCap.Entity; using Microsoft.Extensions.Caching.Memory; using Microsoft.VisualBasic; using MQTTnet; using MQTTnet.Packets; using MQTTnet.Protocol; using NetMQ; using NetMQ.Sockets; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RestSharp; using RestSharp.Authenticators.OAuth2; using System.Collections; using System.Text; using System.Threading.Tasks; using System.Timers; namespace LogCap { public class Program { public static MemoryCache Cache = new MemoryCache(new MemoryCacheOptions { }); public static IMqttClient mqttClient { get; set; } public static DateTime CurrentTime { get; set; } public static int CurrentWangKaBianHao = 0; public static void Main(string[] args) { var NQQ = DateTime.Now.ToString("mmss"); //var server = new ResponseSocket("@tcp://127.0.0.1:5556"); //while (true) //{ // string frame = server.ReceiveFrameString(); // Console.WriteLine("Server received frame={0}", frame); //} //Console.ReadLine(); //string SSS = Guid.NewGuid().ToString("N"); //CurrentTime = DateTime.Now; // var authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator( //"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NGZjYjhjMS1jZDZjLTRkMTktOTc3My05YzkxYmZhNjQ2YWQiLCJpYXQiOjE3NDEyNDczNDAsImV4cCI6MTc0MTI1ODE0MCwic2NoZW1hIjoibnhnXzcwNzA1OTEzX2VhcXoiLCJ1c2VyIjoiYWYwNzg3YTQtMmM2NC00NWRiLWEzMjktNzg0ZGYwZWRjOGZjIiwiZGVmYXVsdF9wcm9wZXJ0eSI6IjA3MTY3M2IzLWQ4OTMtNDQwYi1iM2YwLTY0YTBkOTY0ZWIyOSIsInRvX3JlZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MiLCJpbml0X2Vwb2NoIjoxNzQxMjQ3MzQwLCJtZWRpdW1fY29kZSI6IldFQiJ9.4k2GE08J3MZQIgRKOx5dYmeL1vSnqDSC11MLpkDNjqQ", "token"); // var options = new RestClientOptions("https://api.fcs1cloud.com") // { // //Authenticator = authenticator // }; // var client = new RestClient(options); // //string str = Newtonsoft.Json.JsonConvert.SerializeObject(mm); // //Console.WriteLine("发送MQTT的数据为:" + str); // var request1 = new RestRequest("/api-secure/job/request", Method.Post); // request1.AddHeader("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NGZjYjhjMS1jZDZjLTRkMTktOTc3My05YzkxYmZhNjQ2YWQiLCJpYXQiOjE3NDEyNDczNDAsImV4cCI6MTc0MTI1ODE0MCwic2NoZW1hIjoibnhnXzcwNzA1OTEzX2VhcXoiLCJ1c2VyIjoiYWYwNzg3YTQtMmM2NC00NWRiLWEzMjktNzg0ZGYwZWRjOGZjIiwiZGVmYXVsdF9wcm9wZXJ0eSI6IjA3MTY3M2IzLWQ4OTMtNDQwYi1iM2YwLTY0YTBkOTY0ZWIyOSIsInRvX3JlZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MiLCJpbml0X2Vwb2NoIjoxNzQxMjQ3MzQwLCJtZWRpdW1fY29kZSI6IldFQiJ9.4k2GE08J3MZQIgRKOx5dYmeL1vSnqDSC11MLpkDNjqQ"); // //注意方法是POST // //两个参数名字必须是 topic 和payload ,区分大小写的 // //Console.WriteLine("Topic: " + debug_log_report_mqtt_topic); var list = CSRedisCacheHelper.Get>(CacheKey.Key); Cache.Set>(CacheKey.Key, list); //端点监控 var QQQ = CSRedisCacheHelper.Get>(CacheKey.MonitorEndPointList); Cache.Set>(CacheKey.MonitorEndPointList, QQQ); _ = Start_MqttClient(); System.Timers.Timer timer = new System.Timers.Timer(); timer.Elapsed += Timer_Elapsed; timer.Interval = 10000; timer.Enabled = true; timer.Start(); System.Timers.Timer timer1 = new System.Timers.Timer(); timer1.Elapsed += Timer1_Elapsed; timer1.Interval = 60000; timer1.Enabled = true; timer1.Start(); PubRepository.GetDeviceList(); Console.WriteLine("选择你要监控的网卡"); //string whitchone = Console.ReadLine(); string whitchone = "3"; int.TryParse(whitchone, out CurrentWangKaBianHao); PubRepository.StartMonitor(CurrentWangKaBianHao); Console.WriteLine("正在监控中"); Console.WriteLine("……………………………………………………………………………………………………………………………………………………………………………………"); Console.WriteLine("按回车键就结束"); string? nnn = Console.ReadLine(); PubRepository.StopMonitor(); timer.Dispose(); } private static async void Timer1_Elapsed(object? sender, ElapsedEventArgs e) { try { Console.WriteLine("现在的数量是:"+LogExecute.TotalCountGlobal); long lla= Interlocked.Read(ref LogExecute.TotalCountGlobal); CSRedisCacheHelper.Publish("wireshark-cap-udp-totalcount",lla.ToString()); Interlocked.Exchange(ref LogExecute.TotalCountGlobal, 0); } catch (Exception) { } } private static async Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg) { Console.WriteLine("断线重连了"); await Task.Delay(3000); await Start_MqttClient(); } private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg) { try { var str = arg.ApplicationMessage.Payload; string nnn = Encoding.UTF8.GetString(str); Monitor_Host? vvv = JsonConvert.DeserializeObject(nnn); if (vvv != null) { string Key = string.Format("{0}_{1}", CacheKey.RoomIP_Port_Prefix, vvv.Key_HostNumber); var takeMM = Program.Cache.Get(Key); if (takeMM != null) { string IP = takeMM.WWW_IP; int Port = takeMM.WWW_Port; string KeyHeartBeat = string.Format("{0}_{1}_{2}", CacheKey.RoomIP_Port_Prefix, IP, Port); Program.Cache.Remove(KeyHeartBeat); } } } catch (Exception ex) { Console.WriteLine("MqttClient_ApplicationMessageReceivedAsync: " + ex.Message); } return Task.CompletedTask; } private static async void Timer_Elapsed(object? sender, ElapsedEventArgs e) { try { Console.WriteLine("定时任务"); var list = CSRedisCacheHelper.Get>(CacheKey.Key); Cache.Set>(CacheKey.Key, list); if (list != null && list.Count != 0) { TimeSpan span = DateTime.Now - Program.CurrentTime; if (span.TotalSeconds >= 35) { PubRepository.StopMonitor(); PubRepository.StartMonitor(CurrentWangKaBianHao); } } //端点监控 var QQQ = CSRedisCacheHelper.Get>(CacheKey.MonitorEndPointList); Cache.Set>(CacheKey.MonitorEndPointList, QQQ); var hhh = await mqttClient.PublishStringAsync("/blw/heart/logcap", "heartbeat"); if (hhh.IsSuccess == false) { await Start_MqttClient(); } } catch (Exception ex) { Console.WriteLine("timer_elapsed: " + ex.Message); } } async public static Task Start_MqttClient() { try { var mqttFactory = new MqttClientFactory(); string? ip = ReadConfig.Instance.MQTT_ServerIP; int? port = ReadConfig.Instance.MQTT_ServerPort; string? username = ReadConfig.Instance.MQTT_User; string? pwd = ReadConfig.Instance.MQTT_PassWord; //long lid = Tools.ToUnixTimestampBySeconds(DateTime.Now); string lid = Guid.NewGuid().ToString("N"); string ID = $"logmonitor_{lid}"; mqttClient = mqttFactory.CreateMqttClient(); var mqttClientOptions = new MqttClientOptionsBuilder() .WithClientId(ID) .WithTcpServer(ip, port) .WithCredentials(username, pwd) .WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) .Build(); mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync; mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync; await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); //var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() // .WithTopicFilter("blw/logmonitor/delete/report") // .Build(); //var nnn = new MqttTopicFilterBuilder().WithTopic("blw/logmonitor/delete/report"); var subscribeOptions = new MqttClientSubscribeOptions(); var topicFilter = new MqttTopicFilter { Topic = "blw/logmonitor/delete/report" }; subscribeOptions.TopicFilters.Add(topicFilter); await mqttClient.SubscribeAsync(subscribeOptions, CancellationToken.None); } catch (Exception ex) { Console.WriteLine("Start_MqttClient: " + ex.Message); } } } public class GGH { public List location_uuid { get; set; } public List service_items { get; set; } public string remark { get; set; } public string assigned_to { get; set; } public int user_type { get; set; } } public class GGJ { public string item_uuid { get; set; } public int quantity { get; set; } } }