using System; using HDL_ON.DAL.Server; using Shared; using System.Collections.Generic; using Newtonsoft.Json.Linq; namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice { public class PirMethod { /// /// 红外宝程序主入口 /// /// /// public void MainView(FrameLayout frame, Entity.Function function, Action action) { Pir pirDevice = new Pir(); if (function != null) {//数据转换 pirDevice.name = function.name; pirDevice.deviceId = function.deviceId; pirDevice.sid = function.sid; pirDevice.online = function.online; pirDevice.versions = function.versions; } Pir.currPir = pirDevice; GetControlList(frame, () => { Application.RunOnMainThread(() => { var page = new PirMain(); MainPage.BasePageView.AddChidren(page); page.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; PirMain.BackAction += () => { action?.Invoke(); PirMain.BackAction = null; }; }); }, Pir.currPir); } /// /// 管理位置 /// /// 当前设备 /// 回调函数 public void ManagementPosition(Entity.Function control, Action action) { var view = new ChooseRoomPage(control, action); MainPage.BasePageView.AddChidren(view); view.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } /// /// 修改名称 /// /// 提示标题文本 /// 当前存在名称列表 /// 当前名称 /// 回调函数 public void EditControlName(int tipText, List list, string currName, Action action, Action actionCancel, bool tag = false) { new View.TipView().InputBox(tipText, currName, StringId.nameNull, StringId.NameAlreadyExists, list, (text, view ) => { action(text, view); }, () => { actionCancel(); }, tag); } /// /// 添加遥控器的方法 /// /// log图标加载界面 /// 回调函数 public void AddControl(FrameLayout frameLayout, Action action) { View.TipView tipView = new View.TipView(); tipView.InputBox(frameLayout, "", (name, frame) => { if (Pir.currPir != null && Pir.currPir.FunctioList.Count < 10) { Control control = new Control(); control.name = name; control.type = "learn"; control.spk = "ir.learn"; control.deviceId = Pir.currPir.deviceId; ThreadAddControl(control, frame, action); } else { View.TipView tt = new View.TipView(); tt.TipBox(StringId.tip, StringId.bunengchaoguo10); } }, false); } /// /// 发送遥控器命令方法 /// /// 发送参数对象 /// log图标加载界面 /// 回调函数 public void ThreadAddControl(Control control, FrameLayout frame, Action action) { Cloud mqttdate = null; Loading loading = new Loading(); frame.AddChidren(loading); loading.Start(); new System.Threading.Thread(() => { try { //发送添加命令 var responsePackNew = PirSend.Add(control); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { string sid = responsePackNew.Data.ToString(); controldata = ""; mqttdate = MqttDate("遥控器", sid); if (mqttdate != null) { control.sid = sid; } } } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); ///这里:监听MTTP推送下来主题; if (mqttdate != null) { //休眠1000毫秒,为等待云端创建deviceid; System.Threading.Thread.Sleep(1000); //读取添加遥控器deviceID,才知道是否添加成功; GetControl(frame, control, (device) => { if (device != null) { control.deviceId = device.deviceId; //遥控器添加到列表; if (null == Pir.currPir.FunctioList.Find((c) => c.deviceId == device.deviceId)) { Pir.currPir.FunctioList.Add(device); } frame.RemoveFromParent();//添加成功关闭弹窗 action(control); } else { //监听Mqtt推送下来状态码做提示 View.FailView failView = new View.FailView(); failView.ShouError((view) => { view.Close(); ThreadAddControl(control, frame, action); }); } }); } else { //监听Mqtt推送下来状态码做提示 View.FailView failView = new View.FailView(); failView.ShouError((view) => { view.Close(); ThreadAddControl(control, frame, action); }); } }); } }) { IsBackground = true }.Start(); } /// /// 获取红外设备列表 /// /// log图标加载界面 /// 回调函数 public static void GetPirDeviceList(FrameLayout frame, Action action) { //清除之前列表; Pir.pirDeviceList.Clear(); //加载log Loading loading = new Loading(); frame.AddChidren(loading); loading.Start(); new System.Threading.Thread(() => { try { var responsePackNew = PirSend.GetDeviceList("ir.module"); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { var jobject = Newtonsoft.Json.Linq.JObject.Parse(responsePackNew.Data.ToString()); string list = jobject["list"].ToString(); var jArray = Newtonsoft.Json.Linq.JArray.Parse(list); for (int a = 0; a < jArray.Count; a++) { var jay = jArray[a]; string spk = jay["spk"].ToString(); if (spk == "ir.module") { //数据返序列化为Logic对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay); var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject(str); if (pirJosn != null) { if (null == PirDevice.Pir.pirDeviceList.Find((c) => c.deviceId == pirJosn.deviceId)) { PirDevice.Pir.pirDeviceList.Add(pirJosn); } } } } } } catch { } finally { Application.RunOnMainThread(() => { try { if (Pir.pirDeviceList.Count != 0) { GetControlList(() => { loading.Hide(); action(); }); } else { loading.Hide(); PirMethod method = new PirMethod(); method.ErrorShow(null, "读取红外宝列表失败"); } } catch { } }); } }) { IsBackground = true }.Start(); } /// /// 获取所有红外宝遥控器列表 /// /// 回调函数 public static void GetControlList(Action action) { new System.Threading.Thread(() => { try { for (int i = 0; i < Pir.pirDeviceList.Count; i++) { var pirDevice = Pir.pirDeviceList[i]; try { var responsePackNew = PirSend.ControlList(pirDevice.deviceId); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { var jArray = JArray.Parse(responsePackNew.Data.ToString()); for (int a = 0; a < jArray.Count; a++) { var jay = jArray[a]; //数据返序列化为Logic对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay); var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject(str); if (pirJosn != null) { if (null == pirDevice.FunctioList.Find((c) => c.sid == pirJosn.sid)) { pirDevice.FunctioList.Add(pirJosn); } } } } } catch { } } } catch { } finally { Application.RunOnMainThread(() => { action(); }); } }) { IsBackground = true }.Start(); } /// /// 获取单个红外宝遥控器列表 /// /// 回调函数 public static void GetControlList(FrameLayout frame, Action action, Pir pirDevice) { ThreadSend(new Control { deviceId = pirDevice.deviceId }, (responsePackNew) => { var jArray = JArray.Parse(responsePackNew.Data.ToString()); for (int a = 0; a < jArray.Count; a++) { var jay = jArray[a]; //数据返序列化为Logic对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay); var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject(str); if (pirJosn != null) { if (null == pirDevice.FunctioList.Find((c) => c.deviceId == pirJosn.deviceId)) { pirDevice.FunctioList.Add(pirJosn); } } } action(); }, "获取遥控器列表", "frame", frame, null); } /// /// 获取设备详情通过(spk,sid) /// /// log图标加载界面 /// 发送参数对象 /// 回调函数 public void GetControl(FrameLayout frame, Control control, Action action) { ThreadSend(control, (responsePackNew) => { var function = Newtonsoft.Json.JsonConvert.DeserializeObject(responsePackNew.Data.ToString()); action(function); }, "获取设备详情", "frame", frame, null); } /// /// 发送命令线程 /// /// 发送数据对象 /// 回调函数 /// 判断字符 /// 判断log父控件 /// log父控件 /// log父控件 /// 学习按键 public static void ThreadSend(Control control, Action action, string str, string view, FrameLayout frame, Dialog dialog, Entity.AttributesStatus attributesStatus = null) { //加载log Loading loading = new Loading(); if (view == "dialog") { dialog.AddChidren(loading); } else { frame.AddChidren(loading); } loading.Start(); ResponsePackNew responsePackNew = null; new System.Threading.Thread(() => { try { if (str == "删除") { responsePackNew = PirSend.DeleteDevice(control.deviceId); } else if (str == "修改名称") { responsePackNew = PirSend.DeviceRename(control.deviceId, control.name); } else if (str == "删除按键") { if (attributesStatus != null) { responsePackNew = PirSend.CodeRemove(attributesStatus, control.deviceId); } } else if (str == "获取设备详情") { // 获取设备详情通过(spk,sid) responsePackNew = PirSend.GetinfoBySid(control); } else if (str == "获取遥控器列表") { responsePackNew = PirSend.ControlList(control.deviceId); } else if (str == "库码测试") { responsePackNew = PirSend.CodeTest(control); } } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { action(responsePackNew); } else { PirMethod method = new PirMethod(); //自定义错误提示文本 string eorroText = ""; if (str == "删除") { } else if (str == "修改名称") { } else if (str == "删除按键") { } else if (str == "获取设备详情") { } else if (str == "获取遥控器列表") { } else if (str == "库码测试") { } method.ErrorShow(responsePackNew, eorroText); } }); } }) { IsBackground = true }.Start(); } /// /// MQTT主题推送下来的遥控器数据 /// public static string controldata = ""; /// /// MQTT主题推送下来按键的数据 /// public static string buttondata = ""; /// /// 判断这个主题是否是添加遥控器主题 /// /// 表示不同主题数据 /// 唯一标识 /// 等待时间值 /// public Cloud MqttDate(string text, string sid, int timeValue = 10) { Cloud cloud = null; var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < timeValue * 1000) { string str = ""; if (text == "遥控器") { str = controldata; } else if (text == "按键") { str = buttondata; } if (!string.IsNullOrEmpty(str)) { try { var cloudjson = Newtonsoft.Json.JsonConvert.DeserializeObject(str); for (int i = 0; i < cloudjson.objects.Count; i++) { var objects = cloudjson.objects[i]; if (sid == objects.sid) { cloud = cloudjson; break; } } if (cloud != null) { break; } } catch { } } } return cloud; } /// /// 错误码提示 /// /// /// 自定义错误文本 /// 弹框类型(1=闪烁弹框) public void ErrorShow(ResponsePackNew responsePackNew, string text, int popValue = 1) { string str = ""; if (text == "删除遥控器") { str = Language.StringByID(StringId.delFail); } else if (text == "读取红外宝列表失败") { str = Language.StringByID(StringId.huoqushujushibao); } else if (text == "添加失败") { str = Language.StringByID(StringId.tianjiashibai); } else { if (responsePackNew != null) { switch (responsePackNew.Code) { case "14005": { str = Language.StringByID(StringId.gatewayNotOnline); } break; case "10807": { str = Language.StringByID(StringId.bunengchaoguo10); } break; case "14002": { str = Language.StringByID(StringId.bucunzaichanpin); } break; case "10805": { str = Language.StringByID(StringId.shebeibucunzai); } break; case "14006": { str = Language.StringByID(StringId.shebeibuzaixian); } break; case "9": { str = Language.StringByID(StringId.wangguanshebeibuzaixian); } break; case "2": { str = Language.StringByID(StringId.xitongweihuzhong); } break; default: { str = Language.StringByID(StringId.huoqushujushibao); } break; } } } switch (popValue) { case 1: { new Intelligence.Automation.LogicView.TipPopView().FlashingBox(str); } break; case 2: { } break; case 3: { } break; } } /// ///指定刷新界面 /// /// 判断字符 public static void RefreshView(string strView) { //标记是不是已经刷新完成 bool if_bool = false; for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--) { var view = MainPage.BasePageView.GetChildren(i); if (strView == "PirMain") { if (view.GetType() == typeof(PirMain)) { //强制转换对象 var f = (PirMain)view; //移除所有子控件 f.RemoveAll(); //重新加载UI f.Show(); //退出for循环 //break; if_bool = true; } } if (if_bool) { //退出for循环 break; } } } /// /// 指定删除界面 /// /// 判断字符 public static void RemoveView(string strView) { for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--) { var view = MainPage.BasePageView.GetChildren(i); if (strView == "PirMain") { if (view.GetType() == typeof(PirMain)) { //移除界面 view.RemoveFromParent(); } } else if (strView == "AddControl") { if (view.GetType() == typeof(AddControl)) { //找到移除 view.RemoveFromParent(); } } else if (strView == "AddControlComplete") { if (view.GetType() == typeof(AddControlComplete)) { //找到移除 view.RemoveFromParent(); } } } } } [Serializable] public class Cloud { public string id = ""; public List objects = new List(); public string time_stamp = string.Empty; } [Serializable] public class Objects { public string sid = string.Empty; public string spk = string.Empty; public List attributes = new List(); } [Serializable] public class Attributes { public string key = ""; public string data_type = ""; public List value = new List(); } }