using Shared.Common; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter.HdlBackup { /// /// 网关备份的界面 /// public class HdlGatewayBackUpForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 列表控件 /// private VerticalScrolViewLayout listView = null; /// /// 网关对象(这个是真实物理网关对象) /// private ZbGateway zbRealGateway = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// public void ShowForm(ZbGateway i_zbGateway) { this.zbRealGateway = i_zbGateway; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uBackupAndRecover)); //右上添加按钮 var btnTopIcon = new MostRightIconControl(69, 69); btnTopIcon.UnSelectedImagePath = "Item/Add.png"; topFrameLayout.AddChidren(btnTopIcon); btnTopIcon.InitControl(); btnTopIcon.ButtonClickEvent += (sender, e) => { //显示添加备考名画面 //this.ShowAddBackupForm(); }; //初始化中部控件 //this.InitMiddleFrame(); } ///// ///// 初始化中部控件 ///// //private void InitMiddleFrame() //{ // //清空bodyFrame // this.ClearBodyFrame(); // listView = new VerticalScrolViewLayout(); // listView.Height = bodyFrameLayout.Height; // bodyFrameLayout.AddChidren(listView); // HdlThreadLogic.Current.Run(() => // { // //从云端获取数据 // this.SetBackupInfoToForm(); // }); //} #endregion //#region ■ 从云端获取数据_____________________ ///// ///// 从云端获取数据 ///// //private async void SetBackupInfoToForm() //{ // //进度条 // this.ShowProgressBar(); // //从云端获取数据 // var pageData = await HdlBackupLogic.Current.GetBackupListNameFromDB(2, Common.LocalGateway.Current.GetGatewayId(zbRealGateway)); // //关闭 // this.CloseProgressBar(); // if (pageData == null) // { // return; // } // Application.RunOnMainThread(() => // { // if (listView != null) // { // listView.RemoveAll(); // } // }); // foreach (BackupListNameInfo fileInfo in pageData) // { // Application.RunOnMainThread(() => // { // if (this.Parent != null) // { // //添加备份行 // this.AddRowlayout(fileInfo); // } // }); // } //} //#endregion //#region ■ 添加备份行_________________________ ///// ///// 添加备份行 ///// ///// //private void AddRowlayout(BackupListNameInfo fileInfo) //{ // //行 // var rowLayout = new StatuRowLayout(listView); // //图标 // var btnPoint = new RowLeftIconView(); // btnPoint.SelectedImagePath = "Center/BackupSelected.png"; // btnPoint.UnSelectedImagePath = "Center/Backup.png"; // rowLayout.AddChidren(btnPoint); // //备份名字 // var txtText = new RowCenterView(); // txtText.Text = fileInfo.BackupName; // rowLayout.AddChidren(txtText); // txtText.X -= ControlCommonResourse.PointXXLeft; // //编辑备注名 // rowLayout.MouseUpEvent += (sender, e) => // { // //显示编辑备考名画面 // this.ShowEditorBackupForm(fileInfo); // }; // //下载图标 // var btnLoad = new MostRightEmptyView(); // //启用点亮功能 // btnLoad.UseClickStatu = true; // btnLoad.UnSelectedImagePath = "Item/DownLoad.png"; // btnLoad.SelectedImagePath = "Item/DownLoadSelected.png"; // rowLayout.AddChidren(btnLoad, ChidrenBindMode.NotBind); // //下载图标太右边不好看 // btnLoad.X -= Application.GetRealWidth(50); // btnLoad.MouseUpEventHandler += (sender, e) => // { // //是否要下载并恢复数据? // string msg = Language.StringByID(R.MyInternationalizationString.uDownLoadAndRecoverMsg); // this.ShowConfirmMsg(msg, "LoadBackupInfo", fileInfo.Id); // }; // //删除 // var btnDelete = new RowDeleteButton(); // rowLayout.AddRightView(btnDelete); // btnDelete.MouseUpEventHandler += (sender, e) => // { // //确定要删除文件吗? // string msg = Language.StringByID(R.MyInternationalizationString.uDoDeleteFileMsg); // this.ShowConfirmMsg(msg, "DeleteBackInfo", fileInfo.Id, ShowErrorMode.YES); // }; //} //#endregion //#region ■ 读取备份文档_______________________ ///// ///// 读取备份文档 ///// ///// //public void LoadBackupInfo(string BackupClassId) //{ // HdlThreadLogic.Current.Run(async () => // { // //获取网关上面存在的全部文件 // var listFile = await this.GetGatewayFileFromGateway(); // if (listFile == null) // { // return; // } // //从云端获取备份的文件 // bool result = await HdlBackupLogic.Current.LoadGatewayBackupInfo(BackupClassId, zbRealGateway, listFile); // if (result == false) // { // //网关恢复失败 // string msg2 = Language.StringByID(R.MyInternationalizationString.uGatewayFileRecoverFail); // this.ShowNormalMsg(msg2); // return; // } // Application.RunOnMainThread(() => // { // //关闭自身 // this.CloseForm(); // }); // //网关恢复成功 // string msg = Language.StringByID(R.MyInternationalizationString.uGatewayFileRecoverSuccess); // this.ShowNormalMsg(msg); // }); //} //#endregion //#region ■ 上传数据___________________________ ///// ///// 上传数据 ///// ///// //private async void UpLoadBackInfo(string backName) //{ // //展开进度条 // this.ShowProgressBar(); // //创建一个备份名字 // string backupClassId = await HdlBackupLogic.Current.CreatNewBackupNameToDB(backName, 2, Common.LocalGateway.Current.GetGatewayId(zbRealGateway)); // if (backupClassId == null) // { // //创建备份名字失败 // string msg = Language.StringByID(R.MyInternationalizationString.uCreatBackupNameFail); // this.ShowErrorMsg(msg); // //关闭进度条 // this.CloseProgressBar(); // return; // } // //添加附加情报:获取网关数据 // string appendText = Language.StringByID(R.MyInternationalizationString.uGetGatewayData); // ProgressBar.SetAppendText(appendText); // //这里是从网关获取备份文件:将网关文件存入到指定的路径下 // string directory = await this.SetGatewayFileInDirectory(); // //关闭进度条 // this.CloseProgressBar(); // if (directory == null) // { // //如果上传失败的话,就把它删除 // this.DeleteBackInfo(backupClassId, ShowErrorMode.NO); // return; // } // //添加附加情报:上传数据 // appendText = Language.StringByID(R.MyInternationalizationString.uDataUpLoad); // ProgressBar.SetAppendText(appendText); // HdlThreadLogic.Current.Run(async () => // { // //上传数据到云端 // directory = UserCenterLogic.CombinePath(directory); // bool result = await HdlBackupLogic.Current.UpLoadBackupFileToDB(backupClassId, 2, directory); // //清空附加情报 // ProgressBar.SetAppendText(string.Empty); // if (result == false) // { // //文件上传失败 // string msg = Language.StringByID(R.MyInternationalizationString.uFileUpLoadFail); // this.ShowErrorMsg(msg); // //如果上传失败的话,就把它删除 // this.DeleteBackInfo(backupClassId, ShowErrorMode.NO); // return; // } // //刷新画面 // this.SetBackupInfoToForm(); // }); //} //#endregion //#region ■ 编辑备份名称_______________________ ///// ///// 编辑备份名称 ///// ///// ///// //private async void EditorBackInfo(string BackupClassId, string backName) //{ // //开启进度条 // this.ShowProgressBar(); // var Pra = new EditorBackUpNamePra(); // Pra.BackupClassId = BackupClassId; // Pra.BackupName = backName; // //获取控制主人账号的Token // Pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); // bool result = await UserCenterLogic.GetResultStatuByRequestHttps("App/UpdateHomeAppGatewayName", true, Pra); // if (result == false) // { // //编辑备份名称失败 // string msg = Language.StringByID(R.MyInternationalizationString.uEditorBackupNameFail); // this.ShowErrorMsg(msg); // //关闭进度条 // this.CloseProgressBar(); // return; // } // this.SetBackupInfoToForm(); //} //#endregion //#region ■ 删除备份文档_______________________ ///// ///// 删除备份文档 ///// ///// ///// //public async void DeleteBackInfo(string BackupClassId, ShowErrorMode showMode = ShowErrorMode.YES) //{ // //进度条 // this.ShowProgressBar(); // bool success = await HdlBackupLogic.Current.DeleteDbBackupData(BackupClassId); // //关闭进度条 // this.CloseProgressBar(); // if (success == false) // { // if (showMode == ShowErrorMode.YES) // { // //删除备份失败 // string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBackupFail); // this.ShowErrorMsg(msg); // } // return; // } // this.SetBackupInfoToForm(); //} //#endregion //#region ■ 显示编辑备考名画面_________________ ///// ///// 显示编辑备考名画面 ///// ///// ///// //private void ShowEditorBackupForm(BackupListNameInfo fileInfo) //{ // //生成一个弹窗画面 // var dialogForm = new DialogInputFrameControl(this, DialogFrameMode.OnlyInput); // //编辑备份 // dialogForm.SetTitleText(Language.StringByID(R.MyInternationalizationString.uEditorBackup)); // //请输入备注名称 // dialogForm.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInpuBackup)); // dialogForm.InputText = fileInfo.BackupName; // //按下确认按钮 // dialogForm.ComfirmClickEvent += (() => // { // string txtvalue = dialogForm.InputText; // //检测备考名称 // if (this.CheckBackupName(txtvalue) == false) // { // return; // } // //画面关闭 // dialogForm.CloseDialog(); // //名字一样时,不处理 // if (txtvalue != fileInfo.BackupName) // { // //编辑备份名称 // this.EditorBackInfo(fileInfo.Id, txtvalue); // } // }); //} ///// ///// 显示添加备考名画面 ///// ///// //private void ShowAddBackupForm() //{ // //生成一个弹窗画面 // var dialogForm = new DialogInputFrameControl(this, DialogFrameMode.OnlyInput); // //添加备份 // dialogForm.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddBackup)); // //请输入备注名称 // dialogForm.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInpuBackup)); // //按下确认按钮 // dialogForm.ComfirmClickEvent += (() => // { // string txtvalue = dialogForm.InputText; // //检测备考名称 // if (this.CheckBackupName(txtvalue) == false) // { // return; // } // //画面关闭 // dialogForm.CloseDialog(); // //上传备份 // this.UpLoadBackInfo(txtvalue); // }); //} //#endregion //#region ■ 获取网关文件_______________________ ///// ///// 将网关文件存入到指定的路径下 ///// ///// //private async Task SetGatewayFileInDirectory() //{ // //上传网关备份文件到云端的临时【文件夹】 // string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.GatewayBackupDirectory); // Global.CreateEmptyDirectory(dir, true); // //从网关获取它的文件 // var listFile = await this.GetGatewayFileFromGateway(); // if (listFile == null) // { // return null; // } // int timeOutCount = 0; // bool receiving = false; // string checkTopic = Common.LocalGateway.Current.GetGatewayId(zbRealGateway) + "/FileTransfer/DownloadFile"; // var listByteSource = new List(); // //接收数据 // Action action = (topic, dataContent) => // { // string[] arry = topic.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); // string checkValue = arry[0] + "/" + arry[1] + "/" + arry[2]; // if (arry.Length < 3 || checkValue != checkTopic) // { // return; // } // //刷新超时时间 // timeOutCount = 0; // byte[] fileBytes = dataContent; // if (fileBytes[5] != 1) // { // if (fileBytes.Length == 2056) // { // var tempBytes = new byte[2048]; // System.Array.Copy(fileBytes, 8, tempBytes, 0, 2048); // listByteSource.AddRange(tempBytes); // } // else // { // var tempBytes = new byte[fileBytes.Length - 8]; // System.Array.Copy(fileBytes, 8, tempBytes, 0, tempBytes.Length); // listByteSource.AddRange(tempBytes); // } // } // else // { // var tempBytes = new byte[fileBytes.Length - 8]; // System.Array.Copy(fileBytes, 8, tempBytes, 0, tempBytes.Length); // listByteSource.AddRange(tempBytes); // string [] Arryfile = listFile[0].Split(new string[] { "/" }, StringSplitOptions.None); // string fileName = Arryfile[Arryfile.Length - 1]; // //将输入写入本地的临时文件夹 // Global.WriteFileToDirectoryByBytes(dir, fileName, listByteSource.ToArray()); // listByteSource.Clear(); // //移除死循环内的指定目标 // listFile.RemoveAt(0); // receiving = false; // } // }; // zbRealGateway.FileContentAction += action; // //设置进度条的最大值 // this.SetProgressMax(listFile.Count); // while (listFile.Count > 0) // { // timeOutCount++; // if (timeOutCount == 150) // { // //30秒超时:响应超时,获取网关文件失败 // string msg = Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndGetGatewayFileFail); // this.ShowErrorMsg(msg); // zbRealGateway.FileContentAction -= action; // return null; // } // //接收中 // if (receiving == true) // { // await Task.Delay(200); // continue; // } // receiving = true; // string[] Arryfile = listFile[0].Split(new string[] { "/" }, StringSplitOptions.None); // string fileName = Arryfile[Arryfile.Length - 1]; // //下载文件 // var saveFileName = await zbRealGateway.SetDownloadFileAsync(fileName); // //检测网关返回的共通错误状态码 // var error = HdlCheckLogic.Current.CheckCommonErrorCode(saveFileName); // if (error != null) // { // this.ShowMassage(error); // zbRealGateway.FileContentAction -= action; // return null; // } // if (saveFileName == null || saveFileName.setDownloadFileResponseData == null || saveFileName.setDownloadFileResponseData.Result != 0) // { // //获取网关文件失败 // string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayFileFail); // this.ShowErrorMsg(msg); // zbRealGateway.FileContentAction -= action; // return null; // } // //设置进度值 // this.SetProgressValue(1); // } // zbRealGateway.FileContentAction -= action; // action = null; // return dir; //} ///// ///// 从网关获取它的文件 ///// ///// //private async Task> GetGatewayFileFromGateway() //{ // var fileData = await zbRealGateway.FileTransferLsDirAsync(); // //检测网关返回的共通错误状态码 // string error = HdlCheckLogic.Current.CheckCommonErrorCode(fileData); // if (error != null) // { // this.ShowErrorMsg(error); // return null; // } // if (fileData == null || fileData.fileTransferLsDiResponseData == null || fileData.fileTransferLsDiResponseData.Result != 0) // { // //获取网关文件失败 // string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayFileFail); // this.ShowErrorMsg(msg); // return null; // } // var listFile = new List(); // foreach (var filedata in fileData.fileTransferLsDiResponseData.Dir) // { // listFile.Add(filedata.File); // } // return listFile; //} //#endregion //#region ■ 一般方法___________________________ ///// ///// 检测备考名称 ///// ///// ///// //private bool CheckBackupName(string backName) //{ // if (backName == string.Empty) // { // //请输入备注名称 // string msg = Language.StringByID(R.MyInternationalizationString.uPleaseInpuBackup); // this.ShowErrorMsg(msg); // return false; // } // return true; //} //#endregion } }