黄学彪
2020-09-18 c7df85937f73fb347ee0b19e9c052d2d00a6df6c
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlWifiLogic.cs
@@ -151,8 +151,8 @@
            }
            get
            {
                //10秒后允许再次访问
                if (m_CanAccessHttp == true || (DateTime.Now - oldAccessHttpTime).TotalMilliseconds > 10 * 1000)
                //8秒后允许再次访问
                if (m_CanAccessHttp == true || (DateTime.Now - oldAccessHttpTime).TotalMilliseconds > 8 * 1000)
                {
                    oldAccessHttpTime = DateTime.Now;
                    return true;
@@ -160,6 +160,14 @@
                return false;
            }
        }
        /// <summary>
        /// 变更网络时的事件
        /// </summary>
        private string changedNetworkTime = string.Empty;
        /// <summary>
        /// 当前 wifi 的
        /// </summary>
        private string oldSsid = string.Empty;
        #endregion
@@ -177,6 +185,7 @@
                tcpClient = new System.Net.Sockets.TcpClient();
                tcpClient.Connect("192.168.8.1", 5000);
                networkStream = tcpClient.GetStream();
                networkStream.ReadTimeout = 1000;
                //加密数据
                string sendDataMsg = "hdl1985.";
                string DefaultdesKey = "hdl1985.";
@@ -368,23 +377,111 @@
        /// <summary>
        /// 监听安卓网络变化
        /// </summary>
        /// <param name="value"></param>
        private void NetworkStateChanged(int value)
        /// <param name="value">0:没有网络 1:4G  2:wifi</param>
        public void NetworkStateChanged(int value)
        {
            if (Common.Config.Instance.HomeId == string.Empty)
            {
                //在登录界面不处理
                return;
            }
#if iOS
            var nowSsid = this.SSID;
            if (this.oldSsid == nowSsid)
            {
                //如果当前 wifi 的名字一样,则不处理
                ZigBee.Common.Application.FindGateWaySocket.Start();
                return;
            }
            this.oldSsid = nowSsid;
#endif
            //没有网络
            if (value == 0)
            {
                this.CanAccessHttp = false;
                //关闭Socket
                ZigBee.Common.Application.FindGateWaySocket.Stop();
            }
            //可以叫4G
            else if (value == 1)
            //WIFI或者4G时
            if (value == 1 || value == 2)
            {
                //允许联网
                this.CanAccessHttp = true;
            }
            //WIFI
            else if (value == 2)
            {
                this.CanAccessHttp = true;
                this.changedNetworkTime = DateTime.Now.ToString("yyyyMMdd HH.mm.ss");
                //当前执行此线程的时间
                string thisThreadTime = this.changedNetworkTime;
                HdlThreadLogic.Current.RunThread(() =>
                {
                    //不管如何,都要显示转圈
                    ProgressBar.Show();
                    //检测是否已经完成账号信息初始化
                    if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false
                       && Common.Config.Instance.HomeId != string.Empty)
                    {
                        //重新初始化账号信息
                        UserCenterLogic.ReInitUserAccoutInfo();
                        //因为上面这个东西耗时蛮久的,所以处理完之后进行判断
                        if (thisThreadTime != this.changedNetworkTime)
                        {
                            //在处理的过程中,切换了网络,把下面的处理交给另外的线程
                            return;
                        }
                    }
                    //重新初始化Socket
                    ZigBee.Common.Application.FindGateWaySocket.Stop();
                    System.Threading.Thread.Sleep(100);
                    //断掉本地连接
                    HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
                    //断掉远程
                    ZigBee.Device.ZbGateway.DisConnectRemoteMqttClient();
                    //如果是wifi
                    if (value == 2)
                    {
                        ZigBee.Common.Application.FindGateWaySocket.Start();
                        //借用一下这个变量(检测能否广播到网关)
                        UserCenterResourse.DicReceiveGatewayTest = new Dictionary<string, ZigBee.Device.ZbGateway>();
                        UserCenterResourse.HideOption.CheckCanReceiveGateway = 1;
                        //固定等个3秒吧
                        System.Threading.Thread.Sleep(2500);
                        if (thisThreadTime != this.changedNetworkTime)
                        {
                            //变更了网络,交由其他线程处理
                            return;
                        }
                        UserCenterResourse.HideOption.CheckCanReceiveGateway = 0;
                        System.Threading.Thread.Sleep(500);
                        bool canReceiveGw = false;
                        foreach (var gateway in UserCenterResourse.DicReceiveGatewayTest.Values)
                        {
                            if (gateway.HomeId == Common.Config.Instance.Home.Id)
                            {
                                //能够搜索得到网关
                                canReceiveGw = true;
                                break;
                            }
                        }
                        UserCenterResourse.DicReceiveGatewayTest = null;
                        //设置远程连接的初始值
                        ZigBee.Device.ZbGateway.IsRemote = canReceiveGw == false;
                        if (canReceiveGw == false)
                        {
                            //如果是远程的话,追加等待时间(总共5秒)
                            System.Threading.Thread.Sleep(2000);
                        }
                    }
                    else if (value == 1)
                    {
                        //如果是4G的话,直接等待
                        System.Threading.Thread.Sleep(4500);
                    }
                    ProgressBar.Close();
                }, ShowErrorMode.NO);
            }
        }