using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Security; using System.Text; using HDL_ON.DAL.Server; using HDL_ON.Entity; using Newtonsoft.Json.Linq; using Shared; namespace HDL_ON.UI.Music { public class SendMethod { private static SendMethod s_Current = null; public static SendMethod Current { get { if (s_Current == null) { s_Current = new SendMethod(); } return s_Current; } } /// /// 获取音乐列表 /// public List GetMusicList { get { return FunctionList.List.GetMusicList(); } } /// /// 发送控制命令 /// /// 当前设备 /// 发送控制数据 public void SendControlCommand(Function function, Dictionary dic) { new System.Threading.Thread(() => { DriverLayer.Control.Ins.SendWriteCommand(function, dic, false, 0); }) { IsBackground = true }.Start(); } /// /// 获取设备最新的状态 /// /// public void GetDeviceStatus(ref A31MusicModel a31Music, List functionIds, string sid) { try { //RefreshDeviceStatus(functionIds); a31Music.LastDateTime = DateTime.Now; ///从缓存里面查找音乐播放器对象<收到推送过来的状态会更新缓存数据> var allLocalFuntion = FunctionList.List.GetDeviceFunctionList(); var localFunction = allLocalFuntion.Find((obj) => obj.sid == sid); if (localFunction == null) { return; } ///更新的数据 a31Music.functionMusic = localFunction; } catch { } } /// /// 刷新设备状态 /// /// public void RefreshDeviceStatus(List functionIds) { try { Dictionary d = new Dictionary(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceIds", functionIds); var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus, "刷新设备状态"); if (!this.DataChecking(responsePackNew)) { return; } } catch { } } /// /// 设备名称修改 /// public string EditDeviceName(string deviceId, string deviceName) { Dictionary d = new Dictionary(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceId", deviceId); d.Add("name", deviceName); var requestJson = HttpUtil.GetSignRequestJson(d); return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_EditDeviceName, requestJson).Code; } /// /// 获取当前播放音乐列表 /// /// 音乐播放器 /// 回调 /// public void GetCurrentPalyList(Function music, Action action) { try { Dictionary d = new Dictionary(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceIds", new List { music.deviceId }); var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_PlayerList, "获取音乐列表"); if (!this.DataChecking(responsePackNew)) { return; } //数据返序列化为Function对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data); var palyLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str); if (palyLists == null) { palyLists = new List(); } if (palyLists.Count > 0) { ///默认拿第一个列表 A31MusicModel.Current.CurrentPlayMusicInfoList = palyLists[0].playlist; } } catch { } finally { Application.RunOnMainThread(() => { action(); }); } } /// /// 获取【多个音乐源】列表名列表 /// /// /// 音乐源为null,支持多个源获取 /// public List GetMultipleSourceListName(Function music, string source) { try { Dictionary d = new Dictionary(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId); Dictionary deviceIds = new Dictionary(); deviceIds.Add("deviceId", music.deviceId); if (!string.IsNullOrEmpty(source)) { deviceIds.Add("source", source); } d.Add("deviceInfos", new List> { deviceIds }); var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupList, "获取列表名列表"); if (!this.DataChecking(responsePackNew)) { return new List(); } //数据返序列化为Function对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data); var groupLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str); if (groupLists == null) { groupLists = new List(); } return groupLists; } catch { return new List(); } } /// /// 获取【单个音乐源】列表名列表(默认取定列表中一个) /// /// /// 音乐源 /// public GroupList GetSingleSourceListNameList(Function music, string source) { List groupList = this.GetMultipleSourceListName(music, source); if (groupList.Count == 0) { return new GroupList(); } ////默认取定列表中一个 return groupList.Count > 0 ? groupList[0] : new GroupList(); } /// /// 通过列表名获取【多个歌曲列表】 /// /// /// 列表名 /// 音乐源 /// public List GetMultipleSongListM(Function music, string listName, string source) { try { Dictionary d = new Dictionary(); Dictionary d1 = new Dictionary(); Dictionary d2 = new Dictionary(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId); d2.Add("group", listName); d1.Add("sid", music.sid); if (!string.IsNullOrEmpty(source)) { d1.Add("source", source); } d1.Add("groupList", new List> { d2 }); d.Add("sidGroups", new List> { d1 }); var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupPlayerList, "通过列表名获取歌曲列表"); if (!this.DataChecking(responsePackNew)) { return new List(); } //数据返序列化为Function对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data); var palyLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str); if (palyLists == null) { return new List(); } return palyLists; } catch { return new List(); } } /// /// 通过列表名获取【单个歌曲列表】(默认取定列表中一个歌曲列表) /// /// /// 列表名 /// 音乐源 /// public SongList GetSingleSongList(Function music, string listName, string source) { List listInfos = this.GetMultipleSongListM(music, listName, source); if (listInfos.Count == 0) { return new SongList(); } ////默认第一个列表里面第一个音乐列表 SongList songList = listInfos[0].playlist.Count > 0 ? listInfos[0].playlist[0] : new SongList(); return songList; } /// /// 检验数据回复成功或者失败 /// /// 回复数据对象 /// private bool DataChecking(ResponsePackNew responsePackNew) { if (responsePackNew.Data == null||responsePackNew.Code != "0" || responsePackNew.Data.ToString() == "") { return false; } return true; } /// ///请求服务器(与住宅有关:例如;homeId) /// /// 发送数据 /// 请求地址(不是绝对地址) /// 标记->描述接口(自定义) /// public ResponsePackNew RequestServerhomeId(object o, string api_Url, string tag, int mTimeout = 5) { JObject jobject = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(o)); return UI2.Intelligence.Automation.Send.Current.RequestServerhomeId(jobject, api_Url, tag, mTimeout); } } }