using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.GatewayAdd
{
///
/// 无线网关UDP模式的搜索界面
///
public class WirelessUdpSearchForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 搜索到的网关列表
///
private List listZbGateway = new List();
///
/// 搜索到的网关类别 0:第一次绑定 1:已经绑定 2:需要换绑
///
private Dictionary dicZbGatewayDiv = new Dictionary();
///
/// 获取得到了新网关
///
private bool newGatewayGetting = false;
///
/// 网关搜索中
///
private bool isGatewaySearching = true;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
public void ShowForm()
{
//设置标题信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddWirelessGateway));
//初始化中部控件
this.InitDefultMiddleFrame();
}
///
/// 初始化中部控件
///
private void InitDefultMiddleFrame()
{
//清空bodyFrame
this.ClearBodyFrame();
//网关如果正常连接路由器{0}系统指示灯会1秒闪烁
string[] ArryMsg = Language.StringByID(R.MyInternationalizationString.uAddUdpWirelessGatewayMsg1).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
int yy = Application.GetRealHeight(1037);
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.TextColor = UserCenterColor.Current.TextGrayColor1;
bodyFrameLayout.AddChidren(btnMsg);
yy = btnMsg.Bottom;
}
//初始化连接的假想动画效果
this.InitConcetionAnimete();
//开启网关检测的线程
this.StartCheckGatewayThread();
}
///
/// 初始化失败模式的中部控件
///
private void InitFailMiddleFrame()
{
//清空bodyFrame
this.ClearBodyFrame();
//图标
var picGwImage = new FrameLayout();
picGwImage.Width = this.GetPictrueRealSize(852);
picGwImage.Height = this.GetPictrueRealSize(478);
picGwImage.Y = Application.GetRealWidth(158);
picGwImage.Gravity = Gravity.CenterHorizontal;
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(200);
picGwImage.AddChidren(btnFailIcon);
//搜索失败
var btnFailView = new NormalViewControl(300, 60, true);
btnFailView.TextAlignment = TextAlignment.Center;
btnFailView.Y = this.GetPictrueRealSize(305);
btnFailView.Gravity = Gravity.CenterHorizontal;
btnFailView.TextColor = UserCenterColor.Current.TextGrayColor3;
btnFailView.TextID = R.MyInternationalizationString.uSearchFail;
picGwImage.AddChidren(btnFailView);
//解决方法,可选择执行以下任意一种方式:
var btnMsg1 = new NormalViewControl(930, 60, true);
btnMsg1.X = Application.GetRealWidth(75);
btnMsg1.Y = picGwImage.Bottom + Application.GetRealHeight(112);
btnMsg1.TextID = R.MyInternationalizationString.uSearchGatewayFailMsg1;
bodyFrameLayout.AddChidren(btnMsg1);
//1.短按HID/WCFG按键,系统指示灯快闪3秒,网关进入换绑模式,强制网关绑定到当前APP
var btnMsg2 = new NormalViewControl(930, 100, true);
btnMsg2.X = Application.GetRealWidth(75);
btnMsg2.Y = btnMsg1.Bottom + Application.GetRealHeight(35);
btnMsg2.Text = Language.StringByID(R.MyInternationalizationString.uSearchGatewayFailMsg2).Replace("{0}", "\r\n");
btnMsg2.TextSize = 12;
btnMsg2.TextColor = UserCenterColor.Current.TextGrayColor1;
btnMsg2.IsMoreLines = true;
bodyFrameLayout.AddChidren(btnMsg2);
//2.长按网关ZB/RST按键20秒以上,直到所有指示灯同时灭,即恢复出厂设置并重启
var btnMsg3 = new NormalViewControl(930, 100, true);
btnMsg3.X = Application.GetRealWidth(75);
btnMsg3.Y = btnMsg2.Bottom + Application.GetRealHeight(12);
btnMsg3.Text = Language.StringByID(R.MyInternationalizationString.uSearchGatewayFailMsg3).Replace("{0}", "\r\n");
btnMsg3.TextSize = 12;
btnMsg3.TextColor = UserCenterColor.Current.TextGrayColor1;
btnMsg3.IsMoreLines = true;
bodyFrameLayout.AddChidren(btnMsg3);
//3.请重试,重新添加网关。
var btnMsg4 = new NormalViewControl(930, 50, true);
btnMsg4.X = Application.GetRealWidth(75);
btnMsg4.Y = btnMsg3.Bottom + Application.GetRealHeight(12);
btnMsg4.Text = Language.StringByID(R.MyInternationalizationString.uSearchGatewayFailMsg4);
btnMsg4.TextSize = 12;
btnMsg4.TextColor = UserCenterColor.Current.TextGrayColor1;
bodyFrameLayout.AddChidren(btnMsg4);
//4.返回网关管理。
var btnMsg5 = new NormalViewControl(930, 50, true);
btnMsg5.X = Application.GetRealWidth(75);
btnMsg5.Y = btnMsg4.Bottom + Application.GetRealHeight(12);
btnMsg5.Text = Language.StringByID(R.MyInternationalizationString.uSearchGatewayFailMsg5);
btnMsg5.TextSize = 12;
btnMsg5.TextColor = UserCenterColor.Current.TextGrayColor1;
bodyFrameLayout.AddChidren(btnMsg5);
//重试
var frameback = new FrameLayoutStatuControl();
frameback.UseClickStatu = false;
frameback.Y = Application.GetRealHeight(1259);
frameback.Gravity = Gravity.CenterHorizontal;
frameback.Width = Application.GetRealWidth(746);
frameback.Height = Application.GetRealHeight(184);
frameback.BackgroundImagePath = "Item/BottomButtonGround.png";
bodyFrameLayout.AddChidren(frameback);
var btnReDo = new NormalViewControl(300, 65, true);
btnReDo.IsBold = true;
btnReDo.TextColor = UserCenterColor.Current.White;
btnReDo.TextSize = 16;
btnReDo.Y = Application.GetRealHeight(49);
btnReDo.Gravity = Gravity.CenterHorizontal;
btnReDo.TextAlignment = TextAlignment.Center;
btnReDo.TextID = R.MyInternationalizationString.uReDoAgain;
frameback.AddChidren(btnReDo, ChidrenBindMode.BindEvent);
frameback.ButtonClickEvent += (sender, e) =>
{
//初始化初始中部控件
this.InitDefultMiddleFrame();
};
//返回网关管理
var btnGoBack = new BottomClickButton(688);
btnGoBack.Y = Application.GetRealHeight(1495);
btnGoBack.TextID = R.MyInternationalizationString.uGobackGatewayManage;
if (UserCenterResourse.DicActionForm.ContainsKey("GatewayListForm") == false)
{
//返回主页
btnGoBack.TextID = R.MyInternationalizationString.uGobackToHomePage;
}
bodyFrameLayout.AddChidren(btnGoBack);
btnGoBack.ButtonClickEvent += (sender, e) =>
{
this.CloseForm();
//关闭指定界面
this.CloseFormByFormName("NewGateWayMenuSelectForm");
};
}
#endregion
#region ■ 假想动画___________________________
///
/// 初始化连接的假想动画效果
///
private void InitConcetionAnimete()
{
//图标
var btnGwImage = new FrameLayout();
btnGwImage.Width = this.GetPictrueRealSize(852);
btnGwImage.Height = this.GetPictrueRealSize(478);
btnGwImage.Y = Application.GetRealHeight(193);
btnGwImage.Gravity = Gravity.CenterHorizontal;
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.TextColor = UserCenterColor.Current.TextGrayColor3;
btnMsg.TextAlignment = TextAlignment.Center;
bodyFrameLayout.AddChidren(btnMsg);
//首格的X轴
int firstPoint = this.GetPictrueRealSize(280);
//一格的宽度
int width = this.GetPictrueRealSize(22);
//间距大小
int space = this.GetPictrueRealSize(12);
//生成格子坐标
var listPoint = new List();
for (int i = 0; i < 9; i++)
{
listPoint.Add(firstPoint + (width + space) * i);
}
//开启连接的假想动画效果线程
var btnRound = new PicViewControl(width, width, false);
btnRound.Radius = (uint)width / 2;
btnRound.BackgroundColor = UserCenterColor.Current.ConcetionRoundColor;
btnRound.Y = this.GetPictrueRealSize(225);
btnRound.X = listPoint[0];
btnGwImage.AddChidren(btnRound);
string strMsg = btnMsg.Text;
HdlThreadLogic.Current.RunThread(() =>
{
int index = 1;
//计时时间
int timeCount = 0;
//超时时间
int timeOut = 240;
while (btnGwImage.Parent != null)
{
timeCount++;
if (timeCount == 10)
{
//5秒后清空网关列表
HdlGatewayLogic.Current.ClearAllRealGateway();
ZigBee.Common.Application.IsSearchingGateway = true;
}
if (timeCount % 2 == 0)
{
timeOut--;
}
if (this.newGatewayGetting == true || timeOut <= 0)
{
//获取得到新网关,则中断线程
break;
}
Application.RunOnMainThread(() =>
{
btnRound.X = listPoint[index];
index++;
if (index == listPoint.Count)
{
index = 0;
}
//正在搜索网关…XXs
btnMsg.Text = strMsg + timeOut + "s";
});
System.Threading.Thread.Sleep(500);
}
//搜索结束
this.isGatewaySearching = false;
if (timeOut <= 0)
{
HdlThreadLogic.Current.RunMain(() =>
{
//初始化失败模式的中部控件
this.InitFailMiddleFrame();
});
}
else if (newGatewayGetting == true)
{
HdlThreadLogic.Current.RunMain(() =>
{
if (this.Parent != null)
{
var form = new GatewayManage.GatewaySearchListForm();
this.AddFromAndRemoveNowForm(form, listZbGateway, dicZbGatewayDiv);
}
});
}
});
}
#endregion
#region ■ 网关检测___________________________
///
/// 开启网关检测的线程
///
private void StartCheckGatewayThread()
{
this.isGatewaySearching = true;
HdlThreadLogic.Current.RunThread(async () =>
{
int count = 0;
while (this.Parent != null && this.isGatewaySearching == true)
{
//每2秒检测搜索到的网关
System.Threading.Thread.Sleep(500);
count++;
if (count < 4)
{
//主要为了快一点能够中断这个线程
continue;
}
count = 0;
await this.CheckZbGatewayAndSetRow();
if (this.newGatewayGetting == true)
{
//获取得到新网关,则中断线程
break;
}
}
});
}
///
/// 检测搜索到的网关
///
private async Task CheckZbGatewayAndSetRow()
{
for (int i = 0; i < ZbGateway.GateWayList.Count; i++)
{
var way = ZbGateway.GateWayList[i];
var wayId = way.GwId;
if (dicZbGatewayDiv.ContainsKey(wayId) == true)
{
//已经处理了
continue;
}
//网关绑定模式
GatewayBindMode mode = GatewayBindMode.BindAgain;
//如果是第一次绑定,或者是以前已经绑定过了的
if (HdlGatewayLogic.Current.HomeIdIsEmpty(way) == true
|| way.HomeId == Common.Config.Instance.HomeId)
{
if (way.HomeId != Common.Config.Instance.HomeId)
{
//第一次绑定,也就是网关住宅ID为空
mode = GatewayBindMode.First;
}
else
{
//已经绑定过了
mode = GatewayBindMode.Binded;
}
//添加搜索到的网关到缓存(执行网关保存操作)
var result = await HdlGatewayLogic.Current.AddNewGateway(way, ShowErrorMode.NO);
if (result == false)
{
continue;
}
}
//收集网关对象
this.listZbGateway.Add(way);
//全部处理OK后,才能设置flage
if (mode == GatewayBindMode.First)
{
//第一次绑定
this.dicZbGatewayDiv[wayId] = 0;
//获取到了新网关
this.newGatewayGetting = true;
}
else if (mode == GatewayBindMode.Binded)
{
//已经绑定过
this.dicZbGatewayDiv[wayId] = 1;
}
else
{
//需要重新绑定
this.dicZbGatewayDiv[wayId] = 2;
//获取到了新网关
this.newGatewayGetting = true;
}
if (mode == GatewayBindMode.First || mode == GatewayBindMode.Binded)
{
//我觉得这里需要获取一下新网关的设备列表
Common.LocalDevice.Current.SetDeviceToMemmoryByGateway(way);
}
}
return true;
}
#endregion
#region ■ 界面关闭___________________________
///
/// 界面关闭
///
public override void CloseFormBefore()
{
ZigBee.Common.Application.IsSearchingGateway = false;
//停止Wi-Fi配网
HdlWifiLogic.Current.StopSmartConnection();
base.CloseFormBefore();
}
#endregion
}
}