| | |
| | | /// </summary>
|
| | | private bool newGatewayGetting = false;
|
| | | /// <summary>
|
| | | /// 网关检测中
|
| | | /// 网关搜索中
|
| | | /// </summary>
|
| | | private string isGatewayChecking = "0";
|
| | | private bool isGatewaySearching = true;
|
| | |
|
| | | #endregion
|
| | |
|
| | |
| | | //清空bodyFrame
|
| | | this.ClearBodyFrame();
|
| | |
|
| | | //网关如果正常连接路由器{0}系统指示灯会1秒闪烁
|
| | | string[] ArryMsg = Language.StringByID(R.MyInternationalizationString.uAddApWirelessGatewayMsg4).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
|
| | | int yy = Application.GetRealHeight(1066);
|
| | | //手机连接网关
|
| | | var btnTitle = new NormalViewControl(400, 60, true);
|
| | | btnTitle.TextID = R.MyInternationalizationString.uMobileConnectionGateway;
|
| | | btnTitle.X = Application.GetRealWidth(75);
|
| | | btnTitle.Y = Application.GetRealHeight(939);
|
| | | btnTitle.IsBold = true;
|
| | | btnTitle.TextSize = 14;
|
| | | bodyFrameLayout.AddChidren(btnTitle);
|
| | |
|
| | | //1.app若显示连接的网关设备,表明连接成功
|
| | | //2.请前往添加其他设备
|
| | | //3.若长时间无法连接成功,请前往“查看帮助”
|
| | | string[] ArryMsg = Language.StringByID(R.MyInternationalizationString.uAddMiniGatewayMsg4).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
|
| | | int yy = btnTitle.Bottom + Application.GetRealHeight(23);
|
| | | foreach (var msg in ArryMsg)
|
| | | {
|
| | | var btnMsg = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(60), false);
|
| | | btnMsg.Text = msg;
|
| | | btnMsg.Y = yy;
|
| | | btnMsg.TextAlignment = TextAlignment.Center;
|
| | | btnMsg.X = btnTitle.X;
|
| | | btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
|
| | | btnMsg.TextSize = 12;
|
| | | bodyFrameLayout.AddChidren(btnMsg);
|
| | | yy = btnMsg.Bottom;
|
| | | }
|
| | |
|
| | | //初始化连接的假想动画效果
|
| | | this.InitConcetionAnimete();
|
| | | //开启网关检测的线程
|
| | | this.StartCheckGatewayThread();
|
| | |
|
| | | //查看帮助
|
| | | var btnHelp = this.AddHelpControl();
|
| | | btnHelp.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | var form = new AddGatewayHelpForm();
|
| | | form.AddForm("Mini");
|
| | | };
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | |
|
| | | //图标
|
| | | var picGwImage = new FrameLayout();
|
| | | picGwImage.Width = this.GetPictrueRealSize(857);
|
| | | picGwImage.Height = this.GetPictrueRealSize(239);
|
| | | picGwImage.Y = Application.GetRealWidth(236);
|
| | | picGwImage.Width = this.GetPictrueRealSize(848);
|
| | | picGwImage.Height = this.GetPictrueRealSize(475);
|
| | | picGwImage.Y = Application.GetRealHeight(199);
|
| | | picGwImage.Gravity = Gravity.CenterHorizontal;
|
| | | picGwImage.BackgroundImagePath = "Gateway/MiniGatewaySearching.png";
|
| | | picGwImage.BackgroundImagePath = "Gateway/WirelessGatewaySearching.png";
|
| | | bodyFrameLayout.AddChidren(picGwImage);
|
| | | var btnFailIcon = new PicViewControl(66, 66);
|
| | | btnFailIcon.UnSelectedImagePath = "Item/FailIcon.png";
|
| | | btnFailIcon.Gravity = Gravity.CenterHorizontal;
|
| | | btnFailIcon.Y = this.GetPictrueRealSize(110);
|
| | | btnFailIcon.Y = this.GetPictrueRealSize(200);
|
| | | picGwImage.AddChidren(btnFailIcon);
|
| | | //搜索失败
|
| | | var btnFailView = new NormalViewControl(300, 60, true);
|
| | | btnFailView.TextAlignment = TextAlignment.Center;
|
| | | btnFailView.Y = picGwImage.Bottom - Application.GetRealHeight(15);
|
| | | btnFailView.Y = btnFailIcon.Bottom + Application.GetRealHeight(58);
|
| | | btnFailView.Gravity = Gravity.CenterHorizontal;
|
| | | btnFailView.TextColor = UserCenterColor.Current.TextGrayColor3;
|
| | | btnFailView.TextID = R.MyInternationalizationString.uSearchFail;
|
| | | bodyFrameLayout.AddChidren(btnFailView);
|
| | | picGwImage.AddChidren(btnFailView);
|
| | |
|
| | | //解决方法,可选择执行以下任意一种方式:
|
| | | var btnMsg1 = new NormalViewControl(930, 60, true);
|
| | |
| | | btnReDo.Gravity = Gravity.CenterHorizontal;
|
| | | btnReDo.TextAlignment = TextAlignment.Center;
|
| | | btnReDo.TextID = R.MyInternationalizationString.uReDoAgain;
|
| | | frameback.AddChidren(btnReDo, ChidrenBindMode.BindEventOnly);
|
| | | frameback.AddChidren(btnReDo, ChidrenBindMode.BindEvent);
|
| | | frameback.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //初始化初始中部控件
|
| | |
| | | {
|
| | | //图标
|
| | | var btnGwImage = new FrameLayout();
|
| | | btnGwImage.Width = this.GetPictrueRealSize(857);
|
| | | btnGwImage.Height = this.GetPictrueRealSize(239);
|
| | | btnGwImage.Y = Application.GetRealHeight(360);
|
| | | btnGwImage.Width = this.GetPictrueRealSize(848);
|
| | | btnGwImage.Height = this.GetPictrueRealSize(475);
|
| | | btnGwImage.Y = Application.GetRealHeight(199);
|
| | | btnGwImage.Gravity = Gravity.CenterHorizontal;
|
| | | btnGwImage.BackgroundImagePath = "Gateway/MiniGatewaySearching.png";
|
| | | btnGwImage.BackgroundImagePath = "Gateway/WirelessGatewaySearching.png";
|
| | | bodyFrameLayout.AddChidren(btnGwImage);
|
| | |
|
| | | //正在搜索网关…
|
| | | var btnMsg = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(60), false);
|
| | | btnMsg.TextID = R.MyInternationalizationString.uGatewaySearching;
|
| | | btnMsg.Y = Application.GetRealHeight(821);
|
| | | btnMsg.Y = btnGwImage.Bottom + Application.GetRealHeight(150);
|
| | | btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
|
| | | btnMsg.TextAlignment = TextAlignment.Center;
|
| | | bodyFrameLayout.AddChidren(btnMsg);
|
| | |
|
| | | //首格的X轴
|
| | | int firstPoint = this.GetPictrueRealSize(275);
|
| | | int firstPoint = this.GetPictrueRealSize(280);
|
| | | //一格的宽度
|
| | | int width = this.GetPictrueRealSize(22);
|
| | | //间距大小
|
| | |
| | | var btnRound = new PicViewControl(width, width, false);
|
| | | btnRound.Radius = (uint)width / 2;
|
| | | btnRound.BackgroundColor = UserCenterColor.Current.ConcetionRoundColor;
|
| | | btnRound.Y = this.GetPictrueRealSize(132);
|
| | | btnRound.Y = this.GetPictrueRealSize(225);
|
| | | btnRound.X = listPoint[0];
|
| | | btnGwImage.AddChidren(btnRound);
|
| | |
|
| | |
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //清空全部列表
|
| | | HdlGatewayLogic.Current.ClearAllRealGateway();
|
| | | HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
|
| | | ZigBee.Common.Application.IsSearchingGateway = true;
|
| | |
|
| | | int index = 1;
|
| | |
| | | if (timeCount == 10)
|
| | | {
|
| | | //5秒后清空网关列表
|
| | | HdlGatewayLogic.Current.ClearAllRealGateway();
|
| | | HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
|
| | | ZigBee.Common.Application.IsSearchingGateway = true;
|
| | | }
|
| | | if (timeCount % 4 == 0 && timeCount >= 10)
|
| | | {
|
| | | lock (isGatewayChecking)
|
| | | {
|
| | | if (isGatewayChecking != "1")
|
| | | {
|
| | | isGatewayChecking = "1";
|
| | | HdlThreadLogic.Current.RunThread(async () =>
|
| | | {
|
| | | //每2秒检测搜索到的网关
|
| | | await this.CheckZbGatewayAndSetRow();
|
| | | lock (isGatewayChecking)
|
| | | {
|
| | | isGatewayChecking = "0";
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | }
|
| | | if (timeCount % 2 == 0)
|
| | | {
|
| | |
| | | break;
|
| | | }
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | btnRound.X = listPoint[index];
|
| | | index++;
|
| | |
| | | }
|
| | | //正在搜索网关…XXs
|
| | | btnMsg.Text = strMsg + timeOut + "s";
|
| | | });
|
| | | }, ShowErrorMode.NO);
|
| | |
|
| | | System.Threading.Thread.Sleep(500);
|
| | | }
|
| | | if (timeOut <= 0)
|
| | | //搜索结束
|
| | | this.isGatewaySearching = false;
|
| | |
|
| | | //2020.07.14追加:倒计时结束时,哪怕是已经绑定了的网关,也显示出来
|
| | | if (timeOut <= 0 && listZbGateway.Count == 0)
|
| | | {
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | |
| | | this.InitFailMiddleFrame();
|
| | | });
|
| | | }
|
| | | else if (newGatewayGetting == true)
|
| | | else if (newGatewayGetting == true || listZbGateway.Count > 0)
|
| | | {
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | |
| | | #region ■ 网关检测___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 开启网关检测的线程
|
| | | /// </summary>
|
| | | private void StartCheckGatewayThread()
|
| | | {
|
| | | this.isGatewaySearching = true;
|
| | | this.dicZbGatewayDiv = new Dictionary<string, int>();
|
| | |
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | int count = 0;
|
| | | while (this.Parent != null && this.isGatewaySearching == true)
|
| | | {
|
| | | //每2秒检测搜索到的网关
|
| | | System.Threading.Thread.Sleep(500);
|
| | | count++;
|
| | | if (count < 4)
|
| | | {
|
| | | //主要为了快一点能够中断这个线程
|
| | | continue;
|
| | | }
|
| | | count = 0;
|
| | |
|
| | | this.CheckZbGatewayAndSetRow();
|
| | |
|
| | | if (this.newGatewayGetting == true)
|
| | | {
|
| | | //获取得到新网关,则中断线程
|
| | | break;
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 检测搜索到的网关
|
| | | /// </summary>
|
| | | private async Task<bool> CheckZbGatewayAndSetRow()
|
| | | private bool CheckZbGatewayAndSetRow()
|
| | | {
|
| | | for (int i = 0; i < ZbGateway.GateWayList.Count; i++)
|
| | | {
|
| | | var way = ZbGateway.GateWayList[i];
|
| | | var wayId = HdlGatewayLogic.Current.GetGatewayId(way);
|
| | | var wayId = way.GwId;
|
| | |
|
| | | if (dicZbGatewayDiv.ContainsKey(wayId) == true)
|
| | | {
|
| | | //已经处理了
|
| | | continue;
|
| | | }
|
| | | //2020.09.18 本地连接没有连接上,则不处理
|
| | | if (way.localIsConnected == false)
|
| | | {
|
| | | string strMsg = "搜索到了网关,但是本地链接不上 ID:" + way.GwId + " IP:" + way.GwIP + " 名称:" + way.GwName;
|
| | | HdlLogLogic.Current.WriteLog(-1, strMsg);
|
| | | continue;
|
| | | }
|
| | |
|
| | | //网关绑定模式
|
| | | GatewayBindMode mode = GatewayBindMode.BindAgain;
|
| | | //如果是第一次绑定,或者是以前已经绑定过了的
|
| | | if (HdlGatewayLogic.Current.HomeIdIsEmpty(way) == true
|
| | | || way.getGatewayBaseInfo.HomeId == Common.Config.Instance.HomeId)
|
| | | var mode = GatewayBindMode.BindAgain;
|
| | | //住宅ID为空 第一次绑定
|
| | | if (HdlGatewayLogic.Current.HomeIdIsEmpty(way) == true)
|
| | | {
|
| | | if (way.getGatewayBaseInfo.HomeId != Common.Config.Instance.HomeId)
|
| | | {
|
| | | //第一次绑定,也就是网关住宅ID为空
|
| | | mode = GatewayBindMode.First;
|
| | | }
|
| | | else
|
| | | {
|
| | | //已经绑定过了
|
| | | mode = GatewayBindMode.Binded;
|
| | | }
|
| | | mode = GatewayBindMode.First;
|
| | | }
|
| | | //住宅ID不相等 需要重新绑定
|
| | | else if (way.HomeId != Common.Config.Instance.HomeId)
|
| | | {
|
| | | mode = GatewayBindMode.BindAgain;
|
| | | }
|
| | | //如果本地不存在的话,当做第一次绑定处理
|
| | | else if (HdlGatewayLogic.Current.IsGatewayExist(way) == false)
|
| | | {
|
| | | mode = GatewayBindMode.First;
|
| | | }
|
| | | //住宅ID一样,则是已经绑定过了
|
| | | else
|
| | | {
|
| | | mode = GatewayBindMode.Binded;
|
| | | }
|
| | | //这两种情况都是需要重新添加(已经绑定过了的,有可能住宅ID没写进去,它有可能是人为的清空住宅ID)
|
| | | if (mode == GatewayBindMode.First || mode == GatewayBindMode.Binded)
|
| | | {
|
| | | //添加搜索到的网关到缓存(执行网关保存操作)
|
| | | var result = await HdlGatewayLogic.Current.AddNewGateway(way, ShowErrorMode.NO);
|
| | | var result = HdlGatewayLogic.Current.AddNewGateway(way, ShowErrorMode.NO, WriteLogMode.YES);
|
| | | if (result == false)
|
| | | {
|
| | | continue;
|
| | |
| | | this.newGatewayGetting = true;
|
| | | }
|
| | |
|
| | | if (mode == GatewayBindMode.First)
|
| | | if (mode == GatewayBindMode.First || mode == GatewayBindMode.Binded)
|
| | | {
|
| | | //我觉得这里需要获取一下新网关的设备列表
|
| | | Common.LocalDevice.Current.SetDeviceToMemmoryByGateway(way);
|
| | | Common.LocalDevice.Current.SetDeviceToMemmoryByGateway(way.GwId, true);
|
| | | if (way.IsMainGateWay == true)
|
| | | {
|
| | | //如果它是主网关,则刷新场景列表
|
| | | HdlSceneLogic.Current.RefreshSceneUIList(true);
|
| | | }
|
| | | }
|
| | | }
|
| | | return true;
|