|
using Common;
|
using Common.MqttNets;
|
using HDLCloudMonitorSupportCtrlOldUdpGate.Logs;
|
using HDLCloudMonitorSupportCtrlOldUdpGate.Context;
|
using System;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using static System.Net.Mime.MediaTypeNames;
|
|
namespace HDLCloudMonitorSupportCtrlOldUdpGate
|
{
|
public class MockEmqCtrlBusproUdpGateway
|
{
|
private static int CtrlTimerCount = 10;
|
|
public static async Task StartCtrlBusproUdpGateway()
|
{
|
var option = new MqttClientEngineOption
|
{
|
ClientId = Config.ClientId,
|
MqttDomainOrIp = Config.MqttDomainOrIp,
|
MqttPort = 1883,
|
UserName = Config.ConnUsername,
|
Password = Config.ConnPassword,
|
};
|
option.SubscribeList.Add(new SubscribeTopicInfo { Topic = $"/BusGateWayToClient/{Config.MacMark}/Common/#" });
|
|
option.UseApplicationMessageReceivedHandler += async (mqttMessage) =>
|
{
|
await Task.Run(async () =>
|
{
|
try
|
{
|
var resStr = Encoding.UTF8.GetString(mqttMessage.ApplicationMessage.Payload);
|
if (resStr.Contains(GlobalRecordContext.RequestGuid))
|
{
|
DateTime tim = DateTime.Now;
|
GlobalRecordContext.CtrlRecordDto.ComebackMilliseconds= (tim - GlobalRecordContext.ReceiveResponseTime).TotalMilliseconds;
|
|
// Console.WriteLine("控制端-Udp网关接收时间:" + GlobalRecordContext.CtrlRecordDto.ComebackMilliseconds+" ms");
|
|
Console.WriteLine($"控制端收到:{ tim.ToString(Consts.TimeFormat1)}");
|
|
// Console.WriteLine(GlobalRecordContext.CtrlRecordDto);
|
|
MqttLogHp.Save();
|
|
GlobalRecordContext.ResetCtrlRecordDto();
|
}
|
else
|
{
|
//Console.WriteLine($"其他:Topic={ mqttMessage.ApplicationMessage.Topic }");
|
}
|
}
|
catch (Exception ex)
|
{
|
}
|
});
|
};
|
|
await MqttClientEngine.ServerMqttEngine(option);
|
bool isMenu = true;
|
while (true)
|
{
|
try
|
{
|
if (isMenu)
|
{
|
OutputMenu();
|
}
|
String input = Console.ReadLine().ToLower();
|
Console.WriteLine(input);
|
|
switch (input)
|
{
|
case "c":
|
{
|
isMenu = true;
|
Console.Clear();
|
}; break;
|
case "a":
|
{
|
isMenu = true;
|
while (true)
|
{
|
Console.WriteLine();
|
await FactoryCtrl();
|
Thread.Sleep(TimeSpan.FromSeconds(3));
|
}
|
}; break;
|
default:
|
{
|
await FactoryCtrl();
|
isMenu = false;
|
}; break;
|
}
|
}
|
catch
|
{
|
Thread.Sleep(TimeSpan.FromSeconds(1));
|
}
|
}
|
}
|
|
private static void OutputMenu()
|
{
|
Console.WriteLine("----------------------------------------");
|
Console.WriteLine("[ c:清屏 ]");
|
Console.WriteLine("[ enter:执行一次控制 ]");
|
Console.WriteLine("[ a:自动控制(间隔3s) ]");
|
Console.WriteLine("----------------------------------------");
|
Console.WriteLine("请输入命令:");
|
}
|
|
private static async Task FactoryCtrl()
|
{
|
GlobalRecordContext.RequestGuid = Guid.NewGuid().ToString();
|
GlobalRecordContext.CtrlStartTime = DateTime.Now;
|
|
#region 控制端连接服务器获取一端口的信息
|
|
var data = new Data();
|
data.SubnetID = 0xFB;
|
data.DeviceID = 0xFB;
|
data.Command = 0x000E;
|
data.AddData = Encoding.UTF8.GetBytes(GlobalRecordContext.RequestGuid);
|
|
|
Console.WriteLine($" 开始控制:{GlobalRecordContext.CtrlStartTime.ToString(Consts.TimeFormat1)}");
|
string pubTopic = $"/ClientToBusGateWay/{Config.MacMark}/Common/MonitorFilterProcessor";
|
await MqttClientEngine.PublishTopic(pubTopic, null, data.SendBytes);
|
|
#endregion
|
}
|
}
|
}
|