黄学彪
2020-07-06 f23ad1b3f9f6193f35f72104d690b21dc67d5c1f
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -241,6 +241,9 @@
            {
                return false;
            }
            //添加网关的话,强制主页刷新
            UserView.UserPage.Instance.RefreshForm = true;
            return true;
        }
@@ -324,7 +327,7 @@
            }
            //更新云端数据库
            int flage1 = await this.SetGatewayIdToDataBase(zbGateway);
            int flage1 = this.SetGatewayIdToDataBase(zbGateway);
            //异常也不鸟它,0是特殊含义
            if (flage1 == 0)
            {
@@ -396,7 +399,7 @@
        /// </summary>
        /// <param name="zbGateway">网关对象</param>
        /// <returns></returns>
        private async Task<int> SetGatewayIdToDataBase(ZbGateway zbGateway)
        private int SetGatewayIdToDataBase(ZbGateway zbGateway)
        {
            //调用接口,绑定网关(即使失败,也返回true往下走)
            var bindGateway = new BindGatewayPra();
@@ -404,10 +407,8 @@
            //获取控制主人账号的Token
            bindGateway.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
            //不显示已经被绑定过的信息,NotSetAgain:假如断网时,不二次发送
            List<string> listNotShow = new List<string>() { "NotSetAgain" };
            var result = await UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, listNotShow);
            if (result == "Error" || result == "ErrorEx")
            var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway);
            if (result == "Error")
            {
                return -1;
            }
@@ -479,7 +480,7 @@
            }
            //更新云端数据库
            int flage1 = await this.SetGatewayIdToDataBase(zbGateway);
            int flage1 = this.SetGatewayIdToDataBase(zbGateway);
            //异常也不鸟它,0是特殊含义
            if (flage1 == 0)
            {
@@ -507,7 +508,19 @@
            await Task.Delay(8000);
            //获取网关的信息
            var result = await zbGateway.GetZbGwInfoAsync();
            ZbGatewayData.GetGwAllData result = null;
            int count = 5;
            while (count >= 0)
            {
                result = await zbGateway.GetZbGwInfoAsync();
                if (result != null && result.getGwData != null)
                {
                    break;
                }
                count--;
                //最多再等20秒
                await Task.Delay(4000);
            }
            //检测网关返回的共通错误状态码
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
            if (error != null)
@@ -547,6 +560,10 @@
                //添加备份
                HdlAutoBackupLogic.AddOrEditorFile(this.dicGateway[gwID].FilePath);
            }
            //添加网关的话,强制主页刷新
            UserView.UserPage.Instance.RefreshForm = true;
            return 1;
        }
@@ -677,7 +694,7 @@
            if (getGatewayInfo == true)
            {
                //获取网关信息
                var info = await this.GetGatewayNewInfoAsync(realWay);
                var info = this.GetGatewayInfo(realWay);
                if (info == null)
                {
                    //关闭进度条
@@ -746,7 +763,7 @@
            }
            //删除云端的网关
            await this.DeleteDataBaseGateway(zbGatewayID);
            this.DeleteDataBaseGateway(zbGatewayID);
            //删除网关文件
            this.DeleteGatewayFile(zbGatewayID);
@@ -1388,9 +1405,9 @@
                else
                {
                    //给一个线程去获取它的镜像类型
                    HdlThreadLogic.Current.RunThread(async () =>
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                        var result = this.GetGatewayInfo(zbGateway, ShowErrorMode.NO);
                        if (result != null)
                        {
                            //将网关的数据设置到本地缓存中
@@ -1430,32 +1447,13 @@
        /// <param name="zbGateway"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        public async Task<ZbGatewayData.GetGwData> GetGatewayNewInfoAsync(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
        public ZbGatewayData.GetGwData GetGatewayInfo(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
        {
            ZbGateway realWay = null;
            if (this.GetRealGateway(ref realWay, zbGateway) == false)
            {
                if (mode == ShowErrorMode.YES)
                {
                    string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
                    this.ShowTipMsg(msg);
                }
                return null;
            }
            //获取网关版本信息
            var imageTypeResult = await realWay.GetZbGwInfoAsync();
            //检测网关返回的共通错误状态码
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(imageTypeResult);
            if (error != null)
            {
                if (mode == ShowErrorMode.YES)
                {
                    this.ShowTipMsg(error);
                }
                return null;
            }
            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 95 } };
            var result = this.SendJobjectDataToGateway(zbGateway, "GetZbGwInfo", jObject.ToString(), "GetZbGwInfo_Respon");
            if (imageTypeResult == null || imageTypeResult.getGwData == null)
            if (result.ErrorMsgDiv != 1)
            {
                if (mode == ShowErrorMode.YES)
                {
@@ -1467,42 +1465,19 @@
                }
                return null;
            }
            var getGwInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGatewayData.GetGwData>(result.ReceiptData);
            string gwID = zbGateway.GwId;
            if (this.dicGateway.ContainsKey(gwID) == true)
            {
                //刷新缓存
                ZbGateway localWay = this.dicGateway[gwID];
                //将网关的数据设置到本地缓存中
                this.SetGatewayDataToLocalMemmory(localWay, imageTypeResult.getGwData);
                this.SetGatewayDataToLocalMemmory(localWay, getGwInfo);
            }
            //顺便这个变量也设置一下
            this.SetGatewayDataToLocalMemmory(zbGateway, imageTypeResult.getGwData, false);
            this.SetGatewayDataToLocalMemmory(zbGateway, getGwInfo, false);
            return imageTypeResult.getGwData;
        }
        /// <summary>
        /// 获取网关信息,非异步,会等待(版本信息,镜像类型,基本信息等。只刷新本地网关的缓存)
        /// </summary>
        /// <param name="zbGateway"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        public ZbGatewayData.GetGwData GetGatewayNewInfo(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
        {
            bool bolBreak = false;
            ZbGatewayData.GetGwData result = null;
            HdlThreadLogic.Current.RunThread(async () =>
            {
                result = await this.GetGatewayNewInfoAsync(zbGateway, mode);
                bolBreak = true;
            });
            while (bolBreak == false)
            {
                System.Threading.Thread.Sleep(500);
            }
            return result;
            return getGwInfo;
        }
        /// <summary>
@@ -1609,10 +1584,10 @@
        /// <param name="zbGateway">网关对象</param>
        /// <param name="mode">错误时,是否显示错误</param>
        /// <returns></returns>
        public async Task<List<FirmwareVersionInfo>> GetGatewayAllNewVersion(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
        public List<FirmwareVersionInfo> GetGatewayAllNewVersion(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
        {
            //获取网关版本信息
            var result = await HdlGatewayLogic.Current.GetGatewayNewInfoAsync(zbGateway, mode);
            var result = this.GetGatewayInfo(zbGateway, mode);
            if (result == null)
            {
                return null;
@@ -1629,10 +1604,14 @@
                localWay.LinuxHardVersion.ToString(),
                localWay.LinuxImageType.ToString());
            //添加协调器的升级固件(成不成功都无所谓)
            flage = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Coordinator,
                localWay.CoordinatorHardVersion.ToString(),
                localWay.CoordinatorImageId.ToString());
            //添加协调器的升级固件(成不成功都无所谓) 必须能够联网才行
            if (flage == 1)
            {
                //没网的时候不再处理
                HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Coordinator,
                    localWay.CoordinatorHardVersion.ToString(),
                    localWay.CoordinatorImageId.ToString());
            }
            //网关的版本
            var gatewayFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.Linux,
@@ -1656,10 +1635,13 @@
                //虚拟驱动号
                foreach (var data in localWay.DriveCodeList)
                {
                    //添加虚拟驱动的升级固件(成不成功都无所谓)
                    flage = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
                        data.DriveHwVersion.ToString(),
                        data.DriveImageType.ToString());
                    //添加虚拟驱动的升级固件(成不成功都无所谓) 必须能够联网才行
                    if (flage == 1)
                    {
                        HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
                           data.DriveHwVersion.ToString(),
                           data.DriveImageType.ToString());
                    }
                    //虚拟驱动
                    var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice,
@@ -1753,9 +1735,9 @@
                else
                {
                    //给一个线程去获取它的镜像类型
                    HdlThreadLogic.Current.RunThread(async () =>
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                        var result = this.GetGatewayInfo(zbGateway, ShowErrorMode.NO);
                        if (result != null)
                        {
                            //将网关的数据设置到本地缓存中
@@ -1791,9 +1773,9 @@
                else
                {
                    //给一个线程去获取它的镜像类型
                    HdlThreadLogic.Current.RunThread(async () =>
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                        var result = this.GetGatewayInfo(zbGateway, ShowErrorMode.NO);
                        if (result != null)
                        {
                            //将网关的数据设置到本地缓存中
@@ -1885,9 +1867,9 @@
            }
            bool canBreak = false;
            HdlThreadLogic.Current.RunThread(async () =>
            HdlThreadLogic.Current.RunThread(() =>
            {
                List<string> list = new List<string>() { "NotSetAgain", "NotCheck" };
                List<string> list = new List<string>() { "NotCheck" };
                //设置访问接口的参数
                var pra = new GetGatewayPra();
@@ -1896,7 +1878,7 @@
                //获取控制主人账号的Token
                pra.ReqDto.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                var result = await UserCenterLogic.GetResponseDataByRequestHttps("App/GetSingleHomeGatewayPagger", true, pra, list);
                var result = UserCenterLogic.GetResponseDataByRequestHttps("App/GetSingleHomeGatewayPagger", true, pra, list);
                if (string.IsNullOrEmpty(result) == true)
                {
                    canBreak = true;
@@ -2019,16 +2001,16 @@
        /// 解绑云端绑定的网关
        /// </summary>
        /// <param name="strWayId"></param>
        public async Task<bool> DeleteDataBaseGateway(string strWayId)
        public bool DeleteDataBaseGateway(string strWayId)
        {
            var Pra = new DeleteGatewayPra();
            Pra.BindGateways.Add(strWayId);
            //获取控制主人账号的Token
            Pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
            List<string> listNotShowError = new List<string>() { "NoExist", "NoBind", "NoRecord", "NotSetAgain" };
            List<string> listNotShowError = new List<string>() { "NoExist", "NoBind", "NoRecord" };
            bool result = await UserCenterLogic.GetResultStatuByRequestHttps("App/ReleaseGatewayToHome", true, Pra, listNotShowError);
            bool result = UserCenterLogic.GetResultStatuByRequestHttps("App/ReleaseGatewayToHome", true, Pra, listNotShowError);
            if (result == false)
            {
                return false;
@@ -2063,7 +2045,7 @@
        /// </summary>
        public void ResetComandToBindBackupGateway()
        {
            HdlThreadLogic.Current.RunThread(async () =>
            HdlThreadLogic.Current.RunThread(() =>
            {
                var fileData = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.BackupGatewayIdFile);
                if (fileData == null)
@@ -2074,8 +2056,6 @@
                var listTempId = new List<string>();
                listTempId.AddRange(this.listBackupGwId);
                //不显示已经被绑定过的信息,NotSetAgain:假如断网时,不二次发送
                List<string> listNotShow = new List<string>() { "NotSetAgain" };
                //调用接口,绑定网关
                var bindGateway = new BindGatewayPra();
                //获取控制主人账号的Token
@@ -2085,12 +2065,12 @@
                {
                    bindGateway.BindGateways.Clear();
                    bindGateway.BindGateways.Add(gwId);
                    var result = await UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, listNotShow);
                    var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway);
                    if (result == "Success")
                    {
                        this.listBackupGwId.Remove(gwId);
                    }
                    if (result == "Error" || result == "ErrorEx")
                    if (result == "Error")
                    {
                        break;
                    }