using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Security;
using System.Text;
using Shared;
namespace HDL_ON.UI.Music
{
public class SendMethod
{
///
///搜索A31音乐播放器
///
///
///
///
public static void Seach(Action 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); }
}
});
}
///
/// 更新A31播放器的状态
///
///
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(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("0"));
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(trackMetaData);
a31MusicModel.A31PlayStatus.Title = a31QQSong.title;
a31MusicModel.A31PlayStatus.Album = a31QQSong.album;
a31MusicModel.A31PlayStatus.Artist = a31QQSong.creator;
}
else
{
var metadata = trackMetaData.Replace("", "").Replace("&", "&");
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("&", "&");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
#region 更新其他界面音乐状态
Application.RunOnMainThread(() =>
{
a31MusicModel.trait_on_off.value = a31MusicModel.A31PlayStatus.status == "play" ? "on" : "off";
//Console.WriteLine($"music : {a31MusicModel.sid} : {a31MusicModel.on_off}");
HomePage.UpdataFunctionStates(a31MusicModel);
foreach (var e in A31MusicModel.A31MusicModelList)
{
RoomPage.UpdataStates(a31MusicModel);
}
});
#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;
}
}
///
/// 获取A31的名称
///
///
///
///
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(""))
{
deviceName = line.Replace("", "").Replace("", "");
}
else if (line.StartsWith(""))
{
deviceType = line.Replace("", "").Replace("", "");
}
}
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;
}
///
/// 切换播放器模式,修改音乐名称,切换蓝牙,线路输入
///
///
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;
}
});
}
///
/// 播放
///
public static void Play(A31MusicModel a31player)
{
System.Threading.Tasks.Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("0");
sb.AppendLine("1");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 暂停
///
public static void Pause(A31MusicModel a31player)
{
System.Threading.Tasks.Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("0");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 下一曲
///
public static void Next(A31MusicModel a31player)
{
System.Threading.Tasks.Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("0");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 上一曲
///
public static void Previous(A31MusicModel a31player)
{
System.Threading.Tasks.Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine(" ");
sb.AppendLine("0");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 快进
///
public static void Seek(string seekvolume, A31MusicModel a31player)
{
System.Threading.Tasks.Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine(" ");
sb.AppendLine("0");
sb.AppendLine("REL_TIME");
sb.AppendLine("" + seekvolume + "");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 调节音量
///
/// Volume.
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("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("0");
sb.AppendLine("Master");
sb.AppendLine("" + volume + "");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
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 { }
});
}
///
/// 获取USb的列表
///
public static List GetUsbList(A31MusicModel a31player)
{
var musicInfoList = new List();
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)
{
MusicInfo musicInfo = new MusicInfo();
musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&");
var metadata = track.SearchForTextOfTag("Metadata").Replace("&", "&");
var item = SecurityElement.FromString(metadata).SearchForChildByTag("item");
musicInfo.Title = item.SearchForTextOfTag("dc:title").Replace("&", "&");
musicInfo.Artist = item.SearchForTextOfTag("upnp:artist").Replace("&", "&");
musicInfo.Album = item.SearchForTextOfTag("upnp:album").Replace("&", "&");
musicInfo.Duration = item.SearchForTextOfTag("res");
musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid").Replace("&", "&");
musicInfoList.Add(musicInfo);
}
return musicInfoList;
}
///
///请求USB列表命令
///
public static string GetUSBPlayList(A31MusicModel a31player)
{
StringBuilder getPlayList = new StringBuilder();
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("USBDiskQueue");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
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;
}
///
/// 读取电台组列表
///
/// 读取到的电台组列表信息,读取不到反馈为null
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;
}
}
///
/// 获取当前播放的列表
///
public static string GetCurrentPlayList(A31MusicModel a31player)
{
System.Text.StringBuilder getPlayList = new System.Text.StringBuilder();
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("CurrentQueue");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
getPlayList.AppendLine("");
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;
}
///
/// 播放USB音乐命令
///
/// 列表名称
/// 播放索引
public static void ListMusicPlay(string listName, object number, A31MusicModel a31player)
{
System.Text.StringBuilder playstrings = new System.Text.StringBuilder();
playstrings.AppendLine("");
playstrings.AppendLine("");
playstrings.AppendLine("");
playstrings.AppendLine("");
playstrings.AppendLine("" + listName + "");
playstrings.AppendLine("" + number + "");
playstrings.AppendLine("");
playstrings.AppendLine("");
playstrings.AppendLine("");
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 { }
}
///
/// 推送播放命令
///
/// 播放音乐
/// 列表名称
/// 推送列表(默认推50首)
public static void PushList(MusicInfo musicInfo, string listName, List 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("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("<?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><?xml version="1.0" encoding="UTF-8"?>");
sb.AppendLine("<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:song="www.wiimu.com/song/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/">");
sb.AppendLine("<upnp:class>object.item.audioItem.musicTrack</upnp:class>");
sb.AppendLine("<item id="0">");
sb.AppendLine("<song:subid></song:subid>");
sb.AppendLine("<song:description>unknown</song:description>");
sb.AppendLine("<song:skiplimit>6</song:skiplimit>");
sb.AppendLine("<song:id>" + tempMusicInfo.ID + "</song:id>");
sb.AppendLine("<song:like>0</song:like>");
sb.AppendLine("<song:singerid>0</song:singerid>");
sb.AppendLine("<song:albumid>" + tempMusicInfo.AlbumId + "</song:albumid>");
sb.AppendLine("<res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;" duration="" + "0:0:0.0" + "">" + tempMusicInfo.URL + "</res>");
sb.AppendLine("<dc:title>" + tempMusicInfo.Title + "</dc:title>");
sb.AppendLine("<dc:creator>DJ Sanny J</dc:creator>");
if (musicSource== "我的列表") {
sb.AppendLine("<upnp:artist>" + listName + "</upnp:artist>");
}
else {
sb.AppendLine("<upnp:artist>" + tempMusicInfo.Artist + "</upnp:artist>");
}
sb.AppendLine("<upnp:album>" + tempMusicInfo.Album + "</upnp:album>");
sb.AppendLine("<upnp:albumArtURI>unknown</upnp:albumArtURI>");
sb.AppendLine("</item>");
sb.AppendLine("</DIDL-Lite>");
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("");
sb.AppendLine("");
sb.AppendLine("");
sb.AppendLine("");
SendMusicLists(a31player.IPAddress, a31player.Port, "CreateQueue", sb.ToString());
StringBuilder playString = new StringBuilder();
playString.AppendLine("");
playString.AppendLine("");
playString.AppendLine("");
playString.AppendLine("");
playString.AppendLine("DLNA" + listName + "");
playString.AppendLine("" + number + "");
playString.AppendLine("");
playString.AppendLine("");
playString.AppendLine("");
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;
///
/// 修改蓝牙名称
///
///
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;
}
}
}