File was renamed from ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/GatewayFirmwareUpdateControl.cs |
| | |
| | | namespace Shared.Phone.UserCenter
|
| | | {
|
| | | /// <summary>
|
| | | /// 固件升级控件
|
| | | /// 网关的升级逻辑
|
| | | /// </summary>
|
| | | public class GatewayFirmwareUpdateControl : RowLayout
|
| | | public class HdlGatewayUpdateLogic
|
| | | {
|
| | | #region ■ 变量声明___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// <para>更新状态变化的事件</para>
|
| | | /// <para>第一个参数为:</para>
|
| | | /// <para>-1:更新异常,后面的值为异常信息的翻译文本</para>
|
| | | /// <para> 0:更新状态正常变化,后面的值为状态变更的文本翻译</para>
|
| | | /// <para> 1:升级成功</para>
|
| | | /// <para> 3:从等待中取消(目前还没有用)</para>
|
| | | /// </summary>
|
| | | public Action<int, string> UpdateStatuChangedEvent = null;
|
| | | /// <summary>
|
| | | /// 进度值事件
|
| | | /// </summary>
|
| | | public Action<decimal> ProgressEvent = null;
|
| | | /// <summary>
|
| | | /// 虚拟设备的固件信息
|
| | | /// </summary>
|
| | |
| | | /// </summary>
|
| | | public FirmwareVersionInfo gatewayFirmware = null;
|
| | | /// <summary>
|
| | | /// 升级按钮(由外部进行赋值)
|
| | | /// </summary>
|
| | | public BottomClickButton btnUpdateButton = null;
|
| | | /// <summary>
|
| | | /// 当前执行状态
|
| | | /// 当前执行状态(出现错误时,它也会变成true)
|
| | | /// </summary>
|
| | | public UpdateStatuMode UpdateStatu = UpdateStatuMode.None;
|
| | | /// <summary>
|
| | |
| | | /// </summary>
|
| | | private UpdateStatuMode oldUpdateStatu = UpdateStatuMode.None;
|
| | | /// <summary>
|
| | | /// 进度控件
|
| | | /// </summary>
|
| | | private FrameLayout frameBar = null;
|
| | | /// <summary>
|
| | | /// 百分比进度
|
| | | /// </summary>
|
| | | private NormalViewControl btnProgress = null;
|
| | | /// <summary>
|
| | | /// 要升级的网关
|
| | | /// </summary>
|
| | | private ZbGateway upDatezbGateway = null;
|
| | | /// <summary>
|
| | | /// 错误信息
|
| | | /// </summary>
|
| | | private string errorMsg = string.Empty;
|
| | |
|
| | | #endregion
|
| | |
|
| | |
| | | /// <param name="i_virtualFirmware">虚拟设备的固件信息</param>
|
| | | /// <param name="i_coordinatorFirmware">协调器新版本的固件信息</param>
|
| | | /// <param name="i_gatewayFirmware">网关新版本的固件信息</param>
|
| | | public GatewayFirmwareUpdateControl(VerticalScrolViewLayout listView, ZbGateway zbGateway,
|
| | | FirmwareVersionInfo i_virtualFirmware, FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware)
|
| | | public HdlGatewayUpdateLogic(ZbGateway zbGateway, FirmwareVersionInfo i_virtualFirmware,
|
| | | FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware)
|
| | | {
|
| | | this.upDatezbGateway = zbGateway;
|
| | | this.virtualFirmware = i_virtualFirmware;
|
| | | this.coordinatorFirmware = i_coordinatorFirmware;
|
| | | this.gatewayFirmware = i_gatewayFirmware;
|
| | |
|
| | | this.Height = ControlCommonResourse.ListViewRowHeight;
|
| | | if (listView != null)
|
| | | {
|
| | | listView.AddChidren(this);
|
| | | //初始化控件
|
| | | this.InitChidrenControl();
|
| | | }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化控件
|
| | | /// </summary>
|
| | | public void InitChidrenControl()
|
| | | {
|
| | | this.RemoveAll();
|
| | |
|
| | | //进度控件(背景色为绿色,会动的那个)
|
| | | this.frameBar = new FrameLayout();
|
| | | this.frameBar.Width = 0;
|
| | | this.frameBar.BackgroundColor = UserCenterColor.Current.Green;
|
| | | this.AddChidren(frameBar);
|
| | |
|
| | | //桌布
|
| | | var frameLayout = new RowLayoutControl();
|
| | | frameLayout.BackgroundColor = UserCenterColor.Current.Transparent;
|
| | | this.AddChidren(frameLayout);
|
| | |
|
| | | //图标
|
| | | var btnIcon = frameLayout.frameTable.AddLeftIcon();
|
| | | HdlGatewayLogic.Current.SetGatewayIcon(btnIcon, this.upDatezbGateway);
|
| | |
|
| | | //指定的设备
|
| | | var btnDevice = frameLayout.frameTable.AddLeftCaption("", 830);
|
| | | //btnDevice.Y = UserCenterLogic.GetControlChidrenYaxis(ControlCommonResourse.ListViewRowHeight, ControlCommonResourse.ListViewRowHalfHeight, UViewAlignment.Top);
|
| | | btnDevice.X = Application.GetRealWidth(200);
|
| | | btnDevice.BackgroundColor = UserCenterColor.Current.Transparent;
|
| | | btnDevice.Text = HdlGatewayLogic.Current.GetGatewayName(upDatezbGateway);
|
| | |
|
| | | //固件信息
|
| | | this.btnProgress = frameLayout.frameTable.AddLeftCaption("", 830);
|
| | | //btnDevice.Y = UserCenterLogic.GetControlChidrenYaxis(ControlCommonResourse.ListViewRowHeight, ControlCommonResourse.ListViewRowHalfHeight, UViewAlignment.Bottom);
|
| | | btnDevice.X = Application.GetRealWidth(200);
|
| | | btnProgress.BackgroundColor = UserCenterColor.Current.Transparent;
|
| | | if (this.gatewayFirmware != null)
|
| | | {
|
| | | //版本
|
| | | btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.gatewayFirmware.FirmwareVersion);
|
| | | }
|
| | | else if (this.coordinatorFirmware != null)
|
| | | {
|
| | | //版本
|
| | | btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.coordinatorFirmware.FirmwareVersion);
|
| | | }
|
| | | else if (this.virtualFirmware != null)
|
| | | {
|
| | | //版本
|
| | | btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.virtualFirmware.FirmwareVersion);
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | /// </summary>
|
| | | public void StartUpdateReady()
|
| | | {
|
| | | if (btnUpdateButton.CanClick == false)
|
| | | {
|
| | | return;
|
| | | }
|
| | | if (this.UpdateStatu == UpdateStatuMode.Wait)
|
| | | {
|
| | | //如果是等待模式,再次点击时,移除列表
|
| | |
| | | {
|
| | | FirmwareUpdateResourse.dicGatewayUpdateList.Remove(gwId);
|
| | | }
|
| | | //升级
|
| | | btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUp;
|
| | | btnUpdateButton.SetNotClickStatu();
|
| | | this.UpdateStatu = UpdateStatuMode.None;
|
| | | //取消
|
| | | this.UpdateStatuChangedEvent?.Invoke(3, "");
|
| | | return;
|
| | | }
|
| | | //如果它有状态,则表示之前它被什么错误中断了
|
| | |
| | |
|
| | | //进入等待模式
|
| | | this.UpdateStatu = UpdateStatuMode.Wait;
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uWaitting;
|
| | | this.btnUpdateButton.SetClickStatu();
|
| | | string gwId2 = HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway);
|
| | | FirmwareUpdateResourse.dicGatewayUpdateList[gwId2] = this;
|
| | | //等待中…
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uWaitting));
|
| | |
|
| | | //执行下一个可更新的固件的更新操作
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | |
| | | /// </summary>
|
| | | public void DoStartUpdate()
|
| | | {
|
| | | //清空错误信息
|
| | | this.errorMsg = string.Empty;
|
| | | //状态变更
|
| | | this.IsFinishUpdate = false;
|
| | | this.UpdateStatu = UpdateStatuMode.Action;
|
| | | //开始执行操作的时候,按键不能再点击
|
| | | this.btnUpdateButton.CanClick = false;
|
| | | //设置拥有网关正在升级的标识
|
| | | HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(true);
|
| | | //根据状态执行操作
|
| | |
| | | }
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.VirtualDownLoad;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
|
| | | });
|
| | |
|
| | | //虚拟驱动固件下载中
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading);
|
| | | this.SetProgressValue(0, 100, msg);
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading));
|
| | |
|
| | | //下载虚拟驱动文件的进度
|
| | | this.upDatezbGateway.ReportAction += this.DownLoadVirtualFileProgress;
|
| | |
| | | var result = await this.upDatezbGateway.DownloadFileAsync(this.virtualFirmware.DistributedMark, this.virtualFirmware.Name);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩下载虚拟驱动文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorResponData != null && result.errorResponData.Error == 2)
|
| | | {
|
| | | //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
|
| | |
| | | return;
|
| | | }
|
| | | var tempZb = (ZbGateway)objValue;
|
| | | System.Console.WriteLine("★★★下载驱动" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
|
| | | if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
|
| | | {
|
| | | //不是自己的网关推送,则不处理
|
| | |
| | | var responData = tempZb.downloadFileProgressResponData;
|
| | |
|
| | | //虚拟驱动固件下载中
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading);
|
| | | this.SetProgressValue(responData.DownloadPercent, 100, msg);
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading));
|
| | |
|
| | | if (responData.Status == 2)
|
| | | {
|
| | |
| | | this.DownLoadTimeOutRefresh();
|
| | | //开启网关升级虚拟进度线程
|
| | | this.StartUpdateVirtualThread();
|
| | | //升级中
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uLevelUping));
|
| | |
|
| | | //如果虚拟驱动不需要升级,则直接跳转下一步
|
| | | if (this.virtualFirmware == null)
|
| | |
| | | }
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.VirtualUpdateReady;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
|
| | | });
|
| | |
|
| | | //升级虚拟驱动的进度
|
| | | this.upDatezbGateway.ReportAction += this.UpdateVirtualProgress;
|
| | |
|
| | |
| | | var result = await this.upDatezbGateway.VirtualDriveUpgradeAsync(this.virtualFirmware.Name, this.virtualFirmware.VirtualCode);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩虚拟驱动升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorResponData != null && result.errorResponData.Error == 2)
|
| | | {
|
| | | //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
|
| | |
| | | }
|
| | |
|
| | | //虚拟驱动升级失败
|
| | | this.errorMsg = Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail);
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail));
|
| | |
|
| | | //显示重新安装
|
| | | this.ShowReSetupMsg();
|
| | |
| | | return;
|
| | | }
|
| | | var tempZb = (ZbGateway)objValue;
|
| | | System.Console.WriteLine("★★★升级驱动" + tempZb.CurrentGateWayId + " " + tempZb.virtualDriveUpgradeResponData.Flag + " " + tempZb.virtualDriveUpgradeResponData.Percent);
|
| | | if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
|
| | | {
|
| | | //不是自己的网关推送,则不处理
|
| | |
| | | if (responData.Flag != 0 && responData.Flag != 2)
|
| | | {
|
| | | //虚拟驱动升级失败
|
| | | this.errorMsg = Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail);
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail));
|
| | |
|
| | | //显示重新安装
|
| | | this.ShowReSetupMsg();
|
| | |
| | | this.DownLoadTimeOutRefresh();
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.CoordinatorDownLoad;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
|
| | | });
|
| | |
|
| | | //等个1秒
|
| | | await Task.Delay(1000);
|
| | |
|
| | | //协调器固件下载中
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading);
|
| | | this.SetProgressValue(0, 100, msg);
|
| | | this.UpdateStatuChangedEvent(0, Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading));
|
| | |
|
| | | //下载协调器文件的进度
|
| | | this.upDatezbGateway.ReportAction += this.DownLoadCoordinatorFileProgress;
|
| | |
| | | var result = await this.upDatezbGateway.DownloadFileAsync(this.coordinatorFirmware.DistributedMark, this.coordinatorFirmware.Name);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩下载协调器文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorResponData != null && result.errorResponData.Error == 2)
|
| | | {
|
| | | //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
|
| | |
| | | return;
|
| | | }
|
| | | var tempZb = (ZbGateway)objValue;
|
| | | System.Console.WriteLine("★★★下载协调器" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
|
| | | if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
|
| | | {
|
| | | //不是自己的网关推送,则不处理
|
| | |
| | | var responData = tempZb.downloadFileProgressResponData;
|
| | |
|
| | | //协调器固件下载中
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading);
|
| | | this.SetProgressValue(responData.DownloadPercent, 100, msg);
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading));
|
| | |
|
| | | if (responData.Status == 2)
|
| | | {
|
| | |
| | | }
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.CoordinatorUpdateReady;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
|
| | | });
|
| | |
|
| | | //升级协调器的进度
|
| | | this.upDatezbGateway.ReportAction += this.UpdateCoordinatorProgress;
|
| | |
|
| | |
| | | var result = await this.upDatezbGateway.UpgradeNVAsync(this.coordinatorFirmware.Name);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩协调器升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorResponData != null && result.errorResponData.Error == 2)
|
| | | {
|
| | | //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
|
| | |
| | | }
|
| | |
|
| | | //协调器升级失败
|
| | | this.errorMsg = Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail);
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail));
|
| | |
|
| | | //显示重新安装
|
| | | this.ShowReSetupMsg();
|
| | |
| | | }
|
| | |
|
| | | var tempZb = (ZbGateway)objValue;
|
| | | System.Console.WriteLine("★★★升级协调器" + tempZb.CurrentGateWayId + " " + tempZb.zbGwOperationUpgradeData.Flag + " " + tempZb.zbGwOperationUpgradeData.Percent);
|
| | | if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
|
| | | {
|
| | | //不是自己的网关推送,则不处理
|
| | |
| | | if (responData.Flag != 0 && responData.Flag != 2)
|
| | | {
|
| | | //协调器升级失败
|
| | | this.errorMsg = Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail);
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail));
|
| | |
|
| | | //显示重新安装
|
| | | this.ShowReSetupMsg();
|
| | |
| | | return;
|
| | | }
|
| | | this.UpdateStatu = UpdateStatuMode.GatewayDownLoad;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
|
| | | });
|
| | |
|
| | | //刷新超时时间
|
| | | this.DownLoadTimeOutRefresh();
|
| | |
| | | await Task.Delay(1000);
|
| | |
|
| | | //网关固件下载中
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading);
|
| | | this.SetProgressValue(0, 100, msg);
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading));
|
| | |
|
| | | //下载网关文件的进度
|
| | | this.upDatezbGateway.ReportAction += this.DownLoadGatewayFileProgress;
|
| | |
| | | var result = await this.upDatezbGateway.DownloadFileAsync(this.gatewayFirmware.DistributedMark, this.gatewayFirmware.Name);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩下载网关文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorResponData != null && result.errorResponData.Error == 2)
|
| | | {
|
| | | //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
|
| | | return;
|
| | | }
|
| | | //网关固件资源下载失败
|
| | | this.ShowErrorMsg(Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoadFail));
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoadFail));
|
| | |
|
| | | //显示重新下载模式
|
| | | this.ShowReDownLoadMode();
|
| | |
| | | return;
|
| | | }
|
| | | var tempZb = (ZbGateway)objValue;
|
| | | System.Console.WriteLine("★★★下载网关" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
|
| | | if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
|
| | | {
|
| | | //不是自己的网关推送,则不处理
|
| | |
| | |
|
| | | //设置进度
|
| | | var responData = tempZb.downloadFileProgressResponData;
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading);
|
| | | this.SetProgressValue(responData.DownloadPercent, 100, msg);
|
| | | this.SetProgressValue(responData.DownloadPercent, 100);
|
| | |
|
| | | if (responData.Status == 2)
|
| | | {
|
| | | //网关固件资源下载失败
|
| | |
| | | else if (responData.Status == 0)
|
| | | {
|
| | | this.upDatezbGateway.ReportAction -= this.DownLoadGatewayFileProgress;
|
| | | if (this.Parent == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | //执行虚拟驱动升级程序
|
| | | this.DoUpdateVirtual();
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.GatewayUpdateReady;
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
|
| | | });
|
| | |
|
| | | //网关升级
|
| | | var result = await this.upDatezbGateway.LinuxUpgradeAsync(this.gatewayFirmware.Name);
|
| | | if (string.IsNullOrEmpty(result.errorMessageBase) == false)
|
| | | {
|
| | | System.Console.WriteLine("✩✩网关升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
|
| | | if (result.errorMessageBase.Contains("回复超时") == true)
|
| | | {
|
| | | //网关升级的时候,有可能它不再回什么信息
|
| | |
| | | {
|
| | | //状态变更
|
| | | this.IsFinishUpdate = true;
|
| | | //让别的线程先退出
|
| | | System.Threading.Thread.Sleep(2000);
|
| | |
|
| | | //设置没有网关正在升级的标识
|
| | | HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
|
| | |
|
| | | this.UpdateStatu = UpdateStatuMode.UpdateSuccess;
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | | //网关升级成功!
|
| | | this.SetProgressValue(100, 100, Language.StringByID(R.MyInternationalizationString.uGatewayUpdateSuccess));
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | if (UserCenterResourse.DicActionForm.ContainsKey("GatewayFirmwareInfoForm") == true)
|
| | | {
|
| | | //刷新设备信息界面
|
| | | ((GatewayManage.GatewayFirmwareInfoForm)UserCenterResourse.DicActionForm["GatewayFirmwareInfoForm"]).ShowForm(upDatezbGateway);
|
| | | }
|
| | | this.UpdateStatu = UpdateStatuMode.UpdateSuccess;
|
| | |
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | |
|
| | | //完成
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uFinish;
|
| | | this.btnUpdateButton.CanClick = true;
|
| | | this.btnUpdateButton.SetNotClickStatu();
|
| | |
|
| | | });
|
| | | this.UpdateStatuChangedEvent?.Invoke(1, "");
|
| | | });
|
| | | }
|
| | |
|
| | |
| | | //设置没有网关正在升级的标识
|
| | | HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | //重新升级
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uReLevelUp;
|
| | | this.btnUpdateButton.CanClick = true;
|
| | | this.btnUpdateButton.SetNotClickStatu();
|
| | | //清空进度条
|
| | | this.frameBar.Width = 0;
|
| | |
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | | });
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | //设置没有网关正在升级的标识
|
| | | HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnUpdateButton.TextID = R.MyInternationalizationString.uReDownLoad;
|
| | | this.btnUpdateButton.CanClick = true;
|
| | | this.btnUpdateButton.SetNotClickStatu();
|
| | | //清空进度条
|
| | | this.frameBar.Width = 0;
|
| | |
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | | });
|
| | | //执行下一个升级
|
| | | HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | /// </summary>
|
| | | /// <param name="value">进度值</param>
|
| | | /// <param name="maxValue">最大值</param>
|
| | | /// <param name="appendText">追加信息</param>
|
| | | private void SetProgressValue(decimal value, decimal maxValue, string appendText = "")
|
| | | private void SetProgressValue(decimal value, decimal maxValue)
|
| | | {
|
| | | if (value > maxValue)
|
| | | {
|
| | |
| | | return;
|
| | | }
|
| | | decimal result = value / maxValue;
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | //百分比数,取整数部分
|
| | | int percent = (int)(result * 100);
|
| | | int width = (int)(result * this.Width);
|
| | |
|
| | | if (appendText != string.Empty)
|
| | | {
|
| | | this.btnProgress.Text = percent + "% " + appendText;
|
| | | }
|
| | | else
|
| | | {
|
| | | this.btnProgress.Text = percent + "%";
|
| | | }
|
| | | this.frameBar.Width = width;
|
| | | });
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 设定进度值
|
| | | /// </summary>
|
| | | /// <param name="value">进度值</param>
|
| | | private void SetProgressValue(string value)
|
| | | {
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | this.btnProgress.Text = value;
|
| | | });
|
| | | this.ProgressEvent?.Invoke(value);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | /// <param name="value"></param>
|
| | | private void ShowErrorMsg(string value)
|
| | | {
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | //设置错误信息
|
| | | this.btnProgress.Text = value;
|
| | | //清空进度条
|
| | | this.frameBar.Width = 0;
|
| | | });
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, value);
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | if (updateTimeOutCount == 0)
|
| | | {
|
| | | //响应超时,升级失败
|
| | | this.errorMsg = Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndUpdateFail);
|
| | | this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndUpdateFail));
|
| | | //从头再来
|
| | | this.UpdateStatu = UpdateStatuMode.GatewayDownLoadFail;
|
| | | //显示重新下载模式
|
| | |
| | |
|
| | | //剩余时间
|
| | | int remainingTime = timeCount - nowTimeCount;
|
| | | if (remainingTime == -1)
|
| | | if (remainingTime <= -1)
|
| | | {
|
| | | //时间用完了,直接显示成功
|
| | | this.IsFinishUpdate = true;
|
| | | break;
|
| | | }
|
| | | //设置进度值
|
| | | this.SetProgressValue(nowTimeCount, timeCount, msg + remainingTime + "s");
|
| | | }
|
| | | //升级失败
|
| | | if (this.errorMsg != string.Empty)
|
| | | {
|
| | | //设置错误信息
|
| | | this.ShowErrorMsg(this.errorMsg);
|
| | | this.UpdateStatuChangedEvent?.Invoke(0, msg + remainingTime + "s");
|
| | | this.SetProgressValue(nowTimeCount, timeCount);
|
| | | }
|
| | | });
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 释放缓存___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 释放缓存
|
| | | /// </summary>
|
| | | public void Dispose()
|
| | | {
|
| | | this.ProgressEvent = null;
|
| | | this.UpdateStatuChangedEvent = null;
|
| | | }
|
| | |
|
| | | #endregion
|
| | | }
|
| | | }
|