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 Method { /// /// 添加遥控器的方法 /// public void AddControl(FrameLayout frameLayout, Action action) { View.TipView tipView = new View.TipView(); tipView.InputBox(frameLayout, "", (name, frame) => { ///清除之前列表数据 Pir.BuottonList.Clear(); if (!string.IsNullOrEmpty(name)) { Control control = new Control(); control.name = name; control.type = "learn"; control.spk = "ir.learn"; control.deviceId = Pir.currPir.deviceId; ThreadAddControl(control, frame, action); } }, false); } /// /// 发送遥控器命令方法 /// /// /// public void ThreadAddControl(Control control, FrameLayout frame, Action action) { DAL.Server.ResponsePackNew responsePackNew = null; Loading loading = new Loading(); frame.AddChidren(loading); loading.Start(); new System.Threading.Thread(() => { try { responsePackNew = PirSend.Add(control); } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { bool bool_if = false; string sid = responsePackNew.Data.ToString(); var mqttdate = MqttDate(); for (int i = 0; i < mqttdate.objects.Count; i++) { var objects = mqttdate.objects[i]; if (sid == objects.sid) { bool_if = true; break; } } if (bool_if) { ///这里:监听MTTP推送下来主题,才知道是否添加成功 frame.RemoveFromParent();//添加成功关闭弹窗 control.deviceId = mqttdate.id; action(control); } else { //监听Mqtt推送下来状态码做提示 View.FailView failView = new View.FailView(); failView.ShouError((view) => { view.Close(); ThreadAddControl(control, frame, action); }); } } else { ErrorShow(responsePackNew); } }); } }) { IsBackground = true }.Start(); } /// /// 获取红外设备列表 /// public static void GetPirDeviceList(FrameLayout frame, Action action) { //清除之前列表; Pir.pirDeviceList.Clear(); //加载log Loading loading = new Loading(); frame.AddChidren(loading); HDL_ON.DAL.Server.ResponsePackNew responsePackNew = null; loading.Start(); new System.Threading.Thread(() => { try { responsePackNew = PirSend.GetDeviceList("ir.module"); } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); try { 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 == Pir.pirDeviceList.Find((c) => c.deviceId == pirJosn.deviceId)) { Pir.pirDeviceList.Add(pirJosn); } } } } GetControlList(frame, action); } else { Method method = new Method(); method.ErrorShow(responsePackNew); } } catch { } }); } }) { IsBackground = true }.Start(); } /// /// 获取遥控器列表 /// public static void GetControlList(FrameLayout frame, Action action) { //加载log Loading loading = new Loading(); frame.AddChidren(loading); HDL_ON.DAL.Server.ResponsePackNew responsePackNew = null; loading.Start(); new System.Threading.Thread(() => { try { for (int i = 0; i < Pir.pirDeviceList.Count; i++) { var pirDevice = Pir.pirDeviceList[i]; try { responsePackNew = PirSend.ControlList(pirDevice); } catch { } finally { Application.RunOnMainThread(() => { try { if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { var jArray = Newtonsoft.Json.Linq.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); } } } } else { //Method method = new Method(); //method.ErrorShow(responsePackNew); } } catch { } }); } } } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); action(); }); } }) { IsBackground = true }.Start(); } /// /// MQTT主题推送下来的数据(遥控器添加) /// public static string addcontronsid = ""; /// /// /// /// public Cloud MqttDate() { var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 5 * 1000) { if (!string.IsNullOrEmpty(addcontronsid)) { break; } } return PushData(); } public Cloud PushData() { Cloud cloud = new Cloud(); if (addcontronsid != "") { //var date = Newtonsoft.Json.JsonConvert.SerializeObject(addcontronsid); cloud = Newtonsoft.Json.JsonConvert.DeserializeObject(addcontronsid); } return cloud; } /// /// 错误码提示 /// /// public void ErrorShow(ResponsePackNew responsePackNew) { if (responsePackNew != null && responsePackNew.Code == "14005") { new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.gatewayNotOnline)); } else { new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.saveFail)); } } } [Serializable] public class Cloud { /// /// 设备id /// public string id = string.Empty; 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; } }