using Shared.Common; using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.HdlBackup { /// /// 网关列表的备份界面 /// public class HdlGatewayListBackUpForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 列表控件 /// private VerticalScrolViewLayout listview = null; /// /// 生成的网关状态控件暂时存入内存中 /// private Dictionary dicRowContr = new Dictionary(); #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// public void ShowForm() { //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uGatewayBackup)); //初始化中部控件 this.InitMiddleFrame(); } /// /// 初始化中部控件 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); listview = new VerticalScrolViewLayout(); listview.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listview); //设定中部信息 this.SetMiddleFrameInfo(); } /// /// 设定中部信息 /// private void SetMiddleFrameInfo() { //设置接受在线状态推送 this.AddGatewayOnlinePush(); HdlThreadLogic.Current.RunThread(() => { List listway = HdlGatewayLogic.Current.GetAllLocalGateway(); if (listway.Count == 0) { return; } //开启进度条 this.ShowProgressBar(); Application.RunOnMainThread(() => { for (int i = 0; i < listway.Count; i++) { //添加行 this.AddRowLayout(HdlGatewayLogic.Current.GetGatewayId(listway[i])); } this.CloseProgressBar(); //开启网关在线监测的线程 this.StartGatewayOnlieCheckThread(listway); }); }); } #endregion #region ■ 添加网关行_________________________ /// /// 添加行 /// /// String way. public void AddRowLayout(string strWayId) { //网关控件 var Gateway = HdlGatewayLogic.Current.GetLocalGateway(strWayId); var gatewayRow = new GatewayRowControl(Gateway); listview.AddChidren(gatewayRow); //向右图标 gatewayRow.frameTable.AddRightArrow(); //提示有新版本 var btnNew = new RowNewVersionTipView(); btnNew.Visible = false; gatewayRow.frameTable.AddChidren(btnNew, ChidrenBindMode.BindEventOnly); gatewayRow.AddTag("btnNew", btnNew); this.dicRowContr[strWayId] = gatewayRow; //单击事件 gatewayRow.frameTable.ButtonClickEvent += (sender, e) => { //如果点击的是不在线的网关,则当什么事都没有发生 if (gatewayRow.IsOnline == false) { //指定的网关不在线 this.ShowMassage(ShowMsgType.Normal, Language.StringByID(R.MyInternationalizationString.uTheGatewayIsNotOnline)); return; } //如果存在新版本,并且单击他的话 if (btnNew.Visible == true) { if (sender is InformationTipView || sender is IconViewControl) { //打开编辑界面 btnNew.Visible = false; var form = new GatewayManage.GatewayInfoEditorForm(); form.AddForm(Gateway); return; } } ZbGateway realWay = null; if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, strWayId) == false) { //错误:网关对象丢失 string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg); this.ShowMassage(ShowMsgType.Tip, msg); return; } var form2 = new HdlGatewayBackUpForm(); form2.AddForm(realWay); }; } #endregion #region ■ 网关在线检测_______________________ /// /// 开启网关在线监测的线程 /// /// private void StartGatewayOnlieCheckThread(List listway) { HdlThreadLogic.Current.RunThread(() => { System.Threading.Thread.Sleep(300); //刷新网关在线状态 HdlGatewayLogic.Current.RefreshGatewayOnlineStatu(listway); foreach (var way in listway) { if (this.Parent == null) { return; } bool online = HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(way); this.GatewayOnlinePush(way, online); } //网关新版本检测 this.CheckGatewayNewVersion(listway); }); } /// /// 网关在线状态变更 /// /// 网关对象 /// 在线状态变更后的状态 public override void GatewayOnlinePush(ZbGateway gateWay, bool online) { Application.RunOnMainThread(() => { if (this.Parent == null) { return; } string gwid = HdlGatewayLogic.Current.GetGatewayId(gateWay); if (this.dicRowContr.ContainsKey(gwid) == true) { this.dicRowContr[gwid].RefreshControl(gateWay); } }); } #endregion #region ■ 网关新版本检测_____________________ /// /// 网关新版本检测 /// /// private async void CheckGatewayNewVersion(List listWays) { foreach (var way in listWays) { if (this.Parent == null) { return; } if (HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(way) == false) { //不在线的不用理它 continue; } //获取最新版本 var result = await HdlGatewayLogic.Current.GetGatewayAllNewVersion(way, ShowErrorMode.NO); if (result == null) { continue; } if (result[0] != null || result[1] != null || result[2] != null) { //有新版本 string gwid = HdlGatewayLogic.Current.GetGatewayId(way); Application.RunOnMainThread(() => { if (this.dicRowContr.ContainsKey(gwid) == true) { var btnNew = (RowNewVersionTipView)this.dicRowContr[gwid].GetTagByKey("btnNew"); btnNew.Visible = true; } }); } } } #endregion } }