using HDL_ON.Stan;
|
using Shared;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace HDL_ON.UI
|
{
|
/// <summary>
|
/// 添加Evoyo的Mini智能遥控器步骤4界面
|
/// </summary>
|
public class AddMiniRemoteControlDirection4Page : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// wifi名字
|
/// </summary>
|
private string wifiName = string.Empty;
|
/// <summary>
|
/// wifi密码
|
/// </summary>
|
private string wifiPsw = string.Empty;
|
/// <summary>
|
/// 新设备的sid(用来匹配哪一个设备是新的)
|
/// </summary>
|
private string newDeviceSid = string.Empty;
|
/// <summary>
|
/// 超时线程是否运行
|
/// </summary>
|
private bool timeoutThreadActivity = false;
|
/// <summary>
|
/// 上传到云的图标
|
/// </summary>
|
private IconViewControl btnClound = null;
|
/// <summary>
|
/// 上传到云
|
/// </summary>
|
private NormalViewControl btnCloundView = null;
|
/// <summary>
|
/// 连接成功的图标
|
/// </summary>
|
private IconViewControl btnConnect = null;
|
/// <summary>
|
/// 连接成功
|
/// </summary>
|
private NormalViewControl btnConnetView = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_wifiName">wifi名字</param>
|
/// <param name="i_wifiPsw">wifi密码</param>
|
public void ShowForm(string i_wifiName, string i_wifiPsw)
|
{
|
this.wifiName = i_wifiName;
|
this.wifiPsw = i_wifiPsw;
|
|
//设置头部信息
|
base.SetTitleText(Language.StringByID(StringId.AddInfraredRemoteControl));
|
//这个界面的背景需要白色
|
bodyFrameLayout.BackgroundColor = UI.CSS.CSS_Color.MainBackgroundColor;
|
|
//添加接收蓝牙反馈的事件
|
HdlBluetoothLogic.Current.AddReceiveEvent(this.BluetoothReceiveEvent);
|
|
//添加云端反馈事件
|
HdlCloudReceiveLogic.Current.AddCloudReceiveEvent("AddMiniRemoteControlDirection4Page", this.CloudReceiveEvent);
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
private void InitMiddleFrame()
|
{
|
//清空body
|
this.ClearBodyFrame();
|
//图片
|
var btnPic = new PicViewControl(282, 121);
|
btnPic.Y = Application.GetRealHeight(122);
|
btnPic.Gravity = Gravity.CenterHorizontal;
|
btnPic.UnSelectedImagePath = "PersonalCenter/AddDevice/WifiAndPhoneConnect.png";
|
bodyFrameLayout.AddChidren(btnPic);
|
//正在连接中...
|
var btnSearch = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(20), false);
|
btnSearch.Y = btnPic.Bottom + Application.GetRealHeight(40);
|
btnSearch.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
|
btnSearch.TextID = StringId.NowConnectting;
|
btnSearch.TextAlignment = TextAlignment.Center;
|
bodyFrameLayout.AddChidren(btnSearch);
|
//请让红外遥控尽量接近WIFI路由器
|
var strMsg = Language.StringByID(StringId.AddInfraredRemoteControlMsg5);
|
this.AddListMsgControls(bodyFrameLayout, strMsg, CSS.CSS_FontSize.TextFontSize,
|
CSS.CSS_Color.PromptingColor1, Application.GetRealHeight(20), btnSearch.Bottom + Application.GetRealHeight(4));
|
|
//网络连接中
|
var btnNetIcon = new IconViewControl(20);
|
btnNetIcon.X = Application.GetRealWidth(60);
|
btnNetIcon.Y = btnPic.Bottom + Application.GetRealHeight(265);
|
btnNetIcon.UnSelectedImagePath = "PersonalCenter/AddDevice/NetConnectSelect.png";
|
bodyFrameLayout.AddChidren(btnNetIcon);
|
var btnNetView = new NormalViewControl(140, 18, true);//左右间距40再加文本60
|
btnNetView.Y = btnNetIcon.Bottom + Application.GetRealHeight(16);
|
btnNetView.TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel;
|
btnNetView.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
|
btnNetView.TextAlignment = TextAlignment.Center;
|
btnNetView.TextID = StringId.InTheNetworkLink;
|
bodyFrameLayout.AddChidren(btnNetView);
|
|
//一条横线
|
var btnLine1 = new NormalViewControl(Application.GetRealWidth(92), 2, false);
|
btnLine1.X = btnNetIcon.Right + Application.GetRealWidth(3);
|
btnLine1.Y = btnNetIcon.Y + (btnNetIcon.Height + 2) / 2;
|
btnLine1.BackgroundColor = CSS.CSS_Color.PromptingColor1;
|
bodyFrameLayout.AddChidren(btnLine1);
|
|
//上传到云
|
this.btnClound = new IconViewControl(20);
|
btnClound.Gravity = Gravity.CenterHorizontal;
|
btnClound.Y = btnNetIcon.Y;
|
btnClound.UnSelectedImagePath = "PersonalCenter/AddDevice/UploadToClound.png";
|
btnClound.SelectedImagePath = "PersonalCenter/AddDevice/UploadToCloundSelect.png";
|
bodyFrameLayout.AddChidren(btnClound);
|
this.btnCloundView = new NormalViewControl(btnNetView.Width, btnNetView.Height, false);
|
btnCloundView.Y = btnNetView.Y;
|
btnCloundView.Gravity = Gravity.CenterHorizontal;
|
btnCloundView.TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel;
|
btnCloundView.TextColor = CSS.CSS_Color.PromptingColor1;
|
btnCloundView.TextAlignment = TextAlignment.Center;
|
btnCloundView.TextID = StringId.UploadToCloud;
|
bodyFrameLayout.AddChidren(btnCloundView);
|
|
//一条横线
|
var btnLine2 = new NormalViewControl(btnLine1.Width, btnLine1.Height, false);
|
btnLine2.X = btnClound.Right + Application.GetRealWidth(3);
|
btnLine2.Y = btnLine1.Y;
|
btnLine2.BackgroundColor = CSS.CSS_Color.PromptingColor1;
|
bodyFrameLayout.AddChidren(btnLine2);
|
|
//连接成功
|
this.btnConnect = new IconViewControl(20);
|
btnConnect.X = bodyFrameLayout.Width - btnNetIcon.X - btnConnect.IconSize;
|
btnConnect.Y = btnNetIcon.Y;
|
btnConnect.UnSelectedImagePath = "PersonalCenter/AddDevice/ConnectSuccess.png";
|
btnConnect.SelectedImagePath = "PersonalCenter/AddDevice/ConnectSuccessSelect.png";
|
bodyFrameLayout.AddChidren(btnConnect);
|
this.btnConnetView = new NormalViewControl(btnNetView.Width, btnNetView.Height, false);
|
btnConnetView.X = bodyFrameLayout.Width - btnNetView.Width - btnNetView.X;
|
btnConnetView.Y = btnNetView.Y;
|
btnConnetView.TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel;
|
btnConnetView.TextColor = CSS.CSS_Color.PromptingColor1;
|
btnConnetView.TextAlignment = TextAlignment.Center;
|
btnConnetView.TextID = StringId.ConnectSuccess;
|
bodyFrameLayout.AddChidren(btnConnetView);
|
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
System.Threading.Thread.Sleep(2000);
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//发送账号和密码给蓝牙
|
this.SendAccountAndPswToBluetooth();
|
});
|
//启动超时线程
|
this.StartTimeoutThread();
|
});
|
}
|
|
#endregion
|
|
#region ■ 显示成功界面_______________________
|
|
/// <summary>
|
/// 显示成功界面
|
/// </summary>
|
private void ShowSuccessView(Entity.Function newDevice)
|
{
|
//清空body
|
this.ClearBodyFrame();
|
|
//图片
|
var btnPic = new PicViewControl(180, 180);
|
btnPic.Y = Application.GetRealHeight(48);
|
btnPic.Gravity = Gravity.CenterHorizontal;
|
btnPic.UnSelectedImagePath = "Public/TipIcon_Successfully.png";
|
bodyFrameLayout.AddChidren(btnPic);
|
|
//添加成功
|
var btnFail = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(22), false);
|
btnFail.Y = btnPic.Bottom + Application.GetRealHeight(16);
|
btnFail.TextSize = CSS.CSS_FontSize.SubheadingFontSize;
|
btnFail.TextColor = CSS.CSS_Color.MainColor;
|
btnFail.TextAlignment = TextAlignment.Center;
|
btnFail.TextID = StringId.AddSuccess;
|
bodyFrameLayout.AddChidren(btnFail);
|
|
//可以开始使用红外遥控功能!
|
var strMsg = Language.StringByID(StringId.AddInfraredRemoteControlMsg7);
|
int yy = this.AddListMsgControls(bodyFrameLayout, strMsg, CSS.CSS_FontSize.TextFontSize, CSS.CSS_Color.TextualColor,
|
Application.GetRealHeight(20), btnFail.Bottom + Application.GetRealHeight(8));
|
|
//开始使用
|
var btnUse = new BottomClickButton(220);
|
btnUse.Y = yy + Application.GetRealHeight(60);
|
btnUse.TextID = StringId.StartUse;
|
bodyFrameLayout.AddChidren(btnUse);
|
btnUse.ButtonClickEvent += (sender, e) =>
|
{
|
if (newDevice == null)
|
{
|
//关闭掉全部的界面,应该不会发生
|
HdlFormLogic.Current.CloseAllOpenForm();
|
return;
|
}
|
var form = HdlFormLogic.Current.GetFormByName("AddMiniRemoteControlDirection1Page") as AddMiniRemoteControlDirection1Page;
|
//if (form.AddDeviceEvent != null)
|
{
|
//代表这个是由温总那边调用的,直接回调函数
|
form.AddDeviceEvent?.Invoke(newDevice);
|
//关闭掉这个界面
|
this.CloseForm();
|
//再把AddMiniRemoteControlDirection1Page界面关了
|
HdlFormLogic.Current.CloseFormByFormName("AddMiniRemoteControlDirection1Page");
|
}
|
//else
|
//{
|
// //代表这并不是由温总的界面调用的,则关闭掉全部的界面
|
// HdlFormLogic.Current.CloseAllOpenForm();
|
// //然后再把温总的界面new起来
|
// new UI2.PersonalCenter.PirDevice.Method().MainView(this, newDevice,()=> { });
|
//}
|
};
|
}
|
|
#endregion
|
|
#region ■ 显示失败界面_______________________
|
|
/// <summary>
|
/// 显示失败界面
|
/// </summary>
|
private void ShowFailView()
|
{
|
//清空body
|
this.ClearBodyFrame();
|
|
//图片
|
var btnPic = new PicViewControl(180, 180);
|
btnPic.Y = Application.GetRealHeight(48);
|
btnPic.Gravity = Gravity.CenterHorizontal;
|
btnPic.UnSelectedImagePath = "Public/TipIcon_Failed.png";
|
bodyFrameLayout.AddChidren(btnPic);
|
|
//添加失败
|
var btnFail = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(22), false);
|
btnFail.Y = btnPic.Bottom + Application.GetRealHeight(16);
|
btnFail.TextSize = CSS.CSS_FontSize.SubheadingFontSize;
|
btnFail.TextColor = CSS.CSS_Color.AuxiliaryColor2;
|
btnFail.TextAlignment = TextAlignment.Center;
|
btnFail.TextID = StringId.AddFail;
|
bodyFrameLayout.AddChidren(btnFail);
|
//1、请检查设备是否正常通电
|
//2、请开启蓝牙功能
|
//3、并长按按钮10s,指示灯常亮
|
var strMsg = Language.StringByID(StringId.AddInfraredRemoteControlMsg6);
|
this.AddListMsgControls(bodyFrameLayout, strMsg, CSS.CSS_FontSize.TextFontSize, CSS.CSS_Color.TextualColor,
|
Application.GetRealHeight(20), btnFail.Bottom + Application.GetRealHeight(8),
|
TextAlignment.Center, true);
|
|
//重试
|
var btnReDo = this.AddBottomClickButton(Language.StringByID(StringId.Retry));
|
btnReDo.ButtonClickEvent += (sender, e) =>
|
{
|
//重新初始化中部信息
|
this.CloseForm();
|
var form = new AddMiniRemoteControlDirection2Page();
|
form.AddForm(this.wifiName, this.wifiPsw);
|
};
|
}
|
|
#endregion
|
|
#region ■ 发送账号和密码给蓝牙_______________
|
|
/// <summary>
|
/// 发送账号和密码给蓝牙
|
/// </summary>
|
private void SendAccountAndPswToBluetooth()
|
{
|
//获取发送到蓝牙的数据
|
var sendData = this.GetSendToBluetoothData();
|
//不等待
|
HdlBluetoothLogic.Current.SendData(sendData);
|
}
|
|
#endregion
|
|
#region ■ 红外宝相关方法_____________________
|
|
/// <summary>
|
/// 检测是否是新的红外宝
|
/// </summary>
|
/// <param name="pushEnum">推送枚举</param>
|
/// <param name="i_data">推送的数据</param>
|
/// <returns></returns>
|
private bool CheckIsNewMiniRemoteControl(CloudPushEnum pushEnum, string i_data)
|
{
|
if (pushEnum != CloudPushEnum.A新设备上报) { return false; }
|
|
try
|
{
|
var strSpk = string.Empty;
|
//转为json
|
var json = Newtonsoft.Json.Linq.JObject.Parse(i_data);
|
var linqArry = json["objects"] as Newtonsoft.Json.Linq.JArray;
|
if (linqArry != null)
|
{
|
//数组类型
|
if (linqArry.Count == 0) { return false; }
|
strSpk = linqArry[0]["spk"].ToString();
|
this.newDeviceSid = linqArry[0]["sid"].ToString();
|
}
|
else
|
{
|
//非数组类型
|
strSpk = json["objects"]["spk"].ToString();
|
this.newDeviceSid = json["objects"]["sid"].ToString();
|
}
|
if (strSpk != Entity.SPK.IrModule)
|
{
|
//如果不是红外宝的话
|
return false;
|
}
|
return true;
|
}
|
catch { return false; }
|
}
|
|
/// <summary>
|
/// 刷新红外宝信息
|
/// </summary>
|
/// <param name="successEvent">成功的回调事件</param>
|
private void RefreshMiniRemoteControlInfo(Action<Entity.Function> successEvent)
|
{
|
var pra = new Dictionary<string, object>();
|
pra.Add("homeId", Entity.DB_ResidenceData.Instance.CurrentRegion.RegionID);
|
pra.Add("spk", Entity.SPK.IrModule);
|
|
var requestJson = DAL.Server.HttpUtil.GetSignRequestJson(pra);
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
int count = 0;
|
while (this.Parent != null)
|
{
|
try
|
{
|
//超过5次都不成功,真不处理了
|
count++;
|
if (count > 5) { return; }
|
|
//获取全部红外宝列表
|
var result = DAL.Server.HttpUtil.RequestHttpsPostFroHome(DAL.Server.NewAPI.Api_Post_GetDevcieList, requestJson);
|
if (result == null || result.Code != DAL.Server.StateCode.SUCCESS)
|
{
|
System.Threading.Thread.Sleep(3000);
|
continue;
|
}
|
var listDevice = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.DevcieApiPack>(result.Data.ToString());
|
Entity.Function newDevice = null;
|
foreach (var newFunction in listDevice.list)
|
{
|
//添加到缓存当中
|
newFunction.SaveFunctionFile();
|
Entity.FunctionList.List.IniFunctionList(newFunction.savePath, true);
|
if (newFunction.sid == this.newDeviceSid)
|
{
|
//这个设备是新追加的
|
newDevice = newFunction;
|
}
|
}
|
//调用回调函数
|
successEvent?.Invoke(newDevice);
|
return;
|
}
|
catch
|
{
|
System.Threading.Thread.Sleep(3000);
|
}
|
}
|
});
|
}
|
|
#endregion
|
|
#region ■ 云端反馈___________________________
|
|
/// <summary>
|
/// 云端反馈
|
/// </summary>
|
/// <param name="pushEnum">枚举</param>
|
/// <param name="i_data">推送的内容</param>
|
private void CloudReceiveEvent(CloudPushEnum pushEnum, string i_data)
|
{
|
//检测是否是新的红外宝
|
if (this.CheckIsNewMiniRemoteControl(pushEnum, i_data) == false)
|
{
|
return;
|
}
|
//刷新红外宝信息
|
this.RefreshMiniRemoteControlInfo((Entity.Function newDevice) =>
|
{
|
//移除这个事件
|
HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
|
//停止线程
|
this.timeoutThreadActivity = false;
|
|
//添加设备成功之后,处理一些东西
|
this.DoSomethingAfterAddDeviceSuccess(newDevice);
|
});
|
}
|
|
/// <summary>
|
/// 添加设备成功之后,处理一些东西
|
/// </summary>
|
private void DoSomethingAfterAddDeviceSuccess(Entity.Function newDevice)
|
{
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
//整点特效而已
|
for (int i = 1; i <= 6; i++)
|
{
|
System.Threading.Thread.Sleep(1000);
|
if (i == 1)
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//整点特效而已
|
this.btnClound.IsSelected = true;
|
this.btnCloundView.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
|
});
|
}
|
else if (i == 4)
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//整点特效而已
|
this.btnConnect.IsSelected = true;
|
this.btnConnetView.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
|
});
|
}
|
else if (i == 6)
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//显示成功界面
|
this.ShowSuccessView(newDevice);
|
});
|
}
|
}
|
});
|
}
|
|
#endregion
|
|
#region ■ 蓝牙反馈___________________________
|
|
/// <summary>
|
/// 蓝牙反馈
|
/// </summary>
|
/// <param name="i_receviceData">蓝牙反馈的数据</param>
|
private void BluetoothReceiveEvent(string i_receviceData)
|
{
|
#if DEBUG
|
System.Console.WriteLine("蓝牙返回:" + i_receviceData);
|
#endif
|
}
|
|
#endregion
|
|
#region ■ 超时线程___________________________
|
|
/// <summary>
|
/// 启动超时线程
|
/// </summary>
|
private void StartTimeoutThread()
|
{
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
//360秒超时
|
int timeout = 360;
|
while (this.timeoutThreadActivity == false && this.Parent != null)
|
{
|
System.Threading.Thread.Sleep(1000);
|
timeout--;
|
if (timeout == 0)
|
{
|
break;
|
}
|
}
|
if (timeout <= 0)
|
{
|
//显示失败界面
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
this.ShowFailView();
|
});
|
}
|
});
|
}
|
|
#endregion
|
|
#region ■ 界面关闭___________________________
|
|
/// <summary>
|
/// 界面关闭
|
/// </summary>
|
public override void CloseFormBefore()
|
{
|
//摧毁蓝牙
|
HdlBluetoothLogic.Current.Dispone();
|
HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
|
|
base.CloseFormBefore();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取发送到蓝牙的数据
|
/// </summary>
|
/// <returns></returns>
|
private string GetSendToBluetoothData()
|
{
|
var pra = new { id = "id010203", ssid = this.wifiName, password = this.wifiPsw };
|
var praData = Newtonsoft.Json.JsonConvert.SerializeObject(pra);
|
|
var sendData = "Topic:/user/id/custom/wifi/set\r\n";
|
sendData += "Length:" + praData.Length + "\r\n\r\n";
|
sendData += praData;
|
return sendData;
|
}
|
|
#endregion
|
}
|
}
|