gxc
2020-02-28 66a9965c44ecc32a6696abca876ab9d1cd091584
ZigbeeApp/Shared/Phone/ZigBee/Common/Application.cs
@@ -22,6 +22,10 @@
        /// 新发现的网关通知
        /// </summary>
        public static Action<ZigBee.Device.ZbGateway> NewGateWayAction;
        /// <summary>
        /// 上一次的住宅ID
        /// </summary>
        private static string oldHomeID = string.Empty;
        public static void Init()
        {
@@ -35,7 +39,6 @@
            {
                var gateWayList = new List<ZbGateway> { };
                var searchCount = 6;
                var oldHomeID = string.Empty;
                var broadBytes = new byte[44];// byteHomeId[0] ,//H
                broadBytes[0] = 0xfe;
                broadBytes[1] = 0x29;
@@ -50,7 +53,9 @@
                    try
                    {
                        if (string.IsNullOrEmpty(Shared.Common.Config.Instance.HomeId))
                        {
                        {
                            //住宅ID为空只有一种可能就是退出了登录,这里的上一次住宅ID要清空
                            oldHomeID = "?";
                            System.Threading.Thread.Sleep(1000);
                            continue;
                        }
@@ -65,7 +70,7 @@
                            //最后再断开mqtt连接
                            for (int i = 0; i < list.Count; i++)
                            {
                                list[i].DisConnect("1");
                                list[i].DisConnectLocalMqttClient("1");
                            }
                            list.Clear();
                            oldHomeID = Shared.Common.Config.Instance.HomeId;
@@ -111,6 +116,10 @@
                        else
                        {
                            ZbGateway.IsRemote = true;
                            for (int i = 0; i < ZbGateway.GateWayList.Count; i++)
                            {
                                ZbGateway.GateWayList[i].DisConnectLocalMqttClient("1");
                            }
                        }
                        searchCount--;
@@ -208,8 +217,8 @@
                                    var gateWay = ZbGateway.GateWayList.Find(obj => obj.getGatewayBaseInfo != null && obj.getGatewayBaseInfo.gwID == zbGateWay.getGatewayBaseInfo.gwID);
                                    if (gateWay == null)
                                    {
                                        await zbGateWay.StartLocalMqtt(ipAddress);
                                        ZbGateway.GateWayList.Add(zbGateWay);
                                        await zbGateWay.StartLocalMqtt(ipAddress);
                                        NewGateWayAction?.Invoke(zbGateWay);
                                    }
                                    else
@@ -219,11 +228,11 @@
                                        gateWay.GatewayOnlineFlage = true;
                                        if (gateWay.getGatewayBaseInfo.IpAddress != ipAddress)
                                        {
                                            gateWay.DisConnect("2");
                                            await gateWay.DisConnectLocalMqttClient("2");
                                            ZbGateway.GateWayList.Remove(gateWay);
                                            gateWay = zbGateWay;
                                            await zbGateWay.StartLocalMqtt(ipAddress);
                                            ZbGateway.GateWayList.Add(gateWay);
                                            await zbGateWay.StartLocalMqtt(ipAddress);
                                        }
                                        else
                                        {
@@ -270,13 +279,13 @@
                    try
                    {
                        //定时检测远程连接情况
                        await ZbGateway.StartCloudMqtt();
                        await ZbGateway.StartRemoteMqtt();
                        if (!ZbGateway.IsRemote)
                        {
                            System.Threading.Thread.Sleep(500);
                            continue;
                        }
                        var gateWayList =ZbGateway.GateWayList.FindAll(obj => obj.getGatewayBaseInfo.HomeId == Shared.Common.Config.Instance.HomeId);
                        var gateWayList = ZbGateway.GateWayList.FindAll(obj => obj.getGatewayBaseInfo.HomeId == Shared.Common.Config.Instance.HomeId);
                        if (gateWayList.Count == 1)
                        {
@@ -320,6 +329,14 @@
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 重新搜索,注意:调用该方法,则促使全部网关的mqtt全部断开,然后重新搜索(可能会有1秒延迟)
        /// </summary>
        public static void ReSearch()
        {
            //为了那么多少万分之一的几率,这里设置成别的另一类的值
            oldHomeID = "**";
        }
        /// <summary>
        /// 接收处理UDP数据包