黄学彪
2020-07-13 f3e65daca7978b21b5888f49b1bf35e1a6e5d4fd
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlWifiLogic.cs
@@ -32,18 +32,6 @@
        }
        /// <summary>
        /// 当前Wifi的Ip地址
        /// </summary>
        public string IpAddress
        {
            get
            {
                var temp = new Shared.Net.NetWiFi();
                return temp.GetIPAddress();
            }
        }
        /// <summary>
        /// 当前是否是网关热点
        /// </summary>
        public bool IsGatewayHotspot
@@ -52,7 +40,24 @@
            {
                string myId = this.SSID;
                if (myId.StartsWith("hdlZigbeeGW") == true)
                if (myId != null && myId.StartsWith("hdlZigbeeGW") == true)
                {
                    return true;
                }
                return false;
            }
        }
        /// <summary>
        /// 当前是否是Mini网关热点
        /// </summary>
        public bool IsMiniGatewayHotspot
        {
            get
            {
                string myId = this.SSID;
                if (myId != null && myId.StartsWith("hdlZigbeeGW-") == true)
                {
                    return true;
                }
@@ -68,7 +73,12 @@
            get
            {
#if iOS
                return string.Empty;
                string ssiD = Shared.WiimuUPnP.SSID;
                if (string.IsNullOrEmpty(ssiD) == false && ssiD.StartsWith("\"") && ssiD.EndsWith("\""))
                {
                    ssiD = ssiD.Substring(1, ssiD.Length - 2);
                }
                return ssiD;
#endif
#if Android
                string ssiD = null;
@@ -104,7 +114,6 @@
        /// </summary>
        private Com.Mediatek.Elian.ElianNative hdlWiFi = null;
#endif
        /// <summary>
        /// TCP协议
        /// </summary>
@@ -117,6 +126,40 @@
        /// Ap模式网关返回的秘钥
        /// </summary>
        private string randDesKey = null;
        /// <summary>
        /// 是否已经添加网络变化监听
        /// </summary>
        private bool hadAddListenNetWork = false;
        /// <summary>
        /// 能否访问http
        /// </summary>
        private bool m_CanAccessHttp = true;
        /// <summary>
        /// 上一次访问http的时间
        /// </summary>
        private DateTime oldAccessHttpTime = DateTime.Now;
        /// <summary>
        /// 能否访问http
        /// </summary>
        public bool CanAccessHttp
        {
            set
            {
                m_CanAccessHttp = value;
                oldAccessHttpTime = DateTime.Now;
            }
            get
            {
                //8秒后允许再次访问
                if (m_CanAccessHttp == true || (DateTime.Now - oldAccessHttpTime).TotalMilliseconds > 8 * 1000)
                {
                    oldAccessHttpTime = DateTime.Now;
                    return true;
                }
                return false;
            }
        }
        #endregion
@@ -276,6 +319,97 @@
        #endregion
        #region ■ 监听网络变化_______________________
        /// <summary>
        /// 开启监听网络
        /// </summary>
        public void StartListenNetWork()
        {
            if (hadAddListenNetWork == true)
            {
                return;
            }
            hadAddListenNetWork = true;
#if Android
            //开启监听安卓网络变化
            BaseActivity.NetworkStateChanged += (value) =>
            {
                //网络变化
                this.NetworkStateChanged(value);
            };
#endif
#if iOS
            //开启监听IOS网络变化
            GateWay.Ios.Reachability.ReachabilityChanged += (sender, e) =>
            {
                var internetStatus = GateWay.Ios.Reachability.InternetConnectionStatus();
                if (internetStatus == GateWay.Ios.NetworkStatus.NotReachable)//没有网络连接 0
                {
                    //网络变化
                    this.NetworkStateChanged(0);
                }
                else if (internetStatus == GateWay.Ios.NetworkStatus.ReachableViaCarrierDataNetwork)//3,4G的网络连接 1
                {
                    //网络变化
                    this.NetworkStateChanged(1);
                }
                else if (internetStatus == GateWay.Ios.NetworkStatus.ReachableViaWiFiNetwork) //wifi的网络连接 2
                {
                    //网络变化
                    this.NetworkStateChanged(2);
                }
            };
#endif
        }
        /// <summary>
        /// 监听安卓网络变化
        /// </summary>
        /// <param name="value">0:没有网络 1:4G  2:wifi</param>
        private void NetworkStateChanged(int value)
        {
            //没有网络
            if (value == 0)
            {
                this.CanAccessHttp = false;
                //关闭Socket
                ZigBee.Common.Application.FindGateWaySocket.Stop();
            }
            //WIFI或者4G时
            if (value == 1 || value == 2)
            {
                //允许联网
                this.CanAccessHttp = true;
                //检测是否已经完成账号信息初始化
                if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false
                   && Common.Config.Instance.HomeId != string.Empty)
                {
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        ProgressBar.Show();
                        //重新初始化账号信息
                        UserCenterLogic.ReInitUserAccoutInfo();
                        ProgressBar.Close();
                    }, ShowErrorMode.NO);
                }
                //重新初始化Socket
                ZigBee.Common.Application.FindGateWaySocket.Stop();
                if (value == 2)
                {
                    ZigBee.Common.Application.FindGateWaySocket.Start();
                }
                //断掉本地连接
                HdlGatewayLogic.Current.ClearAllRealGateway();
            }
        }
        #endregion
        #region ■ 一般方法___________________________
#if Android
@@ -286,14 +420,14 @@
        /// <param name="wifiPsw">wifi密码</param>
        /// <param name="p2">我也不知道这个是什么东西</param>
        /// <returns></returns>
        public bool StartSmartConnection(string wifiName, string wifiPsw, string p2 = "1")
        public bool StartSmartConnection(string wifiName, string wifiPsw, string p2 = "")
        {
            if (hdlWiFi == null)
            {
                Com.Mediatek.Elian.ElianNative.LoadLib();
                var result2 = Com.Mediatek.Elian.ElianNative.LoadLib();
                //初始化Wi-Fi配网
                this.hdlWiFi = new Com.Mediatek.Elian.ElianNative();
                hdlWiFi.InitSmartConnection(null, 1, 1);
                var value = hdlWiFi.InitSmartConnection(null, 1, 1);
            }
            //开始Wi-Fi配网
            var result = hdlWiFi.StartSmartConnection(wifiName, wifiPsw, p2);
@@ -308,7 +442,8 @@
            if (hdlWiFi != null)
            {
                //停止Wi-Fi配网
                hdlWiFi.StopSmartConnection();
                var result = hdlWiFi.StopSmartConnection();
                hdlWiFi = null;
            }
        }
#endif
@@ -320,10 +455,10 @@
        /// <param name="wifiPsw">wifi密码</param>
        /// <param name="p2">我也不知道这个是什么东西</param>
        /// <returns></returns>
        public bool StartSmartConnection(string wifiName, string wifiPsw, string p2 = "1")
        public bool StartSmartConnection(string wifiName, string wifiPsw, string p2 = "")
        {
            //初始化Wi-Fi连接
            Com.Mediatek.Elian.ElianNative.InitSmartConnection(null, 1, 1);
            Com.Mediatek.Elian.ElianNative.InitSmartConnection("1", 1, 1);
            //开始Wi-Fi连接
            var result = Com.Mediatek.Elian.ElianNative.StartSmartConnection(wifiName, wifiPsw, p2);
            return true;