using Shared.Common; using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.HdlBackup { /// /// 网关列表的备份界面 /// public class HdlGatewayListBackUpForm : UserCenterCommonForm { #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() { listview = new VerticalScrolViewLayout(); listview.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listview); //设定中部信息 this.SetMiddleFrameInfo(); } /// /// 设定中部信息 /// private void SetMiddleFrameInfo() { //设置接受在线状态推送 this.AddGatewayOnlinePush(); new System.Threading.Thread(() => { List listway = Common.LocalGateway.Current.GetAllLocalGateway(); if (listway.Count == 0) { return; } //开启进度条 this.ShowProgressBar(); Application.RunOnMainThread(() => { for (int i = 0; i < listway.Count; i++) { //添加行 this.AddRowLayout(Common.LocalGateway.Current.GetGatewayId(listway[i])); } this.CloseProgressBar(); //开启网关在线监测的线程 this.StartGatewayOnlieCheckThread(listway); }); }) { IsBackground = true }.Start(); } #endregion #region ■ 添加网关行_________________________ /// /// 添加行 /// /// String way. public void AddRowLayout(string strWayId) { //网关控件 var Gateway = LocalGateway.Current.GetLocalGateway(strWayId); var gatewayRow = new GatewayViewRow(listview, Gateway); //向右图标 gatewayRow.AddRightIconControl(); //提示有新版本 var btnNew = new InformationTipView(gatewayRow.btnIcon); btnNew.Visible = false; gatewayRow.AddChidren(btnNew, ChidrenBindMode.BindEventOnly); gatewayRow.AddTag("btnNew", btnNew); this.dicRowContr[strWayId] = gatewayRow; //单击事件 gatewayRow.MouseUpEvent += (sender, e) => { //如果点击的是不在线的网关,则当什么事都没有发生 if (gatewayRow.IsOnline == false) { //指定的网关不在线 this.ShowNormalMsg(Language.StringByID(R.MyInternationalizationString.uTheGatewayIsNotOnline)); return; } //如果存在新版本,并且单击他的话 if (btnNew.Visible == true) { if (sender is InformationTipView || sender is RowLeftIconView) { //打开编辑界面 btnNew.Visible = false; var form = new Gateway.GatewayInfoEditorForm(); this.AddForm(form, Gateway); return; } } ZbGateway realWay = null; if (Common.LocalGateway.Current.GetRealGateway(ref realWay, strWayId) == false) { //错误:网关对象丢失 string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg); this.ShowTip(msg); return; } var form2 = new HdlGatewayBackUpForm(); this.AddForm(form2, realWay); }; } #endregion #region ■ 网关在线检测_______________________ /// /// 开启网关在线监测的线程 /// /// private void StartGatewayOnlieCheckThread(List listway) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(300); //刷新网关在线状态 Common.LocalGateway.Current.RefreshGatewayOnlineStatu(listway); foreach (var way in listway) { if (this.Parent == null) { return; } bool online = Common.LocalGateway.Current.CheckGatewayOnlineByFlag(way); this.GatewayOnlinePush(way, online); } //网关新版本检测 this.CheckGatewayNewVersion(listway); }) { IsBackground = true }.Start(); } /// /// 网关在线状态变更 /// /// 网关对象 /// 在线状态变更后的状态 public override void GatewayOnlinePush(ZbGateway gateWay, bool online) { Application.RunOnMainThread(() => { if (this.Parent == null) { return; } string gwid = Common.LocalGateway.Current.GetGatewayId(gateWay); if (this.dicRowContr.ContainsKey(gwid) == true) { this.dicRowContr[gwid].zbGateway = gateWay; this.dicRowContr[gwid].RefreshControl(online); } }); } #endregion #region ■ 网关新版本检测_____________________ /// /// 网关新版本检测 /// /// private async void CheckGatewayNewVersion(List listWays) { foreach (var way in listWays) { if (this.Parent == null) { return; } if (Common.LocalGateway.Current.CheckGatewayOnlineByFlag(way) == false) { //不在线的不用理它 continue; } //获取最新版本 var result = await Common.LocalGateway.Current.GetGatewayAllNewVersion(way, ShowErrorMode.NO); if (result == null) { continue; } if (result[0] != null || result[1] != null || result[2] != null) { //有新版本 string gwid = Common.LocalGateway.Current.GetGatewayId(way); Application.RunOnMainThread(() => { if (this.dicRowContr.ContainsKey(gwid) == true) { var btnNew = (InformationTipView)this.dicRowContr[gwid].GetTagByKey("btnNew"); btnNew.Visible = true; } }); } } } #endregion } }