wxr
2020-10-14 6c8946b21635246355ec41f216426783685a14b2
HDL_ON/DriverLayer/Control_Bus.cs
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using HDL_ON.DAL;
using HDL_ON.DAL.Net;
using HDL_ON.Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Shared;
using Shared.Net;
namespace HDL_ON
{
@@ -39,9 +36,8 @@
                DeviceID = deviceID,
                AddData = gatewayBytes,
            }, sendCount, false);
            MainPage.Log(command.ToString() + "::" + CommonPage.EndPoint.ToString());
        }
        //获取A协议网关IP
        public static byte[] ReadGatewayIPAddress()
        {
            Control control = new Control();
@@ -49,7 +45,47 @@
            return control.UsefulBytes;
        }
        static DAL.Net.TcpListener tcpListener;
        static bool searchLocalGateway = false;
        /// <summary>
        /// 读取局域网网关列表
        /// </summary>
        public static void SearchLocalGateway()
        {
            searchLocalGateway = true;
            var control = new Control();
            control.Send(new Target()
            {
                IPEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(new Shared.Net.NetWiFi().BroadcastIpAddress.ToString()), 6000),
                Command = Command.ReadGateway,
                SubnetID = 255,
                DeviceID = 255,
                AddData = new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) },
            }, 3, true);
        }
        /// <summary>
        /// 验证网关回复信息
        /// </summary>
        public static void VerGateway(byte[] result)
        {
            if(searchLocalGateway)
            {
                if (result != null)
                {
                    var mac0 = CommonPage.byteToHex16(result[5]) + "." + CommonPage.byteToHex16(result[6]) + "." + CommonPage.byteToHex16(result[7]) + "." + CommonPage.byteToHex16(result[8]) + "." + CommonPage.byteToHex16(result[9]) + "." + CommonPage.byteToHex16(result[10]) + "." + CommonPage.byteToHex16(result[11]) + "." + CommonPage.byteToHex16(result[12]);
                    //
                    if (DB_ResidenceData.residenceData.residenceGatewayMAC.Replace(".", "").Replace(":", "").ToUpper() == mac0.Replace(".", "").Replace(":", "").ToUpper())
                    {
                        searchLocalGateway = false;
                    }
                    else
                    {
                        Mqtt_Cloud.StartCloudMqtt();
                    }
                }
            }
        }
        static TcpListener tcpListener;
        /// <summary>
        /// 000E 搜索回复
@@ -67,15 +103,15 @@
                if (tcpListener == null)
                {
                    tcpListener = new DAL.Net.TcpListener();
                    tcpListener = new TcpListener();
                    tcpListener.OpenServer(8586);
                }
                if (!CommonPage.isHttpListenerStart)
                {
                    //数据接收端口没打开,不回复
                    CommonPage.InitHttpListener();
                }
                //if (!CommonPage.isHttpListenerStart)
                //{
                //    //数据接收端口没打开,不回复
                //    CommonPage.InitHttpListener();
                //}
                var sendStr = MainPage.LoginUser.accountString;
                if (usefullBytes.Length == 0)
                {
@@ -84,7 +120,6 @@
                else
                {
                    bool isExit = false;
                    for (int i = 0, len = usefullBytes.Length; i < len; i++)
                    {
                        if (i % 2 == 0)
@@ -97,17 +132,16 @@
                            }
                        }
                    }
                    if (!isExit)
                    {
                        //不存在,代表没收到本机的发送,继续回复
                        SenRemark(sendStr);
                    }
                }
            }
            catch { }
            catch (Exception ex) {
                Console.WriteLine($"回复bus搜索异常 : {ex.Message}");
            }
        }
        /// <summary>
@@ -143,7 +177,6 @@
        {
            if (((System.Net.IPEndPoint)remoteEndPoint).Port == 6688)
            {
                for (int i = 0; i < controlList.Count; i++)
                {
                    try
@@ -255,10 +288,10 @@
                    //    receiveFlag += string.Format("{0}", usefulBytes[0]);
                    //    break;
                    //case Command.ReadDeviceModulACK:
                    //case Command.ReadGatewayACK:
                    //case Command.ReadSecurityStatusACK:
                    //    receiveFlag = string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]);
                    //    break;
                    case Command.ReadGatewayACK:
                        receiveFlag = string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]);
                        break;
                    //case Command.UpdataLightDimmingTheLargestLevelACK:
                    //case Command.UpdataLightDimmingMaximumOrMinimumACK:
                    //case Command.WriteManageWirelessNetACK:
@@ -509,9 +542,24 @@
        void managerSendCount(object o)
        {
            add();
            if (CommonPage.IsRemote)
            if (MainPage.IsRemote)
            {
             
            }
                System.Console.WriteLine("远程发送数据:" + SendFlag);
                Mqtt_Cloud.MqttRemoteSend(Packet.Bytes);
                Packet.FlagDateTime = DateTime.Now;
                Packet.HaveSendCount--;
                //这里是重发两次
                while (Packet.HaveSendCount < 3)
                {
                    if (Packet.FlagDateTime.AddMilliseconds(1000).Ticks <= System.DateTime.Now.Ticks)
                    {
                        Mqtt_Cloud.MqttRemoteSend(Packet.Bytes);
                        System.Console.WriteLine("重发远程发送数据:" + SendFlag);
                        Packet.FlagDateTime = DateTime.Now;
                        Packet.HaveSendCount++;
                    }
                    System.Threading.Thread.Sleep(100);
                }
                allDone.Set();
            }
            else
            {
                //Bus socket无法控制,重启机制
@@ -623,11 +671,11 @@
                //    this.SendFlag += string.Format("{0}", target.AddData[0]);
                //    break;
                //case Command.ReadDeviceModul:
                //case Command.ReadGateway:
                //case Command.ReadSecurityStatus:
                //case Command.ReadHornTargetState:
                //    this.SendFlag = string.Format("{0},{1}", target.AddData[0], target.AddData[1]);
                //    break;
                case Command.ReadGateway:
                    this.SendFlag = string.Format("{0},{1}", target.AddData[0], target.AddData[1]);
                    break;
                //case Command.SetScene:
                //case Command.SetSeries:
                //case Command.SetHotelCurtain:
@@ -801,10 +849,10 @@
        {
            try
            {
                var sendJob = new JObject { { "vendor_code", "HDL" }, { "command", "search" } };
                var sendJob = new JObject {{ "command", "search" } };
                var SearchGateway = JsonConvert.SerializeObject(sendJob);
                var SearchGatewayPayload = Encoding.ASCII.GetBytes(SearchGateway);
                Packet = new Packet(SearchGatewayPayload, CommonPage.GetGatewayIP_EndPoint);
                Packet = new Packet(SearchGatewayPayload, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("224.0.168.188"), 6688));
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount));
                thread.IsBackground = true;
                thread.Start(Packet);