| | |
| | | { |
| | | public class SendMethod |
| | | { |
| | | private static SendMethod m_sendMethod=null; |
| | | public static SendMethod sendMethod |
| | | private static SendMethod sMethod=null; |
| | | public static SendMethod mMethod |
| | | { |
| | | get |
| | | { |
| | | if (m_sendMethod == null) |
| | | if (sMethod == null) |
| | | { |
| | | m_sendMethod = new SendMethod(); |
| | | sMethod = new SendMethod(); |
| | | } |
| | | return m_sendMethod; |
| | | return sMethod; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | ///搜索A31音乐播放器 |
| | | /// </summary> |
| | | /// <param name="action"></param> |
| | | /// <param name="time"></param> |
| | | /// <param name="uid"></param> |
| | | public static void Seach(Action<A31MusicModel> action, int time = 5 * 1000, string uid = "AllUniqueDeviceName") |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | System.Net.Sockets.UdpClient udpClient = null; |
| | | int localPort = 65535; |
| | | for (; 1024 < localPort; localPort--) |
| | | { |
| | | try |
| | | { |
| | | udpClient = new System.Net.Sockets.UdpClient(localPort); |
| | | break; |
| | | } |
| | | catch (Exception e) { System.Console.WriteLine(e.Message); } |
| | | } |
| | | |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | var tempDateTime = DateTime.Now; |
| | | while (udpClient != null) |
| | | { |
| | | try |
| | | { |
| | | if (time < (DateTime.Now - tempDateTime).TotalMilliseconds) |
| | | { |
| | | var tempBytes = System.Text.Encoding.UTF8.GetBytes("完成"); |
| | | udpClient.Send(tempBytes, tempBytes.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), localPort)); |
| | | } |
| | | else |
| | | { |
| | | var stringBuilder = new StringBuilder(); |
| | | stringBuilder.AppendLine("M-SEARCH * HTTP/1.1"); |
| | | stringBuilder.AppendLine("St: ssdp:wiimudevice"); |
| | | stringBuilder.AppendLine("Mx: 3"); |
| | | stringBuilder.AppendLine("Host: 239.255.255.250:1900"); |
| | | stringBuilder.AppendLine("Man: \"ssdp:discover\""); |
| | | stringBuilder.AppendLine(); |
| | | var tempBytes = System.Text.Encoding.ASCII.GetBytes(stringBuilder.ToString()); |
| | | //请求获取A31服务器信息 |
| | | udpClient.Send(tempBytes, tempBytes.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("239.255.255.250"), 1900)); |
| | | udpClient.Send(tempBytes, tempBytes.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("239.255.255.250"), 1900)); |
| | | //如果1000毫秒没有数据回复,就关闭当前Socket,不再等待接收数据 |
| | | } |
| | | System.Threading.Thread.Sleep(500); |
| | | } |
| | | catch (Exception e) { System.Console.WriteLine(e.Message); } |
| | | } |
| | | }); |
| | | while (true) |
| | | { |
| | | try |
| | | { |
| | | //接收回来的数据 |
| | | var remoteIpEndPoint = new System.Net.IPEndPoint(0, 0); |
| | | //开始在这里等待接收数据, |
| | | var receviceBytes = udpClient.Receive(ref remoteIpEndPoint); |
| | | if (receviceBytes == null) |
| | | { |
| | | break; |
| | | } |
| | | if ("完成" == System.Text.Encoding.UTF8.GetString(receviceBytes)) |
| | | { |
| | | if (action != null) |
| | | { |
| | | //表示完成了 |
| | | action(null); |
| | | } |
| | | try |
| | | { |
| | | udpClient.Close(); |
| | | udpClient = null; |
| | | } |
| | | catch (Exception e) { System.Console.WriteLine(e.Message); } |
| | | break; |
| | | } |
| | | |
| | | var sr = new System.IO.StreamReader(new System.IO.MemoryStream(receviceBytes, 0, receviceBytes.Length)); |
| | | string tempLine = null; |
| | | string ipAddress = null; |
| | | int port = 0; |
| | | string uniqueDeviceName = null; |
| | | //一行一行数据判断,找出需要的信息 |
| | | while ((tempLine = sr.ReadLine()) != null) |
| | | { |
| | | //找出Ip地址相关的信息 |
| | | //System.Console.WriteLine (tempLine); |
| | | if (tempLine.StartsWith("LOCATION: http://")) |
| | | { |
| | | tempLine = tempLine.Replace("LOCATION: http://", "").Split('/')[0]; |
| | | string[] ipAndPort = tempLine.Split(':'); |
| | | ipAddress = ipAndPort[0]; |
| | | port = int.Parse(ipAndPort[1]); |
| | | } |
| | | else if (tempLine.StartsWith("USN: uuid:")) |
| | | { |
| | | uniqueDeviceName = tempLine.Replace("USN: uuid:", "").Split(':')[0]; |
| | | } |
| | | } |
| | | //关闭流 |
| | | sr.Close(); |
| | | |
| | | if (action != null) |
| | | { |
| | | if ("AllUniqueDeviceName" == uid) |
| | | { |
| | | action(new A31MusicModel { IPAddress = ipAddress, Port = port, Name = GetDeviceName(ipAddress, port), UniqueDeviceName = uniqueDeviceName }); |
| | | } |
| | | else if (uid == uniqueDeviceName) |
| | | { |
| | | if (action != null) |
| | | { |
| | | //表示完成了 |
| | | action(null); |
| | | } |
| | | try |
| | | { |
| | | udpClient.Close(); |
| | | udpClient = null; |
| | | } |
| | | catch (Exception e) { System.Console.WriteLine(e.Message); } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | catch (Exception e) { System.Console.WriteLine(e.Message); } |
| | | } |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// 更新A31播放器的状态 |
| | | /// </summary> |
| | | /// <param name="a31MusicModel"></param> |
| | | public static void ReadStatus(A31MusicModel a31MusicModel) |
| | | { |
| | | try |
| | | { |
| | | if (a31MusicModel.ServerClientType == 1) |
| | | { |
| | | var result = OpenWeb("http://" + a31MusicModel.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList"); |
| | | if (result != null && result != "Failed") |
| | | { |
| | | var slaves = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves>(result); |
| | | if (slaves != null && slaves.slave_list != null && slaves.slave_list.Count != 0) |
| | | { |
| | | a31MusicModel.Slave = slaves; |
| | | } |
| | | } |
| | | } |
| | | |
| | | WebClient webClient = new WebClient(); |
| | | webClient.Headers.Add("Soapaction", "\"urn:schemas-upnp-org:service:AVTransport:1#GetInfoEx\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | |
| | | var recevieBytes = webClient.UploadData(new Uri("http://" + a31MusicModel.IPAddress + ":" + a31MusicModel.Port + "/upnp/control/rendertransport1"), "POST", System.Text.Encoding.UTF8.GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:GetInfoEx xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetInfoEx></s:Body></s:Envelope>")); |
| | | a31MusicModel.LastDateTime = DateTime.Now;//记录数据反馈的时间(因为有时间网络差数据不回复,导致当前播放音乐时间显示不正确) |
| | | |
| | | var se = System.Security.SecurityElement.FromString(System.Text.Encoding.UTF8.GetString(recevieBytes)).SearchForChildByTag("s:Body").SearchForChildByTag("u:GetInfoExResponse"); |
| | | |
| | | if ("PLAYING" == se.SearchForTextOfTag("CurrentTransportState")) |
| | | { |
| | | a31MusicModel.A31PlayStatus.status = "play"; |
| | | } |
| | | else |
| | | { |
| | | a31MusicModel.A31PlayStatus.status = "stop"; |
| | | } |
| | | a31MusicModel.A31PlayStatus.totlen = (DateTime.Parse(se.SearchForTextOfTag("TrackDuration")) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString(); |
| | | |
| | | var trackMetaData = se.SearchForTextOfTag("TrackMetaData"); |
| | | if (string.IsNullOrEmpty(trackMetaData)) |
| | | { |
| | | return; |
| | | } |
| | | if (A31MusicModel.IsJson(trackMetaData)) |
| | | { |
| | | var a31QQSong = Newtonsoft.Json.JsonConvert.DeserializeObject<A31QQSong>(trackMetaData); |
| | | a31MusicModel.A31PlayStatus.Title = a31QQSong.title; |
| | | a31MusicModel.A31PlayStatus.Album = a31QQSong.album; |
| | | a31MusicModel.A31PlayStatus.Artist = a31QQSong.creator; |
| | | } |
| | | else |
| | | { |
| | | var metadata = trackMetaData.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "").Replace("&", "&amp;"); |
| | | var item = SecurityElement.FromString(metadata).SearchForChildByTag("item"); |
| | | a31MusicModel.A31PlayStatus.Title = item.SearchForTextOfTag("dc:title"); |
| | | a31MusicModel.A31PlayStatus.Artist = item.SearchForTextOfTag("upnp:artist"); |
| | | a31MusicModel.A31PlayStatus.Album = item.SearchForTextOfTag("upnp:album"); |
| | | } |
| | | a31MusicModel.A31PlayStatus.curpos = (DateTime.Parse(se.SearchForTextOfTag("RelTime")) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString(); |
| | | a31MusicModel.A31PlayStatus.vol = se.SearchForTextOfTag("CurrentVolume"); |
| | | 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;"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | #region 更新其他界面音乐状态 |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | //a31MusicModel.trait_on_off.curValue = a31MusicModel.A31PlayStatus.status == "play" ? "on" : "off"; |
| | | //Console.WriteLine($"music : {a31MusicModel.sid} : {a31MusicModel.on_off}"); |
| | | HomePage.UpdataFunctionStates(a31MusicModel.functionMusic); |
| | | foreach (var e in A31MusicModel.A31MusicModelList) |
| | | { |
| | | RoomPage.UpdataStates(e.functionMusic); |
| | | } |
| | | }); |
| | | #endregion |
| | | } |
| | | } |
| | | |
| | | public static string OpenWeb(string url) |
| | | { |
| | | try |
| | | { |
| | | var webClient = new WebClient(); |
| | | return webClient.DownloadString(url); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | System.Console.WriteLine(e.Message); |
| | | return null; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 获取A31的名称 |
| | | /// </summary> |
| | | /// <param name="ip"></param> |
| | | /// <param name="port"></param> |
| | | /// <returns></returns> |
| | | static string GetDeviceName(string ip, int port) |
| | | { |
| | | string deviceName = null; |
| | | System.IO.StreamReader sr = null; |
| | | WebClient webClient = new WebClient(); |
| | | try |
| | | { |
| | | var receviceBytes = webClient.DownloadData(new Uri("http://" + ip + ":" + port + "/description.xml")); |
| | | sr = new System.IO.StreamReader(new System.IO.MemoryStream(receviceBytes), Encoding.UTF8); |
| | | string line = null; |
| | | string deviceType = null; |
| | | |
| | | while ((line = sr.ReadLine()) != null) |
| | | { |
| | | //System.Console.WriteLine (line); |
| | | if (line.StartsWith("<friendlyName>")) |
| | | { |
| | | deviceName = line.Replace("<friendlyName>", "").Replace("</friendlyName>", ""); |
| | | } |
| | | else if (line.StartsWith("<manufacturer>")) |
| | | { |
| | | deviceType = line.Replace("<manufacturer>", "").Replace("</manufacturer>", ""); |
| | | } |
| | | } |
| | | switch (deviceType) |
| | | { |
| | | case "iEAST": |
| | | case "Linkplay Technology Inc.": |
| | | break; |
| | | //不是A31的音乐数据 |
| | | default: |
| | | deviceName = null; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | System.Console.WriteLine(e.Message); |
| | | } |
| | | finally |
| | | { |
| | | if (sr != null) |
| | | { |
| | | sr.Close(); |
| | | } |
| | | } |
| | | return deviceName; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 切换播放器模式,修改音乐名称,切换蓝牙,线路输入 |
| | | /// </summary> |
| | | /// <param name="coutn"></param> |
| | | public static void SendCommand(string url) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | WebClient webClient = new WebClient(); |
| | | try |
| | | { |
| | | byte[] recevieBytes1 = webClient.DownloadData(new Uri(url)); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //this.IPAddress = ex.Message; |
| | | } |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// 播放 |
| | | /// </summary> |
| | | public static void Play(A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine("<u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("<Speed>1</Speed>"); |
| | | sb.AppendLine("</u:Play>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:AVTransport:1#Play\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendertransport1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | catch { } |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// 暂停 |
| | | /// </summary> |
| | | public static void Pause(A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine("<u:Pause xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("</u:Pause>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:AVTransport:1#Pause\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendertransport1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | catch { } |
| | | }); |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 下一曲 |
| | | /// </summary> |
| | | public static void Next(A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine("<u:Next xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("</u:Next>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:AVTransport:1#Next\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendertransport1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | catch { } |
| | | }); |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 上一曲 |
| | | /// </summary> |
| | | public static void Previous(A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine(" <u:Previous xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("</u:Previous>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:AVTransport:1#Previous\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendertransport1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | catch { } |
| | | }); |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 快进 |
| | | /// </summary> |
| | | public static void Seek(string seekvolume, A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine(" <u:Seek xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("<Unit>REL_TIME</Unit>"); |
| | | sb.AppendLine("<Target>" + seekvolume + "</Target>"); |
| | | sb.AppendLine("</u:Seek>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:AVTransport:1#Seek\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendertransport1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | catch { } |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// 调节音量 |
| | | /// </summary> |
| | | /// <param name="volume">Volume.</param> |
| | | public static void ControlVolume(int volume, A31MusicModel a31player) |
| | | { |
| | | System.Threading.Tasks.Task.Run(() => |
| | | { |
| | | A31MusicModel.ProgressDateTime = DateTime.Now; |
| | | try |
| | | { |
| | | if (a31player.ServerClientType == -1) |
| | | { |
| | | new System.Net.WebClient().DownloadData(new Uri("http://" + a31player.MainPlayIP + "/httpapi.asp?command=multiroom:SlaveVolume:" + a31player.IPAddress + ":" + volume)); |
| | | } |
| | | else if (a31player.ServerClientType == 1) |
| | | { |
| | | new System.Net.WebClient().DownloadData(new Uri("http://" + a31player.IPAddress + "/httpapi.asp?command=setPlayerCmd:slave_vol:" + volume)); |
| | | } |
| | | else |
| | | { |
| | | var sb = new StringBuilder(); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine("<u:SetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\">"); |
| | | sb.AppendLine("<InstanceID>0</InstanceID>"); |
| | | sb.AppendLine("<Channel>Master</Channel>"); |
| | | sb.AppendLine("<DesiredVolume>" + volume + "</DesiredVolume>"); |
| | | sb.AppendLine("</u:SetVolume>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | var webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:RenderingControl:1#SetVolume\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/rendercontrol1"), "POST", Encoding.UTF8.GetBytes(sb.ToString())); |
| | | } |
| | | } |
| | | catch { } |
| | | }); |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 获取USb的列表 |
| | | /// </summary> |
| | | public static List<Songs> GetUsbList(A31MusicModel a31player) |
| | | { |
| | | var musicInfoList = new List<Songs>(); |
| | | musicInfoList.Clear(); |
| | | var usbString = GetUSBPlayList(a31player); |
| | | if (usbString == null) |
| | | { |
| | | return musicInfoList; |
| | | } |
| | | var se = System.Security.SecurityElement.FromString(usbString); |
| | | if (se == null) |
| | | { |
| | | return musicInfoList; |
| | | } |
| | | while (se.Children != null) |
| | | { |
| | | se = se.Children[0] as System.Security.SecurityElement; |
| | | } |
| | | |
| | | foreach (SecurityElement track in SecurityElement.FromString(se.Text).SearchForChildByTag("Tracks").Children) |
| | | { |
| | | Songs musicInfo = new Songs(); |
| | | musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;"); |
| | | var metadata = track.SearchForTextOfTag("Metadata").Replace("&", "&"); |
| | | var item = SecurityElement.FromString(metadata).SearchForChildByTag("item"); |
| | | musicInfo.Title = item.SearchForTextOfTag("dc:title").Replace("&", "&amp;"); |
| | | musicInfo.Artist = item.SearchForTextOfTag("upnp:artist").Replace("&", "&amp;"); |
| | | musicInfo.Album = item.SearchForTextOfTag("upnp:album").Replace("&", "&amp;"); |
| | | musicInfo.Duration = item.SearchForTextOfTag("res"); |
| | | musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid").Replace("&", "&amp;"); |
| | | musicInfoList.Add(musicInfo); |
| | | } |
| | | return musicInfoList; |
| | | } |
| | | /// <summary> |
| | | ///请求USB列表命令 |
| | | /// </summary> |
| | | public static string GetUSBPlayList(A31MusicModel a31player) |
| | | { |
| | | |
| | | StringBuilder getPlayList = new StringBuilder(); |
| | | getPlayList.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | getPlayList.AppendLine("<s:Body>"); |
| | | getPlayList.AppendLine("<u:BrowseQueue xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); |
| | | getPlayList.AppendLine("<QueueName>USBDiskQueue</QueueName>"); |
| | | getPlayList.AppendLine("</u:BrowseQueue>"); |
| | | getPlayList.AppendLine("</s:Body>"); |
| | | getPlayList.AppendLine("</s:Envelope>"); |
| | | |
| | | WebClient webClient = new WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#BrowseQueue\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | |
| | | try |
| | | { |
| | | byte[] recevieBytes = webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(getPlayList.ToString())); |
| | | return System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); |
| | | } |
| | | catch { } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读取电台组列表 |
| | | /// </summary> |
| | | /// <returns>读取到的电台组列表信息,读取不到反馈为null</returns> |
| | | public static string ReadRadioList(string url) |
| | | { |
| | | WebClient webClient = new WebClient(); |
| | | webClient.Proxy = null; |
| | | webClient.Headers.Add("Content-type", "plain/text; charset=UTF-8"); |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | webClient.Headers.Add("Accept-Language", "zh-cn"); |
| | | } |
| | | else |
| | | { |
| | | webClient.Headers.Add("Accept-Language", "en-us"); |
| | | } |
| | | try |
| | | { |
| | | byte[] recevieBytes = webClient.DownloadData(new Uri(url)); |
| | | return System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前播放的列表 |
| | | /// </summary> |
| | | public static string GetCurrentPlayList(A31MusicModel a31player) |
| | | { |
| | | System.Text.StringBuilder getPlayList = new System.Text.StringBuilder(); |
| | | getPlayList.AppendLine("<?xml version=\"1.0\"encoding=\"utf-8\"?>"); |
| | | getPlayList.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | getPlayList.AppendLine("<s:Body>"); |
| | | getPlayList.AppendLine("<u:BrowseQueue xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); |
| | | getPlayList.AppendLine("<QueueName>CurrentQueue</QueueName>"); |
| | | getPlayList.AppendLine("</u:BrowseQueue>"); |
| | | getPlayList.AppendLine("</s:Body>"); |
| | | getPlayList.AppendLine("</s:Envelope>"); |
| | | |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#BrowseQueue\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | byte[] recevieBytes = webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(getPlayList.ToString())); |
| | | return System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); |
| | | } |
| | | catch { } |
| | | return null; |
| | | } |
| | | /// <summary> |
| | | /// 播放USB音乐命令 |
| | | /// </summary> |
| | | /// <param name="listName">列表名称</param> |
| | | /// <param name="number">播放索引</param> |
| | | public static void ListMusicPlay(string listName, object number, A31MusicModel a31player) |
| | | { |
| | | System.Text.StringBuilder playstrings = new System.Text.StringBuilder(); |
| | | playstrings.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"); |
| | | playstrings.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | playstrings.AppendLine("<s:Body>"); |
| | | playstrings.AppendLine("<u:PlayQueueWithIndex xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); |
| | | playstrings.AppendLine("<QueueName>" + listName + "</QueueName>"); |
| | | playstrings.AppendLine("<Index>" + number + "</Index>"); |
| | | playstrings.AppendLine("</u:PlayQueueWithIndex>"); |
| | | playstrings.AppendLine("</s:Body>"); |
| | | playstrings.AppendLine("</s:Envelope>"); |
| | | System.Net.WebClient webClient = new System.Net.WebClient(); |
| | | webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#PlayQueueWithIndex\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | byte[] recevieBytes = webClient.UploadData(new Uri("http://" + a31player.IPAddress + ":" + a31player.Port + "/upnp/control/PlayQueue1"), "POST", Encoding.UTF8.GetBytes(playstrings.ToString())); |
| | | var s = System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); |
| | | } |
| | | catch { } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 推送播放命令 |
| | | /// </summary> |
| | | /// <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) |
| | | { |
| | | |
| | | //最大发送的条数 |
| | | int maxCount = 50; |
| | | //找出当前点击音乐的索引 |
| | | int statIndex = musicList.FindIndex((obj) => { return obj == musicInfo; }); |
| | | //点击后面还有多少条音乐 |
| | | int count = musicList.Count - statIndex; |
| | | int endIndex = 0; |
| | | if (maxCount < count) |
| | | { |
| | | //如果后面的音乐大于最大数,设置后面数据的最大索引 |
| | | endIndex = statIndex + maxCount - 1; |
| | | } |
| | | else |
| | | { |
| | | //如果后面数据不多,就用总数减去最大条数,得到开始索引 |
| | | statIndex = musicList.Count - maxCount - 1; |
| | | endIndex = musicList.Count - 1; |
| | | } |
| | | //如果开始索引小于0,那就设置为第一条音乐 |
| | | if (statIndex < 0) |
| | | { |
| | | statIndex = 0; |
| | | } |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); |
| | | sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | sb.AppendLine("<s:Body>"); |
| | | sb.AppendLine("<u:CreateQueue xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); |
| | | sb.AppendLine("<QueueContext><?xml version=\"1.0\"?>"); |
| | | sb.AppendLine("<PlayList>"); |
| | | sb.AppendLine("<ListName>DLNA" + listName + "</ListName>"); |
| | | sb.AppendLine("<ListInfo>"); |
| | | sb.AppendLine("<Radio>0</Radio>");// |
| | | sb.AppendLine("<SourceName>UPnPServer</SourceName>");// |
| | | sb.AppendLine("<MarkSearch>0</MarkSearch>"); |
| | | sb.AppendLine("<TrackNumber>" + (endIndex - statIndex + 1) + "</TrackNumber>"); |
| | | sb.AppendLine("<Quality>0</Quality>"); |
| | | sb.AppendLine("<UpdateTime>5367</UpdateTime>"); |
| | | sb.AppendLine("<LastPlayIndex>2</LastPlayIndex>"); |
| | | sb.AppendLine("<SwitchPageMode>0</SwitchPageMode>"); |
| | | sb.AppendLine("<CurrentPage>0</CurrentPage>"); |
| | | sb.AppendLine("<TotalPages>0</TotalPages>"); |
| | | sb.AppendLine("</ListInfo>"); |
| | | sb.AppendLine("<Tracks>"); |
| | | |
| | | int number = 1; |
| | | |
| | | for (int i = statIndex, Tracknumber = 1; i <= endIndex; i++, Tracknumber++) |
| | | { |
| | | var tempMusicInfo = musicList[i]; |
| | | |
| | | if (musicInfo == tempMusicInfo) |
| | | { |
| | | number = Tracknumber; |
| | | } |
| | | |
| | | if (tempMusicInfo.SourceType == "Local") |
| | | { |
| | | tempMusicInfo.URL = "http://" + new Shared.Net.NetWiFi().IpAddress + ":" + com.hdl.on.Server.Port + "/" + tempMusicInfo.ID; |
| | | } |
| | | |
| | | sb.AppendLine("<Track" + Tracknumber + ">"); |
| | | sb.AppendLine("<URL>" + tempMusicInfo.URL + "</URL>"); |
| | | sb.AppendLine("<Metadata>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;"); |
| | | sb.AppendLine("&lt;DIDL-Lite xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:song=&quot;www.wiimu.com/song/&quot; xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot;&gt;"); |
| | | sb.AppendLine("&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;"); |
| | | sb.AppendLine("&lt;item id=&quot;0&quot;&gt;"); |
| | | sb.AppendLine("&lt;song:subid&gt;&lt;/song:subid&gt;"); |
| | | sb.AppendLine("&lt;song:description&gt;unknown&lt;/song:description&gt;"); |
| | | sb.AppendLine("&lt;song:skiplimit&gt;6&lt;/song:skiplimit&gt;"); |
| | | sb.AppendLine("&lt;song:id&gt;" + tempMusicInfo.ID + "&lt;/song:id&gt;"); |
| | | sb.AppendLine("&lt;song:like&gt;0&lt;/song:like&gt;"); |
| | | sb.AppendLine("&lt;song:singerid&gt;0&lt;/song:singerid&gt;"); |
| | | sb.AppendLine("&lt;song:albumid&gt;" + tempMusicInfo.AlbumId + "&lt;/song:albumid&gt;"); |
| | | |
| | | sb.AppendLine("&lt;res protocolInfo=&quot;http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;&quot; duration=&quot;" + "0:0:0.0" + "&quot;&gt;" + tempMusicInfo.URL + "&lt;/res&gt;"); |
| | | |
| | | sb.AppendLine("&lt;dc:title&gt;" + tempMusicInfo.Title + "&lt;/dc:title&gt;"); |
| | | sb.AppendLine("&lt;dc:creator&gt;DJ Sanny J&lt;/dc:creator&gt;"); |
| | | if (musicSource == "我的列表") |
| | | { |
| | | sb.AppendLine("&lt;upnp:artist&gt;" + listName + "&lt;/upnp:artist&gt;"); |
| | | } |
| | | else |
| | | { |
| | | sb.AppendLine("&lt;upnp:artist&gt;" + tempMusicInfo.Artist + "&lt;/upnp:artist&gt;"); |
| | | } |
| | | sb.AppendLine("&lt;upnp:album&gt;" + tempMusicInfo.Album + "&lt;/upnp:album&gt;"); |
| | | sb.AppendLine("&lt;upnp:albumArtURI&gt;unknown&lt;/upnp:albumArtURI&gt;"); |
| | | sb.AppendLine("&lt;/item&gt;"); |
| | | sb.AppendLine("&lt;/DIDL-Lite&gt;"); |
| | | sb.AppendLine("</Metadata>"); |
| | | sb.AppendLine("<Id>" + tempMusicInfo.ID + "</Id>"); |
| | | sb.AppendLine("<Source>STATION-NETWORK</Source>");//UPnPServer |
| | | sb.AppendLine("<Key>" + tempMusicInfo.URL + "</Key>"); |
| | | sb.AppendLine("</Track" + Tracknumber + ">"); |
| | | } |
| | | sb.AppendLine("</Tracks>"); |
| | | sb.AppendLine("</PlayList>"); |
| | | sb.AppendLine("</QueueContext>"); |
| | | sb.AppendLine("</u:CreateQueue>"); |
| | | sb.AppendLine("</s:Body>"); |
| | | sb.AppendLine("</s:Envelope>"); |
| | | |
| | | SendMusicLists(a31player.IPAddress, a31player.Port, "CreateQueue", sb.ToString()); |
| | | |
| | | StringBuilder playString = new StringBuilder(); |
| | | playString.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); |
| | | playString.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
| | | playString.AppendLine("<s:Body>"); |
| | | playString.AppendLine("<u:PlayQueueWithIndex xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); |
| | | playString.AppendLine("<QueueName>DLNA" + listName + "</QueueName>"); |
| | | playString.AppendLine("<Index>" + number + "</Index>"); |
| | | playString.AppendLine("</u:PlayQueueWithIndex>"); |
| | | playString.AppendLine("</s:Body>"); |
| | | playString.AppendLine("</s:Envelope>"); |
| | | |
| | | Play(a31player.IPAddress, a31player.Port, playString.ToString()); |
| | | } |
| | | |
| | | 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 + "\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | 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) |
| | | { |
| | | var d = e.Message; |
| | | } |
| | | } |
| | | |
| | | 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\""); |
| | | webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); |
| | | try |
| | | { |
| | | byte[] recevieBytes = webClient.UploadData(new Uri("http://" + ip + ":" + port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(info)); |
| | | var s = System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); |
| | | } |
| | | catch |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | static System.Threading.Thread thread; |
| | | /// <summary> |
| | | /// 修改蓝牙名称 |
| | | /// </summary> |
| | | /// <param name="message"></param> |
| | | public static void ModifyBluetoothName(string message) |
| | | { |
| | | if (thread != null) |
| | | { |
| | | thread.Abort(); |
| | | } |
| | | thread = new System.Threading.Thread(() => |
| | | { |
| | | var tcpClient = new TcpClient() { ReceiveTimeout = 1000 }; |
| | | try |
| | | { |
| | | //进行连接 |
| | | tcpClient.Connect(new IPEndPoint(IPAddress.Parse(A31MusicModel.Current.IPAddress), 8899)); |
| | | var buffter = Encoding.UTF8.GetBytes(message); |
| | | var sendByes = new byte[20 + buffter.Length]; |
| | | sendByes[0] = 0x18; |
| | | sendByes[1] = 0x96; |
| | | sendByes[2] = 0x18; |
| | | sendByes[3] = 0x20; |
| | | |
| | | sendByes[4] = (byte)((buffter.Length & 0x000000FF) >> 0); |
| | | sendByes[5] = (byte)((buffter.Length & 0x0000FF00) >> 8); |
| | | sendByes[6] = (byte)((buffter.Length & 0x00FF0000) >> 16); |
| | | sendByes[7] = (byte)((buffter.Length & 0xFF000000) >> 24); |
| | | |
| | | var checkSum = getCheckSum(buffter); |
| | | sendByes[8] = (byte)((checkSum & 0x000000FF) >> 0); |
| | | sendByes[9] = (byte)((checkSum & 0x0000FF00) >> 8); |
| | | sendByes[10] = (byte)((checkSum & 0x00FF0000) >> 16); |
| | | sendByes[11] = (byte)((checkSum & 0xFF000000) >> 24); |
| | | |
| | | sendByes[16] = 0x08; |
| | | |
| | | Array.Copy(buffter, 0, sendByes, 20, buffter.Length); |
| | | tcpClient.GetStream().Write(sendByes, 0, sendByes.Length); |
| | | tcpClient.GetStream().Flush(); |
| | | |
| | | thread = null; |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | tcpClient.Close(); |
| | | } |
| | | }); |
| | | thread.Start(); |
| | | } |
| | | static uint getCheckSum(byte[] buffer) |
| | | { |
| | | uint check_sum = 0; |
| | | |
| | | for (int i = 0; i < buffer.Length; i++) |
| | | { |
| | | check_sum += buffer[i]; |
| | | } |
| | | |
| | | return check_sum; |
| | | } |
| | | public class A31QQSong |
| | | { |
| | | public string title = string.Empty; |
| | | public string album = string.Empty; |
| | | public string creator = string.Empty; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取音乐列表 |
| | | /// </summary> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取设备最新的状态 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public void GetDeviceStatus(ref A31MusicModel a31Music, List<string> 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 { } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新设备状态 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public void RefreshDeviceStatus(Function music, List<string> functionIds) |
| | | public void RefreshDeviceStatus(List<string> functionIds) |
| | | { |
| | | try |
| | | { |
| | |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("deviceIds", functionIds); |
| | | var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus); |
| | | if (responsePackNew.Code != "0" || responsePackNew.Data != null || responsePackNew.Data.ToString() != "") |
| | | if (responsePackNew.Code != "0" || responsePackNew.Data == null || responsePackNew.Data.ToString() == "") |
| | | { |
| | | return; |
| | | } |
| | | //数据返序列化为Function对象 |
| | | var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data); |
| | | 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> |
| | | /// 设备名称修改 |
| | | /// </summary> |
| | | public string EditDeviceName(string deviceId, string deviceName) |
| | | { |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | 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; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取音乐列表 |
| | | /// </summary> |