wxr
2021-08-21 264f86c363a6a019fac8eb138877fee9e4734e2d
Merge branch 'WJC' into wxr7
2个文件已添加
13个文件已修改
971 ■■■■■ 已修改文件
HDL-ON_Android/Assets/Language.ini 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/LogicIcon/security.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/LogicIcon/security.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/AddTarget.cs 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/MainView.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini
@@ -810,43 +810,7 @@
6095=More than 30 add buttons
 
 
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
7134=Target State
7135=Tumble
7136=Temperature
7137=Humidity
7138=PM2.5
7139=CO2
7140=TVOC
7141=Exceeding
7142=Serious
7143=High
7144=excellence
 
 
6000=Rename
@@ -975,6 +939,46 @@
7105=Light pollution: 75 ~ 115ug/m3
7106=Moderate pollution: 115 ~ 150ug/m3
7107=Heavy pollution: > 150ug/m3
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
7134=Target State
7135=Tumble
7136=Temperature
7137=Humidity
7138=PM2.5
7139=CO2
7140=TVOC
7141=Exceeding
7142=Serious
7143=High
7144=excellence
7145=Security
7146=Add security
7146=添加安防
    
9000=Please sign in with new cell phone number.
9001=Please sign in with new email address.
@@ -2041,6 +2045,7 @@
7142=严重
7143=偏高
7144=优秀
7145=安防
 
9000=请使用新的手机账号登录APP
9001=请使用新的邮箱账号登录APP
HDL-ON_Android/Assets/Phone/LogicIcon/security.png
HDL-ON_iOS/Resources/Language.ini
@@ -824,43 +824,7 @@
6095=More than 30 add buttons
 
 
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
7134=Target State
7135=Tumble
7136=Temperature
7137=Humidity
7138=PM2.5
7139=CO2
7140=TVOC
7141=Exceeding
7142=Serious
7143=High
7144=excellence
 
 
6000=Rename
@@ -989,6 +953,47 @@
7105=Light pollution: 75 ~ 115ug/m3
7106=Moderate pollution: 115 ~ 150ug/m3
7107=Heavy pollution: > 150ug/m3
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
7134=Target State
7135=Tumble
7136=Temperature
7137=Humidity
7138=PM2.5
7139=CO2
7140=TVOC
7141=Exceeding
7142=Serious
7143=High
7144=excellence
7145=Security
7146=Add security
    
9000=Please sign in with new cell phone number.
9001=Please sign in with new email address.
@@ -2068,6 +2073,9 @@
7142=严重
7143=偏高
7144=优秀
7145=安防
7146=添加安防
 
9000=请使用新的手机账号登录APP
9001=请使用新的邮箱账号登录APP
HDL-ON_iOS/Resources/Phone/LogicIcon/security.png
HDL_ON/Common/R.cs
@@ -2539,6 +2539,14 @@
        /// 优秀
        /// </summary>
        public const int youxiu = 7144;
        /// <summary>
        /// 安防
        /// </summary>
        public const int anfang = 7145;
        /// <summary>
        /// 添加安防
        /// </summary>
        public const int addSecurityLogic = 7046;
        #region LE新增
HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
@@ -49,9 +49,16 @@
                functionView.frameLayout.Y = Application.GetRealHeight(0);
            }
            //场景
            LogicView.SelectTypeView sceneView = new LogicView.SelectTypeView();
            sceneView.frameLayout.Y = functionView.frameLayout.Bottom;
            sceneView.btnText.TextID = StringId.Scenes;
            sceneView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
            viewLayout.AddChidren(sceneView.FLayoutView());
            //室外变化
            LogicView.SelectTypeView shiwaiView = new LogicView.SelectTypeView();
            shiwaiView.frameLayout.Y = functionView.frameLayout.Bottom;
            shiwaiView.frameLayout.Y = sceneView.frameLayout.Bottom;
            shiwaiView.btnText.TextID = StringId.shiwaibainhua;
            shiwaiView.btnIcon.UnSelectedImagePath = "LogicIcon/changesinoutdoor.png";
            
@@ -78,6 +85,11 @@
                funTpye.Show(LogicMethod.condition_if);
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            //场景点击事件
            sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                SceneMethod();
            };
            //室外变化
            shiwaiView.btnClick.MouseUpEventHandler += (sen, e) => {
                Weather weather = new Weather();
@@ -88,5 +100,70 @@
            #endregion
        }
        /// <summary>
        /// 添加场景
        /// </summary>
        public void SceneMethod()
        {
            var sceneList = LogicMethod.CurrLogicMethod.GetSceneList();
            List<string> nameList = new List<string>();
            for (int i = 0; i < sceneList.Count; i++)
            {
                var scene = sceneList[i];
                nameList.Add(scene.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(this, nameList, new List<string> { }, StringId.addSceneLogic, (index) =>
            {
                var sceneSelecetd = sceneList[index];
                Input input = new Input();
                input.sid = sceneSelecetd.sid;
                input.condition_type = "10";
                Dictionary<string, string> dic = new Dictionary<string, string>();
                LogicMethod.CurrLogicMethod.dictionary(dic, "key", "scene");
                LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", "=");
                LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", "string");
                LogicMethod.CurrLogicMethod.dictionary(dic, "value", "on");
                input.condition.Add(dic);
                AddCondition(input);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 添加条件
        /// </summary>
        /// <param name="input"></param>
        private void AddCondition(Input input)
        {
            ///记录索引值
            int index = -1;
            for (var i = 0; i < Logic.currlogic.input.Count; i++)
            {
                var condition_type = Logic.currlogic.input[i].condition_type;
                if (condition_type == "10")
                {
                    ///找到标记索引,退出循环体
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                //移除旧数据
                Logic.currlogic.input.RemoveAt(index);
                //新数据插入旧数据的位置
                Logic.currlogic.input.Insert(index, input);
            }
            else
            {
                Logic.currlogic.input.Add(input);
            }
        }
    }
}
HDL_ON/UI/UI2/3-Intelligence/Automation/AddTarget.cs
@@ -36,11 +36,18 @@
            viewLayout.AddChidren(functionView.FLayoutView());
            //场景
            LogicView.SelectTypeView sceneView = new LogicView.SelectTypeView();
            LogicView.SelectTypeView sceneView= new LogicView.SelectTypeView();
            sceneView.frameLayout.Y = functionView.frameLayout.Bottom;
            sceneView.btnText.TextID = StringId.Scenes;
            sceneView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
            viewLayout.AddChidren(sceneView.FLayoutView());
            //安防
            LogicView.SelectTypeView securityView = new LogicView.SelectTypeView();
            securityView.frameLayout.Y = sceneView.frameLayout.Bottom;
            securityView.btnText.TextID = StringId.anfang;
            securityView.btnIcon.UnSelectedImagePath = "LogicIcon/security.png";
            viewLayout.AddChidren(securityView.FLayoutView());
            //延时
            LogicView.SelectTypeView delayView = new LogicView.SelectTypeView();
@@ -64,6 +71,11 @@
            sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                SceneMethod();
            };
            //安防点击事件
            securityView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                SecurityMethod(this);
            };
            //延时点击事件
            delayView.btnClick.MouseUpEventHandler += (sen, e) =>
@@ -92,7 +104,7 @@
                nameList.Add(scene.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(this, nameList, StringId.addSceneLogic, (index) =>
            publicInterface.FrameOrVv(this, nameList,new List<string> { }, StringId.addSceneLogic, (index) =>
            {
                var sceneSelecetd = sceneList[index];
                Output outputDevice = new Output();
@@ -108,7 +120,41 @@
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 添加安防
        /// </summary>
        public void SecurityMethod(FrameLayout frameLayout, bool edit=false, int index1=-1)
        {
            List<string> stateList = new List<string>();
            if (edit&& index1 != -1) {
                Output output = Logic.currlogic.output[index1];
                var security = LogicMethod.CurrLogicMethod.GetSecurity(output.sid);
                stateList.Add(security.name);
            }
            var securityList = LogicMethod.CurrLogicMethod.GetSecurityList();
            List<string> nameList = new List<string>();
            for (int i = 0; i < securityList.Count; i++)
            {
                var security = securityList[i];
                nameList.Add(security.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(frameLayout, nameList, stateList, StringId.addSecurityLogic,(index) =>
            {
                var securitySelecetd = securityList[index];
                Output outputDevice = new Output();
                outputDevice.target_type = "3";
                outputDevice.sid = securitySelecetd.sid;
                //没啥作用,为了发送数据格式统一;
                outputDevice.status = new List<Dictionary<string, string>> { new Dictionary<string, string> { { "key", "security" }, { "value", "0" } } };
                AddOutput(outputDevice,true);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 延时时间方法
        /// </summary>
@@ -137,7 +183,7 @@
            if (edit)
            {
                Output output = Logic.currlogic.output[index];
                if (output.target_type == "3")
                if (output.target_type == "4")
                {
                    List<Dictionary<string, string>> dicList = output.status as List<Dictionary<string, string>>;
                    foreach (var dic in dicList)
@@ -169,7 +215,7 @@
                }
                Output outputTime= new Output();
                outputTime.sid = LogicMethod.CurrLogicMethod.NewSid();
                outputTime.target_type = "3";
                outputTime.target_type = "4";
                Dictionary<string, string> dic = new Dictionary<string, string>();
                LogicMethod.CurrLogicMethod.dictionary(dic, "key", "delay");
                LogicMethod.CurrLogicMethod.dictionary(dic, "value", timepoint);
@@ -195,23 +241,34 @@
            };
        }
        /// <summary>
        /// 添加目标
        /// </summary>
        /// <param name="target"></param>
        private void AddOutput(Output target)
        /// <param name="bool_if">表示启用不同条件</param>
        private void AddOutput(Output target,bool bool_if=false)
        {
            int indexValue = -1;
            for (int i = 0; i < Logic.currlogic.output.Count; i++)
            {
                if (Logic.currlogic.output[i].sid == target.sid)
                if (bool_if)
                {
                    indexValue = i;
                    break;
                    ///安防允许一种
                    if (Logic.currlogic.output[i].target_type == target.target_type)
                    {
                        indexValue = i;
                        break;
                    }
                }
                else
                {
                    if (Logic.currlogic.output[i].sid == target.sid)
                    {
                        indexValue = i;
                        break;
                    }
                }
            }
            if (indexValue != -1)
            {
                Logic.currlogic.output.RemoveAt(indexValue);
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -504,6 +504,17 @@
                            }
                        }
                        break;
                    case "10":
                        {
                            //用sid找到场景;
                            var scene = LogicMethod.CurrLogicMethod.GetSecne(inputCondition.sid);
                            inputView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
                            inputView.btnNextIcon.Visible = false;
                            inputView.btnClick.Visible = false;
                            //显示场景名称
                            inputView.btnText.Text = scene.name;
                        }
                        break;
                }
                //再次编辑条件状态点击事件
@@ -755,6 +766,7 @@
                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                            }
                            break;
                    }
                };
                ///删除控件
@@ -1088,6 +1100,15 @@
                        break;
                    case "3":
                        {
                            //用sid找到安防;
                            var security = LogicMethod.CurrLogicMethod.GetSecurity(outputTarget.sid);
                            targetView.btnIcon.UnSelectedImagePath = "LogicIcon/security.png";
                            //显示安防名称
                            stateStr = security.name;
                        }
                        break;
                    case "4":
                        {
                            targetView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
                            foreach (var dic in dicList)
                            {
@@ -1139,7 +1160,12 @@
                            break;
                        case "3":
                            {
                                AddTarget addTarget = new AddTarget();
                                addTarget.SecurityMethod(thisView, edit, indexVulae);
                            }
                            break;
                        case "4":
                            {
                                FrameLayout fLayout = new FrameLayout
                                {
                                    BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs
@@ -93,6 +93,8 @@
        /// 云端天气条件=6;
        /// 某个逻辑/场景的输出条件=7;
        /// 地理围栏=8;
        /// 空气质量=9;
        /// 场景=10;
        /// </summary>
        public string condition_type = "";
        public List<Dictionary<string, string>> condition = new List<Dictionary<string, string>>();
@@ -119,7 +121,8 @@
        /// 逻辑输出目标类型
        /// 设备=1;
        /// 场景=2;
        /// 延时=3;
        /// 安防=3;
        /// 延时=4;
        /// </summary>
        public string target_type = "";
        public List<Dictionary<string, string>> status = new List<Dictionary<string, string>>();
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -179,12 +179,21 @@
            return Entity.FunctionList.List.GetDeviceFunctionList();
        }
        /// <summary>
        /// 获取网关场景列表
        /// 获取场景列表
        /// </summary>
        /// <returns></returns>
        public List<HDL_ON.Entity.Scene> GetSceneList()
        {
            return HDL_ON.Entity.FunctionList.List.scenes;
        }
        /// <summary>
        /// 获取安防列表
        /// </summary>
        /// <returns></returns>
        public List<HDL_ON.Entity.SecurityAlarm> GetSecurityList()
        {
            return FunctionList.List.securities;
        }
        /// <summary>
        /// 获取房间的设备列表
@@ -217,7 +226,7 @@
            return deviceLists;
        }
        /// <summary>
        /// 获取当个设备
        /// 获取设备(功能)对象
        /// </summary>
        /// <param name="sid">设备唯一标识</param>
        /// <returns></returns>
@@ -238,7 +247,7 @@
        }
        /// <summary>
        /// 获取当个场景
        /// 获取场景对象
        /// </summary>
        /// <param name="sid">场景唯一标识</param>
        /// <returns></returns>
@@ -258,6 +267,26 @@
            return scene;
        }
        /// <summary>
        /// 获取安防对象
        /// </summary>
        /// <param name="sid">安防唯一标识</param>
        /// <returns></returns>
        public HDL_ON.Entity.SecurityAlarm GetSecurity(string sid)
        {
            HDL_ON.Entity.SecurityAlarm security = new Entity.SecurityAlarm() { name = "Unknown" };
            List<HDL_ON.Entity.SecurityAlarm> SecurityLists = GetSecurityList();
            for (int i = 0; i < SecurityLists.Count; i++)
            {
                var sce = SecurityLists[i];
                if (sce.sid == sid)
                {
                    security = sce;
                    break;
                }
            }
            return security;
        }
        /// <summary>
        /// 获取房间名(即是=区域名称)
        /// </summary>
        /// <param name="device">设备</param>
HDL_ON/UI/UI2/3-Intelligence/Automation/MainView.cs
@@ -357,6 +357,8 @@
            //1-10(表示条件图标)自己局部定义为了显示选中条件类型图标
            //1-时间图标
            //2-功能图标
            //3-云端图标
            //4-场景图标
            for (int i = 0; i < logic.input.Count; i++)
            {
                if (logic.input[i] == null)
@@ -386,6 +388,12 @@
                        }
                        break;
                    case 10:
                        {
                            iconInt = 4;
                        }
                        break;
                }
                if (!iconIntValue.Contains(iconInt))
@@ -401,6 +409,7 @@
            //12-20(表示目标图标)自己局部定义为了显示选中目标类型图标
            //12-功能图标
            //13-场景图标
            //14-安防图标
            //14-延时图标
            for (int i = 0; i < logic.output.Count; i++)
            {
@@ -423,6 +432,12 @@
                    case 3:
                        {
                            iconInt = 14;
                        }
                        break;
                    case 4:
                        {
                            iconInt = 15;
                        }
                        break;
@@ -483,6 +498,12 @@
                            strIcon = "LogicIcon/shiwaitianqi.png";
                        }
                        break;
                    case 4:
                        {
                            strIcon = "LogicIcon/selectTheScene.png";
                        }
                        break;
                    case 11:
                        {
                            //分割条件和目标的图标
@@ -502,7 +523,14 @@
                        break;
                    case 14:
                        {
                            strIcon = "LogicIcon/security.png";
                        }
                        break;
                    case 15:
                        {
                            //strIcon = "LogicIcon/timeicon.png";
                        }
                        break;
HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs
@@ -263,7 +263,7 @@
        /// <param name="list">显示数据源</param>
        /// <param name="titleText">标题</param>
        /// <param name="action">返回值索引值</param>
        public void FrameOrVv(FrameLayout frame, List<string> list, int titleText, Action<int> action)
        public void FrameOrVv(FrameLayout frame, List<string> list, List<string> stateList, int titleText, Action<int> action)
        {
            int line = 0;
@@ -366,6 +366,11 @@
                {
                    verticalRefresh.AddChidren(checkView.FLayoutView());
                }
                if (stateList.Contains(strName))
                {
                    checkView.btnCheckIcon.IsSelected = true;
                }
                checkView.btnText.Text = strName;
                checkView.btnClick.Tag = i;//标记
                //点击事件
@@ -391,8 +396,7 @@
                frameLayout.RemoveFromParent();
            };
        }
        }
        /// <summary>
        /// 超出5个元素该用滑动控件
        /// </summary>
@@ -400,7 +404,7 @@
        /// <param name="list">显示数据源</param>
        /// <param name="stateList">之前状态数据源</param>
        /// <param name="titleText">标题</param>
        /// <param name="action">返回值索引值</param>
        /// <param name="action">返回值列表</param>
        public void FrameOrVvList(FrameLayout frame, List<string> list, List<string> stateList, int titleText, Action<List<string>> action)
        {
HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
@@ -97,6 +97,8 @@
            ///切换播放模式点击事件;
            playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
             {
                 //single/single_cycle/order/list_cycle/random
                 string modeValueString = string.Empty;
                 string msg = Language.StringByID(StringId.switchTo);
                 switch (A31MusicModel.Current.A31PlayStatus.loop)
                 {
@@ -119,8 +121,9 @@
                         break;
                 }
                 new PublicAssmebly().TipMsgAutoClose(msg, false,1000);
                 string url = "http://" + A31MusicModel.Current.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + "loopmode:" + A31MusicModel.Current.A31PlayStatus.loop;
                 SendMethod.SendCommand(url);
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 dic.Add("mode",modeValueString);
                 //SendMethod.sendMethod.SendControlCommand(,dic);
             };
            ///添加喜爱点击事件;
            playView.loveBtn.MouseUpEventHandler += (sender, e) =>
HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
@@ -3,6 +3,8 @@
using Shared;
using Shared.IO;
using System.Net;
using HDL_ON.Entity;
namespace HDL_ON.UI.Music
{
    public class MusicMain : FrameLayout
@@ -56,19 +58,22 @@
        /// <summary>
        ///  显示加载界面
        /// </summary>
        public  static Loading loading = new Loading();
        public static Loading loading = new Loading();
        /// <summary>
        /// 定义全局对象
        /// </summary>
        VerticalRefreshLayout verticalRefresh;
        /// <summary>
        /// 为了音乐刷新状态定义全局对象
        /// </summary>
        MusicView musicView = new MusicView();
        public void Show()
        {
            #region 界面布局
            this.BackgroundColor = MusicColor.ViewColor;
            var topView = new TopView();
            this.AddChidren(topView.TopFLayoutView());
            topView.topNameBtn.TextID =StringId.a31Music;
            topView.topNameBtn.TextID = StringId.a31Music;
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
            {
                RemoveFromParent();
@@ -84,200 +89,71 @@
            verticalRefresh.BeginHeaderRefreshingAction += () =>
            {
                SeachMusic(false);
                SeachMusic();
            };
            this.AddChidren(loading);
            SeachMusic();
            if (A31MusicModel.A31MusicModelList.Count == 0)
            {
                SeachMusic(true);
            }
            else
            {
                clearA31Threads();
               //verticalRefresh.RemoveAll();
                for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
                {
                    var a31player = A31MusicModel.A31MusicModelList[i];
                    ///这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
                    if (!a31player.IsCanShow)
                    {
                        continue;
                    }
                    if (A31MusicModel.A31MusicModelList.Count - 1 == i)
                    {
                        a31player.IsEnd = true;
                    }
                    else
                    {
                        a31player.IsEnd = false;
                    }
                    ///加载界面时默认不在线
                    ///这里标记是为了不读取不在线播放器状态
                    a31player.IsOnLine = false;
                    MusicListView(a31player);
                }
                ///读取正确的信息,包括IP和端口及名称
                SendMethod.Seach((obj) =>
                {
                    try
                    {
                        if (obj == null)
                        {
                            ///这里要读取主从关系
                            readServerOrClientMode();
                            A31MusicModel.Save();
                            return;
                        }
                        var a31MusicModel = A31MusicModel.A31MusicModelList.Find((music) => music.UniqueDeviceName == obj.UniqueDeviceName);
                        if (a31MusicModel != null)
                        {
                            a31MusicModel.IPAddress = obj.IPAddress;
                            a31MusicModel.Port = obj.Port;
                            a31MusicModel.Name = obj.Name;
                            a31MusicModel.IsCanShow = true;
                            a31MusicModel.IsOnLine = true;
                        }
                    }
                    catch (Exception e) { MainPage.Log(e.Message); }
                });
            }
        }
        /// <summary>
        /// 刷新播放器列表
        /// </summary>
        /// <param name="Yes">是否显示刷新图标</param>
        void SeachMusic(bool Yes = false)
        void SeachMusic()
        {
            for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
            Application.RunOnMainThread(() =>
            {
                var a31player = A31MusicModel.A31MusicModelList[i];
                a31player.IsCanShow = false;
                a31player.IsOnLine = false;
            }
            if (Yes)
            {
                //为了第一次进来log一下;
                loading.Start();
            }
            SendMethod.Seach((obj) =>
            {
                if (obj == null)
                verticalRefresh.RemoveAll();
                for (int i = 0; i < SendMethod.sendMethod.GetMusicList.Count; i++)
                {
                    readServerOrClientMode();
                    A31MusicModel.Save();
                    if (!Yes)
                    var playerFunction = SendMethod.sendMethod.GetMusicList[i];
                    if (!playerFunction.online)
                    {
                        ///等待跑完在关闭
                        verticalRefresh.EndHeaderRefreshing();
                        //过滤掉不在线的音乐播放器
                        continue;
                    }
                    Application.RunOnMainThread(() =>
                    {
                        if (Yes)
                        {
                            //为了第一次进来log一下;
                            loading.Hide();
                        }
                        verticalRefresh.RemoveAll();
                        for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
                        {
                            var a31player = A31MusicModel.A31MusicModelList[i];
                            //这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
                            if (!a31player.IsCanShow)
                            {
                                continue;
                            }
                            if (A31MusicModel.A31MusicModelList.Count - 1 == i)
                            {
                                a31player.IsEnd = true;
                            }
                            else
                            {
                                a31player.IsEnd = false;
                            }
                            MusicListView(a31player);
                        }
                       //A31MusicModel.ReadMusicStates();
                    MusicListView(playerFunction);
                }
                    });
                    return;
                }
                var a31MusicModel = A31MusicModel.A31MusicModelList.Find((music) => { return music.UniqueDeviceName == obj.UniqueDeviceName; });
                if (a31MusicModel == null)
                {
                    //不是我们支持的品牌不支持
                    if (obj.Name != null)
                    {
                        obj.sid = "030101123456780909020123AABB" + obj.UniqueDeviceName;
                        A31MusicModel.A31MusicModelList.Add(obj);
                    }
                }
                else
                {
                    a31MusicModel.IPAddress = obj.IPAddress;
                    a31MusicModel.Port = obj.Port;
                    a31MusicModel.Name = obj.Name;
                    a31MusicModel.IsCanShow = true;
                    a31MusicModel.IsOnLine = true;
                }
            });
        }
        /// <summary>
        /// 显示音乐列表的方法
        /// </summary>
        void MusicListView(A31MusicModel a31player)
        void MusicListView(Function player)
        {
            MusicView musicView = new MusicView();
            musicView.View(verticalRefresh);
            musicView.singerBtn.Text = a31player.A31PlayStatus.Artist;
            musicView.songNameBtn.Text = a31player.A31PlayStatus.Title;
            musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(a31player);
            if (a31player.IsEnd)
            {
                musicView.muiscFl.Height = Application.GetRealHeight(12 + 139 + 12);
            }
            musicView.singerBtn.Text = player.GetAttrState("song_name");
            musicView.songNameBtn.Text = player.GetAttrState("song_name");
            musicView.musicNameBtn.Text = player.name;
            //if (player.IsEnd)
            //{
            //    musicView.muiscFl.Height = Application.GetRealHeight(12 + 139 + 12);
            //}
            musicView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
            {
                musicView.collectIconBtn.IsSelected = !musicView.collectIconBtn.IsSelected;
                if (a31player.ServerClientType == 1)
                if (musicView.collectIconBtn.IsSelected)
                {
                    if (musicView.collectIconBtn.IsSelected)
                    {
                        a31player.MainPlayCollection = true;
                    }
                    else
                    {
                        a31player.MainPlayCollection = false;
                    }
                    player.collect = true;
                }
                else
                {
                    if (musicView.collectIconBtn.IsSelected)
                    {
                        a31player.collect = true;
                    }
                    else
                    {
                        a31player.collect = false;
                    }
                    player.collect = false;
                }
                A31MusicModel.Save();
            };
            EventHandler<MouseEventArgs> clickMergence = (sender, e) =>
            {
                if (a31player.ServerClientType == 0)
                {
                    new View.DialogView { }.PlayMergence(a31player);
                }
                else if (a31player.ServerClientType == 1)
                {
                    new View.DialogView { }.DetachPlayMergence(a31player);
                }
                //if (player.ServerClientType == 0)
                //{
                //    new View.DialogView { }.PlayMergence(player);
                //}
                //else if (player.ServerClientType == 1)
                //{
                //    new View.DialogView { }.DetachPlayMergence(player);
                //}
            };
            musicView.mergeBjBtn.MouseUpEventHandler += clickMergence;
            musicView.mergeBtn.MouseUpEventHandler += clickMergence;
@@ -285,7 +161,6 @@
            EventHandler<MouseEventArgs> clickPlayView = (sender, e) =>
            {
                A31MusicModel.Current = a31player;//当前播放器
                var a31PlayMusicPage = new A31PlayMusicPage();
                MainPage.BasePageView.AddChidren(a31PlayMusicPage);
                a31PlayMusicPage.Show();
@@ -302,7 +177,9 @@
            musicView.prevBtn.MouseDownEventHandler += (sender, e) =>
            {
                musicView.prevBtn.IsSelected = true;
                SendMethod.Previous(a31player);
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("song_step", "up");
                SendMethod.sendMethod.SendControlCommand(player, dic);
            };
            musicView.prevBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -311,24 +188,28 @@
            ///暂停/播放点击事件
            musicView.playBtn.MouseDownEventHandler += (sender, e) =>
            {
                string status = "off";
                if (musicView.playBtn.IsSelected)
                {
                    musicView.playBtn.IsSelected = false;
                    SendMethod.Pause(a31player);
                    a31player.A31PlayStatus.status = "pause";
                    status = "off";
                }
                else
                {
                    musicView.playBtn.IsSelected = true;
                    SendMethod.Play(a31player);
                    a31player.A31PlayStatus.status = "play";
                    status = "on";
                }
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("on_off", status);
                SendMethod.sendMethod.SendControlCommand(player, dic);
            };
            ///下一曲点击事件
            musicView.nextBtn.MouseDownEventHandler += (sender, e) =>
            {
                musicView.nextBtn.IsSelected = true;
                SendMethod.Next(a31player);
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("song_step", "down");
                SendMethod.sendMethod.SendControlCommand(player, dic);
            };
            musicView.nextBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -340,47 +221,49 @@
                while (true)
                {
                    System.Threading.Thread.Sleep(1000);
                    if (!a31player.IsOnLine)
                    if (!player.online)
                    {
                        continue;
                    }
                    SendMethod.ReadStatus(a31player);
                    //SendMethod.ReadStatus(player);
                     SendMethod.sendMethod.RefreshDeviceStatus(player,new List<string> { player.deviceId });
                    Application.RunOnMainThread(() =>
                    {
                        musicView.singerBtn.Text = a31player.A31PlayStatus.Artist;
                        musicView.songNameBtn.Text = a31player.A31PlayStatus.Title;
                        musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(a31player);
                        if (a31player.A31PlayStatus.status == "play")
                        {
                            musicView.playBtn.IsSelected = true;
                        }
                        else
                        {
                            musicView.playBtn.IsSelected = false;
                        }
                        musicView.regionBtn.Text = a31player.GetRoomListName();
                        if (a31player.ServerClientType == 1)
                        {
                            if (a31player.MainPlayCollection)
                            {
                                musicView.collectIconBtn.IsSelected = true;
                            }
                            else
                            {
                                musicView.collectIconBtn.IsSelected = false;
                            }
                        }
                        else
                        {
                            if (a31player.collect)
                            {
                                musicView.collectIconBtn.IsSelected = true;
                            }
                            else
                            {
                                musicView.collectIconBtn.IsSelected = false;
                            }
                        }
                        //musicView.singerBtn.Text = player.A31PlayStatus.Artist;
                        //musicView.songNameBtn.Text = player.A31PlayStatus.Title;
                        //musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(player);
                        //if (player.A31PlayStatus.status == "play")
                        //{
                        //    musicView.playBtn.IsSelected = true;
                        //}
                        //else
                        //{
                        //    musicView.playBtn.IsSelected = false;
                        //}
                        //musicView.regionBtn.Text = player.GetRoomListName();
                        //if (player.ServerClientType == 1)
                        //{
                        //    if (player.MainPlayCollection)
                        //    {
                        //        musicView.collectIconBtn.IsSelected = true;
                        //    }
                        //    else
                        //    {
                        //        musicView.collectIconBtn.IsSelected = false;
                        //    }
                        //}
                        //else
                        //{
                        //    if (player.collect)
                        //    {
                        //        musicView.collectIconBtn.IsSelected = true;
                        //    }
                        //    else
                        //    {
                        //        musicView.collectIconBtn.IsSelected = false;
                        //    }
                        //}
                    });
                }
            })
@@ -388,99 +271,67 @@
            musicThread.Start();
            threadLists.Add(musicThread);
        }
        /// <summary>
        /// 读取主从关系
        ///指定刷新界面
        /// </summary>
        void readServerOrClientMode()
        /// <param name="strView">判断字符</param>
        public void RefreshView(string strView)
        {
            try
            Application.RunOnMainThread(() =>
            {
                for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
                try
                {
                    var a31player = A31MusicModel.A31MusicModelList[i];
                    if (!a31player.IsOnLine)
                    for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
                    {
                        continue;
                    }
                    try
                    {
                        a31player.ServerClientType = 0;
                        var result = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
                        if (result == null && result == "Failed")
                        var view = MainPage.BasePageView.GetChildren(i);
                        if (strView == view.Tag.ToString())
                        {
                            result = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
                        }
                        if (result != null && result != "Failed")
                        {
                            a31player.Slave = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves>(result);
                        }
                    }
                    catch (Exception e)
                    {
                        var d = e.Message;
                    }
                }
                //分析主从关系
                for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
                {
                    var a31player = A31MusicModel.A31MusicModelList[i];
                    if (!a31player.IsOnLine)
                    {
                        continue;
                    }
                    try
                    {
                        if (a31player.Slave != null && "0" != a31player.Slave.slaves)
                        {
                            a31player.ServerClientType = 1;//主的
                            string str = a31player.Name;
                            for (int j = 0; j < a31player.Slave.slave_list.Count; j++)
                            if (view.GetType() == typeof(MusicMain))
                            {
                                var slave = a31player.Slave.slave_list[j];
                                str = str + "+" + slave.name;
                                var tempA31Player = A31MusicModel.A31MusicModelList.Find((obj) => slave.uuid.Replace("uuid:", "") == obj.UniqueDeviceName);
                                if (tempA31Player == null)
                                {
                                    A31MusicModel.A31MusicModelList.Add(new A31MusicModel
                                    {
                                        sid = "030101123456780909020123AABB" + slave.uuid.Replace("uuid:", ""),
                                        ServerClientType = -1,//从的
                                        IPAddress = slave.ip,
                                        MainPlayIP = a31player.IPAddress,
                                        UniqueDeviceName = slave.uuid.Replace("uuid:", ""),
                                        Name = slave.name,
                                        IsCanShow = false,
                                        IsOnLine = false,//true作用为了读取从播放器的音量
                                    });
                                }
                                //如果找到就更新为从的
                                else
                                {
                                    tempA31Player.ServerClientType = -1;//从的
                                    tempA31Player.IPAddress = slave.ip;
                                    tempA31Player.MainPlayIP = a31player.IPAddress;
                                    tempA31Player.Name = slave.name;
                                    tempA31Player.UniqueDeviceName = slave.uuid.Replace("uuid:", "");
                                    tempA31Player.IsCanShow = false;
                                    tempA31Player.IsOnLine = false;//true作用为了读取从播放器的音量
                                }
                                //musicView.singerBtn.Text = player.A31PlayStatus.Artist;
                                //musicView.songNameBtn.Text = player.A31PlayStatus.Title;
                                //musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(player);
                                //if (player.A31PlayStatus.status == "play")
                                //{
                                //    musicView.playBtn.IsSelected = true;
                                //}
                                //else
                                //{
                                //    musicView.playBtn.IsSelected = false;
                                //}
                                //musicView.regionBtn.Text = player.GetRoomListName();
                                //if (player.ServerClientType == 1)
                                //{
                                //    if (player.MainPlayCollection)
                                //    {
                                //        musicView.collectIconBtn.IsSelected = true;
                                //    }
                                //    else
                                //    {
                                //        musicView.collectIconBtn.IsSelected = false;
                                //    }
                                //}
                                //else
                                //{
                                //    if (player.collect)
                                //    {
                                //        musicView.collectIconBtn.IsSelected = true;
                                //    }
                                //    else
                                //    {
                                //        musicView.collectIconBtn.IsSelected = false;
                                //    }
                                //}
                            }
                            a31player.MainPlayName = str;
                        }
                    }
                    catch (Exception e)
                    {
                        var ss = e.Message;
                    }
                }
            }
            catch { }
                catch { }
            });
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
@@ -4,12 +4,28 @@
using System.Net.Sockets;
using System.Security;
using System.Text;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using Shared;
namespace HDL_ON.UI.Music
{
    public class SendMethod
    {
        private static SendMethod m_sendMethod=null;
        public static SendMethod sendMethod
        {
            get
            {
                if (m_sendMethod == null)
                {
                    m_sendMethod = new SendMethod();
                }
                return m_sendMethod;
            }
        }
        /// <summary>
        ///搜索A31音乐播放器
        /// </summary>
@@ -209,7 +225,7 @@
                a31MusicModel.A31PlayStatus.loop = se.SearchForTextOfTag("LoopMode");
                a31MusicModel.A31PlayStatus.Source = se.SearchForTextOfTag("PlayMedium");
                a31MusicModel.A31PlayStatus.playSource = se.SearchForTextOfTag("TrackSource");
                a31MusicModel.A31PlayStatus.TrackURL = se.SearchForTextOfTag("TrackURI").Replace("&", "&amp;amp;");
                a31MusicModel.A31PlayStatus.TrackURL = se.SearchForTextOfTag("TrackURI").Replace("&", "&amp;amp;");
            }
            catch (Exception ex)
@@ -463,7 +479,8 @@
        /// <param name="volume">Volume.</param>
        public static void ControlVolume(int volume, A31MusicModel a31player)
        {
            System.Threading.Tasks.Task.Run(() => {
            System.Threading.Tasks.Task.Run(() =>
            {
                A31MusicModel.ProgressDateTime = DateTime.Now;
                try
                {
@@ -526,7 +543,7 @@
                musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;amp;");
                var metadata = track.SearchForTextOfTag("Metadata").Replace("&", "&amp;");
                var item = SecurityElement.FromString(metadata).SearchForChildByTag("item");
                musicInfo.Title = item.SearchForTextOfTag("dc:title").Replace("&", "&amp;amp;");
                musicInfo.Title = item.SearchForTextOfTag("dc:title").Replace("&", "&amp;amp;");
                musicInfo.Artist = item.SearchForTextOfTag("upnp:artist").Replace("&", "&amp;amp;");
                musicInfo.Album = item.SearchForTextOfTag("upnp:album").Replace("&", "&amp;amp;");
                musicInfo.Duration = item.SearchForTextOfTag("res");
@@ -597,7 +614,7 @@
        /// <summary>
        /// 获取当前播放的列表
        /// </summary>
        public static  string GetCurrentPlayList(A31MusicModel a31player)
        public static string GetCurrentPlayList(A31MusicModel a31player)
        {
            System.Text.StringBuilder getPlayList = new System.Text.StringBuilder();
            getPlayList.AppendLine("<?xml version=\"1.0\"encoding=\"utf-8\"?>");
@@ -656,7 +673,7 @@
        /// <param name="musicInfo">播放音乐</param>
        /// <param name="listName">列表名称</param>
        /// <param name="musicList">推送列表(默认推50首)</param>
        public  static void PushList(MusicInfo musicInfo, string listName, List<MusicInfo> musicList, A31MusicModel a31player,string musicSource)
        public static void PushList(MusicInfo musicInfo, string listName, List<MusicInfo> musicList, A31MusicModel a31player, string musicSource)
        {
            //最大发送的条数
@@ -739,10 +756,12 @@
                sb.AppendLine("&amp;lt;dc:title&amp;gt;" + tempMusicInfo.Title + "&amp;lt;/dc:title&amp;gt;");
                sb.AppendLine("&amp;lt;dc:creator&amp;gt;DJ Sanny J&amp;lt;/dc:creator&amp;gt;");
                if (musicSource== "我的列表") {
                if (musicSource == "我的列表")
                {
                    sb.AppendLine("&amp;lt;upnp:artist&amp;gt;" + listName + "&amp;lt;/upnp:artist&amp;gt;");
                }
                else {
                else
                {
                    sb.AppendLine("&amp;lt;upnp:artist&amp;gt;" + tempMusicInfo.Artist + "&amp;lt;/upnp:artist&amp;gt;");
                }
                sb.AppendLine("&amp;lt;upnp:album&amp;gt;" + tempMusicInfo.Album + "&amp;lt;/upnp:album&amp;gt;");
@@ -778,7 +797,7 @@
            Play(a31player.IPAddress, a31player.Port, playString.ToString());
        }
       static void SendMusicLists(string ip, int port, string soapAction, string listInfo)
        static void SendMusicLists(string ip, int port, string soapAction, string listInfo)
        {
            System.Net.WebClient webClient = new System.Net.WebClient();
            webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#" + soapAction + "\"");
@@ -788,13 +807,13 @@
                byte[] recevieBytes = webClient.UploadData(new Uri("http://" + ip + ":" + port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(listInfo));
                var s = System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length);
            }
            catch(Exception e)
            catch (Exception e)
            {
                var d = e.Message;
            }
        }
       static void Play(string ip, int port, string info)
        static void Play(string ip, int port, string info)
        {
            System.Net.WebClient webClient = new System.Net.WebClient();
            webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#PlayQueueWithIndex\"");
@@ -882,5 +901,72 @@
            public string creator = string.Empty;
        }
        /// <summary>
        /// 获取音乐列表
        /// </summary>
        public List<Function> GetMusicList
        {
            get
            {
                return FunctionList.List.GetMusicList();
            }
        }
        /// <summary>
        /// 发送控制命令
        /// </summary>
        /// <param name="function">当前设备</param>
        /// <param name="dic">发送控制数据</param>
        public void SendControlCommand(Function function, Dictionary<string, string> dic)
        {
            new System.Threading.Thread(() =>
            {
                DriverLayer.Control.Ins.SendWriteCommand(function, dic);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 刷新设备状态
        /// </summary>
        /// <returns></returns>
        public void RefreshDeviceStatus(Function music, List<string> functionIds)
        {
            try
            {
                Dictionary<string, object> d = new Dictionary<string, object>();
                d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
                d.Add("deviceIds", functionIds);
                var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus);
                if (responsePackNew.Code != "0")
                {
                    return;
                }
                //数据返序列化为Function对象
                var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data.ToString());
                var function = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(str);
                if (function == null)
                {
                    return;
                }
                music.name = function.name;
                music.sid = function.sid;
                music.spk = function.spk;
                music.status = function.status;
                music.roomIds = function.roomIds;
                music.attributes = function.attributes;
            }
            catch { }
        }
        /// <summary>
        ///请求服务器(与住宅有关:例如;homeId)
        /// </summary>
        /// <returns></returns>
        public  ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 5)
        {
            var requestJson = HttpUtil.GetSignRequestJson(o);
            return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
        }
    }
}