wxr
2021-03-08 8e5ba5665861b29a4b8da0335c81d620aa891862
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs
@@ -1,6 +1,8 @@
using System;
using HDL_ON.DAL.Server;
using Shared;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
@@ -9,37 +11,39 @@
        /// <summary>
        /// 添加遥控器的方法
        /// </summary>
        public void AddControl()
        public void AddControl(FrameLayout frameLayout, Action<Control> action)
        {
            View.TipView tipView = new View.TipView();
            tipView.InputBox("", (s, dialog) =>
            {
                ///清除之前列表数据
                Pir.BuottonList.Clear();
                if (!string.IsNullOrEmpty(s))
                {
                    Control control = new Control();
                    control.name = s;
                    control.type = "learn";
                    ThreadAddControl(control,dialog);
            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);
                 }
             }, false);
        }
        /// <summary>
        /// 发送遥控器命令方法
        /// </summary>
        /// <param name="control"></param>
        /// <param name="dialog"></param>
        public void ThreadAddControl(Control control, Dialog dialog) {
        /// <param name="frame"></param>
        public void ThreadAddControl(Control control, FrameLayout frame, Action<Control> action)
        {
            DAL.Server.ResponsePackNew responsePackNew = null;
            Loading loading = new Loading();
            dialog.AddChidren(loading);
            frame.AddChidren(loading);
            loading.Start();
            new System.Threading.Thread(() =>
            {
@@ -53,37 +57,235 @@
                    Application.RunOnMainThread(() =>
                    {
                        loading.Hide();
                        //if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
                        //{
                            ///这里:监听MTTP推送下来主题,才知道是否添加成功
                            dialog.Close();//添加成功关闭弹窗
                            AddButton addButton = new AddButton();
                            MainPage.BasePageView.AddChidren(addButton);
                            addButton.Show(control);
                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        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)
                            {
                                control.deviceId = mqttdate.id;
                                ///这里:监听MTTP推送下来主题,才知道是否添加成功
                                frame.RemoveFromParent();//添加成功关闭弹窗
                                action(control);
                            }
                            else
                            {
                                //监听Mqtt推送下来状态码做提示
                                View.FailView failView = new View.FailView();
                                failView.ShouError((view) =>
                                {
                                    view.Close();
                                    ThreadAddControl(control, frame, action);
                                });
                            }
                            //监听Mqtt推送下来状态码做提示
                            //View.FailView failView = new View.FailView();
                            //failView.ShouError((view) => {
                            //    view.Close();
                            //    ThreadAddControl(control, dialog);
                            //});
                        //}
                        //else
                        //{
                        //    ErrorShow(responsePackNew);
                        //}
                        }
                        else
                        {
                            ErrorShow(responsePackNew);
                        }
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 获取红外设备列表
        /// </summary>
        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<Pir>(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();
        }
        /// <summary>
        /// 获取遥控器列表
        /// </summary>
        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<Entity.Function>(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();
        }
        /// <summary>
        /// MQTT主题推送下来的数据(遥控器添加)
        /// </summary>
        public static string addcontronsid = "";
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        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<Cloud>(addcontronsid);
            }
            return cloud;
        }
        /// <summary>
        /// 错误码提示
        /// </summary>
        /// <param name="responsePackNew"></param>
        public  void ErrorShow(ResponsePackNew responsePackNew)
        public void ErrorShow(ResponsePackNew responsePackNew)
        {
            if (responsePackNew != null && responsePackNew.Code == "14005")
@@ -97,5 +299,25 @@
            }
        }
    }
    [Serializable]
    public class Cloud
    {
        /// <summary>
        /// 设备id
        /// </summary>
        public string id = string.Empty;
        public List<Objects> objects = new List<Objects>();
        public string time_stamp = string.Empty;
    }
    [Serializable]
    public class Objects
    {
        public string sid = string.Empty;
        public string spk = string.Empty;
    }
}