Files
2025-11-20 16:20:37 +08:00

255 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<List<Monitor_Host>>(CacheKey.Key);
Cache.Set<List<Monitor_Host>>(CacheKey.Key, list);
//端点监控
var QQQ = CSRedisCacheHelper.Get<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList);
Cache.Set<List<MonitorEndPoint>>(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<Monitor_Host>(nnn);
if (vvv != null)
{
string Key = string.Format("{0}_{1}", CacheKey.RoomIP_Port_Prefix, vvv.Key_HostNumber);
var takeMM = Program.Cache.Get<MonitorRedis>(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<List<Monitor_Host>>(CacheKey.Key);
Cache.Set<List<Monitor_Host>>(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<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList);
Cache.Set<List<MonitorEndPoint>>(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<string> location_uuid { get; set; }
public List<GGJ> 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; }
}
}