using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using Shared;
|
using Shared.SimpleControl.Pad;
|
using Shared.SimpleControl.R;
|
using SmartHome.UI.SimpleControl.Pad.Music;
|
using System.Xml;
|
using System.Security;
|
using SmartHome;
|
|
namespace Shared.SimpleControl.Pad.Music
|
{
|
class PlayerPage : FrameLayout
|
{
|
public override void RemoveFromParent ()
|
{
|
base.RemoveFromParent ();
|
clearA31Threads ();
|
clearOldThreads ();
|
}
|
/// <summary>
|
/// 播放界面
|
/// </summary>
|
FrameLayout PalyMusicPage;
|
/// <summary>
|
/// 源界面
|
/// </summary>
|
FrameLayout MusicSourcePage;
|
/// <summary>
|
/// 所有音乐播放器的音量
|
/// </summary>
|
HorizontalSeekBar allVol;
|
|
/// <summary>
|
/// 静音
|
/// </summary>
|
Button muteVol;
|
|
|
/// <summary>
|
/// 加载所有音乐的滑动视图
|
/// </summary>
|
MusicVerticalScrolViewLayout verticalScrolViewLayout;
|
|
string openWeb (string url)
|
{
|
try {
|
Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient (3000);
|
return System.Text.Encoding.UTF8.GetString (webClient.DownloadData (url));
|
} catch {
|
return null;
|
}
|
}
|
|
static List<System.Threading.Thread> threadLists = new List<System.Threading.Thread> ();
|
|
static void clearA31Threads ()
|
{
|
var threads = threadLists.FindAll ((obj) => { return obj.Name == "A31"; });
|
foreach (var thread in threads) {
|
try {
|
threadLists.Remove (thread);
|
thread.Abort ();
|
} catch { }
|
}
|
}
|
|
static void clearOldThreads ()
|
{
|
var threads = threadLists.FindAll ((obj) => { return obj.Name == "Old"; });
|
foreach (var thread in threads) {
|
try {
|
threadLists.Remove (thread);
|
thread.Abort ();
|
} catch { }
|
}
|
}
|
|
public void Show (FrameLayout controlBodyView, FrameLayout bordorView, bool reload)
|
{
|
PalyMusicPage = new FrameLayout () {
|
Width = Application.GetRealWidth (826)
|
};
|
controlBodyView.AddChidren (PalyMusicPage);
|
|
MusicSourcePage = new FrameLayout () {
|
X = PalyMusicPage.Right,
|
Width = Application.GetRealWidth (Application.DesignWidth - 830 - 640),
|
};
|
controlBodyView.AddChidren (MusicSourcePage);
|
|
var topFrameLayout = new FrameLayout {
|
Height = Application.GetRealHeight (140),
|
BackgroundColor = SkinStyle.Current.MainColor,
|
};
|
AddChidren (topFrameLayout);
|
|
FrameLayout frayout = new FrameLayout {
|
Width = LayoutParams.MatchParent,
|
Height = Application.GetRealHeight (Application.DesignHeight - 140 - 140 - 150),
|
//BackgroundImagePath = "MusicIcon/MusicBackgroun.png",
|
BackgroundColor = 0xff2F2F2F,
|
Y = topFrameLayout.Bottom,
|
};
|
AddChidren (frayout);
|
|
verticalScrolViewLayout = new MusicVerticalScrolViewLayout ();
|
|
#region 总音量控制层
|
var bottomFrameLayout = new FrameLayout {
|
Height = Application.GetRealHeight (140),
|
Y = frayout.Bottom,
|
BackgroundColor = 0xFF181818,
|
};
|
AddChidren (bottomFrameLayout);
|
|
var voiceVol = new Button {
|
Width = Application.GetRealWidth (107),
|
Height = Application.GetRealHeight (127),
|
X = Application.GetRealWidth (-3),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "MusicIcon/PlayVoice.png",
|
};
|
bottomFrameLayout.AddChidren (voiceVol);
|
|
var frameLayoutVol = new FrameLayout {
|
Width = Application.GetRealWidth (470),
|
Height = Application.GetRealHeight (50),
|
X = Application.GetRealWidth (90),
|
Gravity = Gravity.CenterVertical,
|
};
|
bottomFrameLayout.AddChidren (frameLayoutVol);
|
|
allVol = new HorizontalSeekBar {
|
Width = Application.GetRealWidth (470 - 45),
|
Height = Application.GetRealHeight (50),
|
Radius = (uint)Application.GetRealHeight (25),
|
X = Application.GetRealWidth (13),
|
Max = 100,
|
Progress = 50,
|
SleepTime = 1000,
|
ProgressColor = 0xffFE5E00,
|
};
|
frameLayoutVol.AddChidren (allVol);
|
allVol.ProgressChanged += allVol_ProgressChanged;
|
|
muteVol = new Button {
|
Width = Application.GetRealWidth (107),
|
Height = Application.GetRealWidth (127),
|
X = Application.GetRealWidth (530),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "MusicIcon/PlayMute.png",
|
SelectedImagePath = "MusicIcon/PlayMuteSelected.png",
|
};
|
bottomFrameLayout.AddChidren (muteVol);
|
muteVol.MouseDownEventHandler += MuteVol_MouseDownEventHandler;
|
#endregion
|
|
//主从
|
verticalScrolViewLayout.ReplaceChanged += (arg1, arg2) => {
|
if (arg1.Tag.GetType () == typeof (A31MusicModel) && arg2.Tag.GetType () == typeof (A31MusicModel)) {
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.disposition) + "...");
|
System.Threading.Tasks.Task.Run (() => {
|
try {
|
var serverMusic = arg1.Tag as A31MusicModel;
|
var clientMusic = arg2.Tag as A31MusicModel;
|
clearA31Threads ();
|
var statusEx = openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getStatusEx");
|
if (statusEx == null) {
|
statusEx = openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getStatusEx");
|
}
|
if (statusEx == null) {
|
return;
|
}
|
var a31ssid = Newtonsoft.Json.JsonConvert.DeserializeObject<a31wifi> (statusEx);
|
string ssid = "";
|
foreach (var b in a31ssid.ssid) {
|
ssid += System.Convert.ToString (b, 16).ToUpper ().Length < 2 ? "0" + System.Convert.ToString (b, 16).ToUpper () : System.Convert.ToString (b, 16).ToUpper ();
|
}
|
|
var wifiJsonList = openWeb ("http://" + clientMusic.IPAddress + "/httpapi.asp?command=wlanGetApList");
|
if (wifiJsonList == null) {
|
wifiJsonList = openWeb ("http://" + clientMusic.IPAddress + "/httpapi.asp?command=wlanGetApList");
|
}
|
if (wifiJsonList == null) {
|
return;
|
}
|
var wifiList = Newtonsoft.Json.JsonConvert.DeserializeObject<a31wifimessage> (wifiJsonList);
|
var wifiInfo = wifiList.aplist.Find ((obj) => { return obj.ssid == WiimuUPnP.SSID; });
|
if (wifiInfo == null) {
|
return;
|
}
|
|
if (null == openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getNetwork")) {
|
if (null == openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getNetwork")) {
|
return;
|
}
|
}
|
System.Threading.Thread.Sleep (1000);
|
if (null == openWeb ("http://" + clientMusic.IPAddress + "/httpapi.asp?command=ConnectMasterAp:ssid=" + ssid + ":ch=" + wifiInfo.channel + ":auth=" + wifiInfo.auth + ":encry=" + wifiInfo.encry + ":pwd=:chext=" + wifiInfo.extch)) {
|
if (null == openWeb ("http://" + clientMusic.IPAddress + "/httpapi.asp?command=ConnectMasterAp:ssid=" + ssid + ":ch=" + wifiInfo.channel + ":auth=" + wifiInfo.auth + ":encry=" + wifiInfo.encry + ":pwd=:chext=" + wifiInfo.extch)) {
|
return;
|
}
|
}
|
|
System.DateTime dateTime = DateTime.Now;
|
while ((DateTime.Now - dateTime).TotalSeconds < 10) {
|
System.Threading.Thread.Sleep (1000);
|
try {
|
var result = openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
|
if (result != null) {
|
var tmepSlaves = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves> (result);
|
if (tmepSlaves.slave_list != null) {
|
if (null != tmepSlaves.slave_list.Find ((obj) => { return obj.uuid.EndsWith (clientMusic.UniqueDeviceName); })) {
|
//已经添加成功
|
break;
|
}
|
}
|
}
|
} catch { }
|
}
|
//关闭server
|
//openWeb ("http://" + serverMusic.IPAddress + "/httpapi.asp?command=wpscancel");
|
} catch { } finally {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
MusicSourcePage.RemoveFromParent ();
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
bordorView.RemoveViewByType (typeof (PlayerPage));
|
|
PlayerPage mymusic = new PlayerPage ();
|
bordorView.AddChidren (mymusic);
|
mymusic.Show (controlBodyView, bordorView, true);
|
|
|
});
|
}
|
});
|
}
|
};
|
frayout.AddChidren (verticalScrolViewLayout);
|
|
var device = new Button {
|
TextID = MyInternationalizationString.MusicDevicelist,
|
Gravity = Gravity.Center,
|
TextSize = 20,
|
};
|
topFrameLayout.AddChidren (device);
|
|
var wifi = new Button {
|
Width = Application.GetMinRealAverage (50),
|
Height = Application.GetMinRealAverage (50),
|
UnSelectedImagePath = "MusicIcon/wifi.png",
|
//UnSelectedImagePath = "MusicIcon/set.png",
|
X = Application.GetRealWidth (450),
|
Gravity = Gravity.CenterVertical,
|
};
|
topFrameLayout.AddChidren (wifi);
|
wifi.MouseUpEventHandler += (sender, e) => {
|
A31Wifimusic a31wifi = new A31Wifimusic ();
|
bordorView.AddChidren (a31wifi);
|
a31wifi.show (controlBodyView, bordorView, PalyMusicPage, MusicSourcePage);
|
};
|
|
var a31search = new Button {
|
Width = Application.GetMinRealAverage (60),
|
Height = Application.GetMinRealAverage (80),
|
X = Application.GetRealWidth (535),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "MusicIcon/seekdevice.png",
|
};
|
topFrameLayout.AddChidren (a31search);
|
a31search.MouseUpEventHandler += (sender, e) => {
|
|
MusicSourcePage.RemoveFromParent ();
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
bordorView.RemoveViewByType (typeof (PlayerPage));
|
|
PlayerPage mymusic = new PlayerPage ();
|
bordorView.AddChidren (mymusic);
|
mymusic.Show (controlBodyView, bordorView, true);
|
};
|
initOldMusic (verticalScrolViewLayout);
|
|
if (reload || A31MusicModel.A31MusicModelList.Count == 0) {
|
refreshDevice (controlBodyView, bordorView, verticalScrolViewLayout);
|
} else {
|
clearA31Threads ();
|
foreach (var a31player in A31MusicModel.A31MusicModelList) {
|
//这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
|
if (!a31player.IsCanShow) {
|
continue;
|
}
|
//加载界面时默认不在线
|
a31player.IsOnLine = false;
|
|
|
addViews (controlBodyView, bordorView, a31player);
|
}
|
//读取正确的信息,包括IP和端口及名称
|
seach ((obj) => {
|
if (obj == null) {
|
//这里要读取主从关系
|
readServerOrClientMode (false);
|
A31MusicModel.Save ();
|
return;
|
}
|
//System.Console.WriteLine (obj.UniqueDeviceName);
|
var a31MusicModel = A31MusicModel.A31MusicModelList.Find ((music) => { return 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;
|
}
|
|
});
|
}
|
}
|
//旧音乐
|
void initOldMusic (MusicVerticalScrolViewLayout verticalScrolViewLayoutt)
|
{
|
foreach (Room room in Room.Lists) {
|
var musiceList = room.DeviceList.FindAll (tempDevice => { return tempDevice.Type == DeviceType.MusicModel; });
|
foreach (var tempDevice in musiceList) {
|
var frameLayout = new FrameLayout {
|
Y = Application.GetRealHeight (20) + verticalScrolViewLayout.ChildrenCount * Application.GetRealHeight (190 + 20),
|
X = Application.GetRealWidth (12),
|
Width = Application.GetRealWidth (640 - 24),
|
Height = Application.GetRealHeight (190),
|
BackgroundColor = 0xff181818,
|
Radius = (uint)Application.GetRealHeight (10),
|
Tag = tempDevice,
|
};
|
verticalScrolViewLayout.AddChidren (frameLayout);
|
|
var titelFrameLayout = new FrameLayout () {
|
Height = Application.GetRealHeight (80),
|
Y = Application.GetRealHeight (3),
|
};
|
frameLayout.AddChidren (titelFrameLayout);
|
|
var Living = new Button {
|
Width = Application.GetRealWidth (300),
|
Height = Application.GetRealHeight (80),
|
Text = tempDevice.Name,
|
TextAlignment = TextAlignment.CenterLeft,
|
X = Application.GetRealWidth (29),
|
Gravity = Gravity.CenterVertical,
|
};
|
titelFrameLayout.AddChidren (Living);
|
|
var btnPlayMusic = new Button {
|
Width = Application.GetRealWidth (80),
|
Height = Application.GetRealHeight (80),
|
X = Application.GetRealWidth (515),//510
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "MusicIcon/MusicPlay.png",
|
SelectedImagePath = "MusicIcon/MusicPlaySelected.png",
|
Tag = tempDevice,
|
};
|
titelFrameLayout.AddChidren (btnPlayMusic);
|
btnPlayMusic.MouseUpEventHandler += (sender, e) => {
|
Button button = (Button)sender;
|
if (button.IsSelected) {
|
button.IsSelected = false;
|
} else {
|
button.IsSelected = true;
|
}
|
MusicModel musicModel = (MusicModel)button.Tag;
|
Control.ControlBytesSend (Command.ControlMusicModel, musicModel.SubnetID, musicModel.DeviceID, MusicModel.MusiceBytes ("*S" + musicModel.SourceID + "PLAYSTOP"));
|
};
|
|
var image = new Button {
|
Width = Application.GetRealWidth (80),
|
Height = Application.GetRealHeight (80),
|
X = Application.GetRealWidth (30),
|
UnSelectedImagePath = "MusicIcon/musicplay1.png",
|
Y = Application.GetRealHeight (220 - 130),
|
Tag = tempDevice,
|
};
|
frameLayout.AddChidren (image);
|
|
EventHandler<MouseEventArgs> playPageEvent = (sender, e) => {
|
Room.CurrentRoom = room;
|
Button button = image;
|
if (((MusicModel)button.Tag).SourceID == "5") {
|
RadioPage radioPage = new RadioPage ();
|
MainPage.MainFrameLayout.AddChidren (radioPage);
|
radioPage.Show ((MusicModel)button.Tag, MusicSourcePage);
|
} else {
|
PlayPage playMusic = new PlayPage ();
|
PalyMusicPage.AddChidren (playMusic);
|
playMusic.Show ((MusicModel)button.Tag, (button.Tag as MusicModel).SDCardSongList, MusicSourcePage);
|
}
|
};
|
|
image.MouseUpEventHandler += playPageEvent;
|
|
var currentMusicBtn = new TextView {
|
Width = Application.GetRealWidth (300),
|
Height = Application.GetRealHeight (50),
|
X = Application.GetRealWidth (145),
|
Y = Application.GetRealHeight (210 - 130),
|
Text = "UnKown",
|
Tag = tempDevice,
|
};
|
frameLayout.AddChidren (currentMusicBtn);
|
currentMusicBtn.MouseUpEventHandler += playPageEvent;
|
|
var voice = new Button {
|
Width = Application.GetRealWidth (33),
|
Height = Application.GetRealHeight (31),
|
X = Application.GetRealWidth (145),
|
Y = Application.GetRealHeight (275 - 130),
|
UnSelectedImagePath = "MusicIcon/MusicVoice.png",
|
};
|
frameLayout.AddChidren (voice);
|
|
var horizontalSeekBarvol = new HorizontalSeekBar {
|
Width = Application.GetRealWidth (340),
|
Height = Application.GetRealHeight (50),
|
Radius = (uint)Application.GetRealHeight (25),
|
Y = Application.GetRealHeight (275 - 140),
|
X = Application.GetRealWidth (200),
|
Max = tempDevice.GetType () == typeof (MusicModel) ? 79 : 100,
|
Tag = tempDevice,
|
ProgressColor = 0xffFE5E00,
|
ThumbRadius = 9,
|
};
|
frameLayout.AddChidren (horizontalSeekBarvol);
|
horizontalSeekBarvol.ProgressChanged += (sender, e) => {
|
var seekBar = (HorizontalSeekBar)sender;
|
MusicModel musicModel = (MusicModel)(sender as HorizontalSeekBar).Tag;
|
Control.ControlBytesSend (Command.ControlMusicModel, musicModel.SubnetID, musicModel.DeviceID,
|
MusicModel.MusiceBytes ("*Z1VOL" + (79 - seekBar.Progress)));
|
};
|
|
if (tempDevice.Type == DeviceType.MusicModel) {
|
var music = tempDevice as MusicModel;
|
System.Threading.Tasks.Task.Run (() => {
|
System.Threading.Thread.CurrentThread.Name = "Old";
|
threadLists.Add (System.Threading.Thread.CurrentThread);
|
var dateTime = DateTime.Now.AddSeconds (-5);
|
while (true) {
|
if (5 <= (DateTime.Now - dateTime).TotalSeconds) {
|
dateTime = DateTime.Now;
|
Control.ControlBytesSend (Command.ControlMusicModel, music.SubnetID, music.DeviceID, MusicModel.MusiceBytes ("*Z1STATUS?"), SendCount.Zero);
|
}
|
Application.RunOnMainThread (() => {
|
try {
|
if (music.PlayStatus == MusicModel.Status.Play) {
|
btnPlayMusic.IsSelected = true;
|
} else {
|
btnPlayMusic.IsSelected = false;
|
}
|
|
//当前的音乐名称
|
currentMusicBtn.Text = music.curPlayMusicName.Replace (".mp3", "") == string.Empty ? "UnKown" : music.curPlayMusicName.Replace (".mp3", "");
|
|
horizontalSeekBarvol.Progress = 79 - int.Parse (music.CurVol);
|
|
if (verticalScrolViewLayout.ChildrenCount == 1) {
|
allVol.Progress = 79 - int.Parse (music.CurVol);
|
}
|
} catch { }
|
});
|
//等待1秒
|
System.Threading.Thread.Sleep (500);
|
}
|
});
|
}
|
|
if (verticalScrolViewLayout.ChildrenCount == 1) {
|
playPageEvent (currentMusicBtn, new MouseEventArgs ());
|
}
|
}
|
}
|
}
|
|
//搜索A31音乐播放器
|
void seach (Action<A31MusicModel> action, int time = 2000, string uid = "AllUniqueDeviceName")
|
{
|
System.Threading.Tasks.Task.Run (() => {
|
var socket = new System.Net.Sockets.Socket (System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
|
for (int i = 10000; i < 65535; i++) {
|
try {
|
//绑定本地端口
|
socket.Bind (new System.Net.IPEndPoint (System.Net.IPAddress.Any, i));//57404
|
break;
|
} catch { }
|
}
|
System.Threading.Tasks.Task.Run (() => {
|
var tempDateTime = DateTime.Now;
|
while ((DateTime.Now - tempDateTime).TotalMilliseconds < time && socket != null) {
|
try {
|
StringBuilder 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 ();
|
stringBuilder.AppendLine ();
|
|
//请求获取A31服务器信息
|
socket.SendTo (System.Text.Encoding.ASCII.GetBytes (stringBuilder.ToString ()), System.Net.Sockets.SocketFlags.None, new System.Net.IPEndPoint (System.Net.IPAddress.Parse ("239.255.255.250"), 1900));
|
|
stringBuilder.Clear ();
|
stringBuilder.AppendLine ("M-SEARCH * HTTP/1.1");
|
stringBuilder.AppendLine ("St: urn:schemas-upnp-org:device:MediaServer:1");
|
stringBuilder.AppendLine ("Mx: 3");
|
stringBuilder.AppendLine ("Host: 239.255.255.250:1900");
|
stringBuilder.AppendLine ("Man: \"ssdp:discover\"");
|
stringBuilder.AppendLine ();
|
stringBuilder.AppendLine ();
|
|
//请求获取A31服务器信息
|
socket.SendTo (System.Text.Encoding.ASCII.GetBytes (stringBuilder.ToString ()), System.Net.Sockets.SocketFlags.None, new System.Net.IPEndPoint (System.Net.IPAddress.Parse ("239.255.255.250"), 1900));
|
//如果1000毫秒没有数据回复,就关闭当前Socket,不再等待接收数据
|
System.Threading.Thread.Sleep (300);
|
} catch { }
|
}
|
|
try {
|
if (socket != null) {
|
socket.Close ();
|
socket = null;
|
}
|
} catch { }
|
|
if (action != null) {
|
System.Console.WriteLine ("查找完成");
|
//表示完成了
|
action (null);
|
}
|
});
|
while (socket != null) {
|
try {
|
//接收回来的数据
|
var receviceBytes = new byte [1024];
|
System.Net.EndPoint remoteIpEndPoint = new System.Net.IPEndPoint (0, 0);
|
//开始在这里等待接收数据,
|
var len = socket.ReceiveFrom (receviceBytes, ref remoteIpEndPoint);
|
var ms = new System.IO.MemoryStream (receviceBytes, 0, len);
|
|
var sr = new System.IO.StreamReader (ms);
|
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 ();
|
ms.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 (socket != null) {
|
socket.Close ();
|
socket = null;
|
}
|
}
|
}
|
} catch { }
|
}
|
});
|
}
|
//加载界面
|
void addViews (FrameLayout controlBodyView, FrameLayout bordorView, A31MusicModel a31player)
|
{
|
var a31frameLayout = new FrameLayout {
|
Y = Application.GetRealHeight (20) + verticalScrolViewLayout.ChildrenCount * Application.GetRealHeight (190 + 20),
|
X = Application.GetRealWidth (12),
|
Width = Application.GetRealWidth (640 - 24),
|
Height = Application.GetRealHeight (190),
|
BackgroundColor = 0xff181818,
|
Radius = (uint)Application.GetRealHeight (10),
|
Tag = a31player,
|
};
|
verticalScrolViewLayout.AddChidren (a31frameLayout);
|
|
var a31titelFrameLayout = new FrameLayout {
|
Height = Application.GetRealHeight (80),
|
Y = Application.GetRealHeight (3),
|
};
|
a31frameLayout.AddChidren (a31titelFrameLayout);
|
|
var a31palyername = new Button {
|
Width = Application.GetRealWidth (350),
|
Height = Application.GetRealHeight (80),
|
Text = a31player.Name,
|
TextAlignment = TextAlignment.CenterLeft,
|
X = Application.GetRealWidth (29),
|
Gravity = Gravity.CenterVertical,
|
Tag=a31player,
|
};
|
a31titelFrameLayout.AddChidren (a31palyername);
|
|
var colorBtn = new Button {
|
Height = LayoutParams.MatchParent,
|
Width = Application.GetRealWidth (5),
|
BackgroundColor = 0xffFE5E00,
|
Radius = (uint)Application.GetRealHeight (10),
|
Visible = false
|
};
|
a31frameLayout.AddChidren (colorBtn);
|
|
var serverOrClientBtn = new Button {
|
Width = Application.GetRealWidth (80),
|
Height = Application.GetRealHeight (80),
|
X = Application.GetRealWidth (410),
|
Gravity = Gravity.CenterVertical,
|
Visible = false
|
};
|
serverOrClientBtn.MouseUpEventHandler += (sender, e) => {
|
clearA31Threads ();
|
if (a31player.ServerClientType == 1) {
|
var alert = new Alert (Language.StringByID (MyInternationalizationString.prompt), Language.StringByID (MyInternationalizationString.DissolvedGroup),
|
Language.StringByID (MyInternationalizationString.cancel), Language.StringByID (MyInternationalizationString.confirm));
|
alert.ResultEventHandler += (sender1, e1) => {
|
if (e1) {
|
System.Threading.Tasks.Task.Run (() => {
|
openWeb ("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:Ungroup");
|
seach ((obj) => {
|
Application.RunOnMainThread (() => {
|
MusicSourcePage.RemoveFromParent ();
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
bordorView.RemoveViewByType (typeof (PlayerPage));
|
|
|
PlayerPage music = new PlayerPage ();
|
bordorView.AddChidren (music);
|
music.Show (controlBodyView, bordorView, true);
|
});
|
}, 8000, a31player.UniqueDeviceName);
|
});
|
} else { }
|
};
|
alert.Show ();
|
} else if (a31player.ServerClientType == -1) {
|
var alert = new Alert (Language.StringByID (MyInternationalizationString.prompt), Language.StringByID (MyInternationalizationString.Dissolve),
|
Language.StringByID (MyInternationalizationString.cancel), Language.StringByID (MyInternationalizationString.confirm));
|
alert.ResultEventHandler += (sender1, e1) => {
|
if (e1) {
|
System.Threading.Tasks.Task.Run (() => {
|
openWeb ("http://" + a31player.ServerIP + "/httpapi.asp?command=multiroom:SlaveKickout:" + a31player.IPAddress);
|
seach ((obj) => {
|
Application.RunOnMainThread (() => {
|
|
MusicSourcePage.RemoveFromParent ();
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
bordorView.RemoveViewByType (typeof (PlayerPage));
|
|
|
PlayerPage music = new PlayerPage ();
|
bordorView.AddChidren (music);
|
music.Show (controlBodyView, bordorView, true);
|
});
|
}, 5000, a31player.UniqueDeviceName);
|
});
|
} else { }
|
};
|
alert.Show ();
|
}
|
};
|
|
var a31btnPlayMusic = new Button {
|
Width = Application.GetMinRealAverage (80),
|
Height = Application.GetMinRealAverage (80),
|
X = Application.GetRealWidth (518),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "MusicIcon/MusicPlay.png",
|
SelectedImagePath = "MusicIcon/MusicPlaySelected.png",
|
};
|
a31titelFrameLayout.AddChidren (a31btnPlayMusic);
|
a31btnPlayMusic.MouseUpEventHandler += (sender1, e1) => {
|
if (a31btnPlayMusic.IsSelected) {
|
a31btnPlayMusic.IsSelected = false;
|
//sendCommand (a31player, "pause");
|
a31player.Pause ();
|
a31player.A31PlayStatus.status = "pause";
|
} else {
|
a31btnPlayMusic.IsSelected = true;
|
//sendCommand (a31player, "resume");
|
a31player.Play ();
|
a31player.A31PlayStatus.status = "play";
|
}
|
};
|
|
var a31image = new ImageView {
|
Width = Application.GetRealWidth (80),
|
Height = Application.GetRealHeight (80),
|
X = Application.GetRealWidth (30),
|
Y = Application.GetRealHeight (220 - 130),
|
Radius = (uint)Application.GetRealHeight (8),
|
ImagePath = "MusicIcon/musicplay1.png",
|
};
|
a31frameLayout.AddChidren (a31image);
|
a31image.MouseLongEventHandler += (sender, e) => {
|
var alert = new Alert (Language.StringByID (MyInternationalizationString.prompt), Language.StringByID (MyInternationalizationString.Deletemusicplayer),
|
Language.StringByID (MyInternationalizationString.cancel), Language.StringByID (MyInternationalizationString.confirm));
|
alert.ResultEventHandler += (sender1, e1) => {
|
if (e1) {
|
A31MusicModel.A31MusicModelList.Remove (a31player);
|
a31frameLayout.RemoveFromParent ();
|
A31MusicModel.Save ();
|
|
MusicSourcePage.RemoveFromParent ();
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
bordorView.RemoveViewByType (typeof (PlayerPage));
|
PlayerPage mymusic = new PlayerPage ();
|
bordorView.AddChidren (mymusic);
|
mymusic.Show (controlBodyView, bordorView, true);
|
} else { }
|
};
|
alert.Show ();
|
};
|
|
var a31currentMusic = new Button {
|
Width = Application.GetRealWidth (350),
|
Height = Application.GetRealHeight (50),
|
X = Application.GetRealWidth (135),
|
Y = Application.GetRealHeight (190 - 130),
|
TextSize = 12,
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = "UnKown",
|
};
|
a31frameLayout.AddChidren (a31currentMusic);
|
|
var a31currentartist = new Button {
|
Height = Application.GetRealHeight (50),
|
X = Application.GetRealWidth (135),
|
Y = Application.GetRealHeight (225 - 130),
|
TextSize = 12,
|
TextColor = 0x80ffffff,
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = "UnKown",
|
};
|
a31frameLayout.AddChidren (a31currentartist);
|
|
EventHandler<MouseEventArgs> sharing = (sender, e) => {
|
if (-1 == a31player.ServerClientType) {
|
return;
|
}
|
for (int i = 0; i < verticalScrolViewLayout.ChildrenCount; i++) {
|
var fra = (FrameLayout)verticalScrolViewLayout.GetChildren (i);
|
if (fra.Tag == a31frameLayout.Tag) {
|
fra.BackgroundColor = 0xff525252;
|
} else {
|
fra.BackgroundColor = 0xff181818;
|
}
|
}
|
|
A31MusicModel.Current = a31player;
|
PalyMusicPage.RemoveViewByType (typeof (A31PlayMusicPage));
|
MusicSourcePage.RemoveViewByType (typeof (A31MusicSourcePage));
|
A31PlayMusicPage a31playMusic = new A31PlayMusicPage ();
|
PalyMusicPage.AddChidren (a31playMusic);
|
a31playMusic.Show (MusicInfo.MusicInfoList, MusicSourcePage, PalyMusicPage, bordorView);
|
};
|
a31palyername.MouseUpEventHandler += sharing;
|
a31image.MouseUpEventHandler += sharing;
|
a31currentMusic.MouseUpEventHandler += sharing;
|
a31currentartist.MouseUpEventHandler += sharing;
|
|
var a31voice = new Button {
|
Width = Application.GetRealWidth (33),
|
Height = Application.GetRealHeight (31),
|
X = Application.GetRealWidth (135),
|
Y = Application.GetRealHeight (275 - 130),
|
UnSelectedImagePath = "MusicIcon/MusicVoice.png",
|
};
|
a31frameLayout.AddChidren (a31voice);
|
|
var a31horizontalSeekBarvol = new HorizontalSeekBar {
|
Width = Application.GetRealWidth (380),
|
Height = Application.GetRealHeight (50),
|
Radius = (uint)Application.GetRealHeight (25),
|
Y = Application.GetRealHeight (275 - 140),
|
X = Application.GetRealWidth (190),
|
SleepTime = 1000,
|
ProgressColor = 0xffFE5E00,
|
ThumbRadius = 9,
|
Max = 100,
|
};
|
a31frameLayout.AddChidren (a31horizontalSeekBarvol);
|
|
a31horizontalSeekBarvol.ProgressChanged += (sender1, e1) => {
|
a31player.ControlVolume (a31horizontalSeekBarvol.Progress);
|
a31player.A31PlayStatus.vol = a31horizontalSeekBarvol.Progress.ToString ();
|
};
|
|
a31titelFrameLayout.AddChidren (serverOrClientBtn);
|
|
if (verticalScrolViewLayout.ChildrenCount == 1) {
|
sharing (a31currentMusic, new MouseEventArgs ());
|
}
|
|
refreshUI (a31image, a31player, a31horizontalSeekBarvol, a31btnPlayMusic, a31palyername, a31currentMusic, a31currentartist, serverOrClientBtn, a31frameLayout, colorBtn);
|
System.Threading.Tasks.Task.Run (() => {
|
System.Threading.Thread.CurrentThread.Name = "A31";
|
threadLists.Add (System.Threading.Thread.CurrentThread);
|
string album = null, artist = null;
|
while (true) {
|
System.Threading.Thread.Sleep (1000);
|
if (!a31player.IsOnLine) {
|
continue;
|
}
|
readStatus (a31player, a31image);
|
Application.RunOnMainThread (() => {
|
#region 刷新歌手图片
|
if (a31player.A31PlayStatus.Album != album || a31player.A31PlayStatus.Artist != artist) {
|
album = a31player.A31PlayStatus.Album;
|
artist = a31player.A31PlayStatus.Artist;
|
var path = "";
|
if (Shared.Application.IsPad) {
|
path = "Pad/" + "MusicImage/AlbumArtistImage_";
|
} else {
|
path = "Phone/" + "MusicImage/AlbumArtistImage_";
|
}
|
if (Shared.IO.FileUtils.Exists (path + a31player.A31PlayStatus.Album)) {
|
a31image.ImagePath = path + a31player.A31PlayStatus.Album;
|
} else if (Shared.IO.FileUtils.Exists (path + a31player.A31PlayStatus.Artist)) {
|
a31image.ImagePath = path + a31player.A31PlayStatus.Artist;
|
} else {
|
a31image.ImagePath = "MusicIcon/musicplay1.png";
|
System.Threading.Tasks.Task.Run (() => {
|
var filePath = Shared.IO.FileUtils.DownLoadImageFormBaidu (album, artist);
|
if (filePath != null) {
|
Application.RunOnMainThread (() => {
|
a31image.ImagePath = filePath;
|
});
|
}
|
});
|
}
|
}
|
#endregion
|
refreshUI (a31image, a31player, a31horizontalSeekBarvol, a31btnPlayMusic, a31palyername, a31currentMusic, a31currentartist, serverOrClientBtn, a31frameLayout, colorBtn);
|
});
|
}
|
});
|
}
|
|
/// <summary>
|
/// 读取主从关系
|
/// </summary>
|
void readServerOrClientMode (bool readType)
|
{
|
foreach (var a31player in A31MusicModel.A31MusicModelList) {
|
if (!a31player.IsOnLine) {
|
continue;
|
}
|
try {
|
if (readType) {
|
readMusicType (a31player);
|
}
|
a31player.ServerClientType = 0;
|
var result = openWeb ("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
|
if (result == null) {
|
result = openWeb ("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
|
}
|
if (result != null) {
|
a31player.Slave = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves> (result);
|
}
|
} catch { }
|
}
|
|
//分析主从关系
|
foreach (var a31player in A31MusicModel.A31MusicModelList) {
|
if (!a31player.IsOnLine) {
|
continue;
|
}
|
try {
|
if ("0" != a31player.Slave.slaves) {
|
a31player.ServerClientType = 1;//主的
|
foreach (var slave in a31player.Slave.slave_list) {
|
var tempA31Player = A31MusicModel.A31MusicModelList.Find ((obj) => { return slave.uuid.EndsWith (obj.UniqueDeviceName); });
|
if (tempA31Player == null) {
|
A31MusicModel.A31MusicModelList.Add (new A31MusicModel {
|
ServerClientType = -1,
|
IPAddress = slave.ip,
|
ServerIP = a31player.IPAddress,
|
Name = slave.name,
|
});
|
}
|
//如果找到就更新为从的
|
else {
|
tempA31Player.ServerClientType = -1;//从的
|
tempA31Player.IPAddress = slave.ip;
|
tempA31Player.ServerIP = a31player.IPAddress;
|
tempA31Player.IsCanShow = true;
|
}
|
}
|
}
|
} catch { }
|
}
|
}
|
|
/// <summary>
|
/// 刷新当前音乐的界面
|
/// </summary>
|
/// <param name="a31image">A31image.</param>
|
/// <param name="a31player">A31player.</param>
|
/// <param name="a31horizontalSeekBarvol">A31horizontal seek barvol.</param>
|
/// <param name="a31btnPlayMusic">A31btn play music.</param>
|
/// <param name="a31palyername">A31palyername.</param>
|
/// <param name="a31currentMusic">A31current music.</param>
|
/// <param name="a31currentartist">A31currentartist.</param>
|
void refreshUI (ImageView a31image, A31MusicModel a31player, HorizontalSeekBar a31horizontalSeekBarvol, Button a31btnPlayMusic, Button a31palyername, Button a31currentMusic, Button a31currentartist, Button serverOrClientBtn, FrameLayout a31frameLayout, Button colorBtn)
|
{
|
try {
|
if (a31player.A31PlayStatus.IsMute) {
|
a31horizontalSeekBarvol.Progress = 0;
|
} else {
|
a31horizontalSeekBarvol.Progress = int.Parse (a31player.A31PlayStatus.vol);
|
}
|
a31btnPlayMusic.IsSelected = a31player.A31PlayStatus.status == "play";
|
a31palyername.Text = a31player.Name;
|
a31currentMusic.Text = a31player.A31PlayStatus.Title;
|
a31currentartist.Text = a31player.A31PlayStatus.Artist;
|
{
|
a31btnPlayMusic.Alpha = 1.0f;
|
a31btnPlayMusic.Enable = true;
|
a31image.Alpha = 1.0f;
|
a31palyername.Enable = true;
|
a31currentMusic.Alpha = 1.0f;
|
a31currentMusic.Enable = true;
|
}
|
if (1 == a31player.ServerClientType) {
|
colorBtn.Visible = false;
|
serverOrClientBtn.Visible = true;
|
serverOrClientBtn.UnSelectedImagePath = "MusicIcon/lifeSelected.png";
|
} else if (-1 == a31player.ServerClientType) {
|
colorBtn.Visible = true;
|
serverOrClientBtn.Visible = true;
|
serverOrClientBtn.UnSelectedImagePath = "MusicIcon/life.png";
|
a31btnPlayMusic.Alpha = 0.5f;
|
a31btnPlayMusic.Enable = false;
|
a31image.Alpha = 0.5f;
|
a31palyername.Enable = false;
|
a31currentMusic.Alpha = 0.5f;
|
a31currentMusic.Enable = false;
|
}
|
} catch { }
|
}
|
|
//刷新播放器设备列表
|
void refreshDevice (FrameLayout controlBodyView, FrameLayout bordorView, MusicVerticalScrolViewLayout verticalScrolViewLayout)
|
{
|
clearA31Threads ();
|
foreach (var a31player in A31MusicModel.A31MusicModelList) {
|
a31player.IsCanShow = false;
|
a31player.IsOnLine = false;
|
}
|
MainPage.Loading.Start ();
|
seach ((obj) => {
|
if (obj == null) {
|
readServerOrClientMode (true);
|
A31MusicModel.Save ();
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
foreach (var a31player in A31MusicModel.A31MusicModelList) {
|
//这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
|
if (!a31player.IsCanShow) {
|
continue;
|
}
|
addViews (controlBodyView, bordorView, a31player);
|
}
|
});
|
return;
|
}
|
//System.Console.WriteLine (obj.UniqueDeviceName);
|
var a31MusicModel = A31MusicModel.A31MusicModelList.Find ((music) => { return music.UniqueDeviceName == obj.UniqueDeviceName; });
|
|
if (a31MusicModel == null) {
|
//不是我们支持的品牌不支持
|
if (obj.Name != null) {
|
A31MusicModel.A31MusicModelList.Add (obj);
|
}
|
} else {
|
a31MusicModel.IPAddress = obj.IPAddress;
|
a31MusicModel.Port = obj.Port;
|
a31MusicModel.Name = obj.Name;
|
a31MusicModel.IsCanShow = true;
|
a31MusicModel.IsOnLine = true;
|
}
|
});
|
}
|
|
//标记播放器类型是否有蓝牙功能。
|
void readMusicType (A31MusicModel a31player)
|
{
|
int tempDeviceType = 0;
|
Action<byte, byte, int, Command, byte, byte, byte [], System.Net.IPEndPoint> action = (subnetID, deviceId, deviceType, command, targetSubnetID, targetDeviceID, usefullBytes, ipEndPoint) => {
|
if (command == Command.ReadRemarkACK && ipEndPoint.Address.ToString () == a31player.IPAddress.ToString ()) {
|
tempDeviceType = deviceType;
|
}
|
};
|
Packet.ReceviceAllDadaAction += action;
|
|
DateTime dateTime = DateTime.Now;
|
while ((DateTime.Now - dateTime).TotalMilliseconds <= 1000) {
|
Control.ControlBytesSend (Command.ReadRemark, 255, 255, new byte [] { (byte)new Random ().Next (0, 255), (byte)new Random ().Next (0, 255) }, SendCount.One, new System.Net.IPEndPoint (System.Net.IPAddress.Parse (a31player.IPAddress), 6000));
|
System.Threading.Thread.Sleep (200);
|
if (tempDeviceType != 0) {
|
a31player.A31DeviceType = tempDeviceType;
|
break;
|
}
|
}
|
|
Packet.ReceviceAllDadaAction -= action;
|
}
|
|
/// <summary>
|
/// 更新A31播放器的状态
|
/// </summary>
|
/// <param name="a31MusicModel"></param>
|
void readStatus (A31MusicModel a31MusicModel, ImageView imageView)
|
{
|
System.IO.StringReader sr = null;
|
try {
|
if (a31MusicModel.ServerClientType == -1) {
|
var result = openWeb ("http://" + a31MusicModel.ServerIP + "/httpapi.asp?command=multiroom:getSlaveList");
|
if (result != null) {
|
var slaves = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves> (result);
|
var slave = slaves.slave_list.Find ((obj) => { return obj.uuid.EndsWith (a31MusicModel.UniqueDeviceName); });
|
a31MusicModel.A31PlayStatus.vol = slave.volume;
|
}
|
return;
|
}
|
|
Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient (1000);
|
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");
|
// System.Console.WriteLine (se);
|
|
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 artist = a31MusicModel.A31PlayStatus.Artist;
|
var album = a31MusicModel.A31PlayStatus.Album;
|
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");
|
|
} catch { } finally {
|
if (sr != null) {
|
sr.Close ();
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取A31的名称
|
/// </summary>
|
/// <param name="ip"></param>
|
/// <param name="port"></param>
|
/// <returns></returns>
|
string getDeviceName (string ip, int port)
|
{
|
string deviceName = null;
|
System.IO.StreamReader sr = null;
|
Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient ();
|
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 { } finally {
|
if (sr != null) {
|
sr.Close ();
|
}
|
}
|
return deviceName;
|
}
|
|
/// <summary>
|
/// 1秒更新一次
|
/// </summary>
|
public static System.DateTime dateTime = System.DateTime.Now.AddSeconds (-1);
|
|
void sendCommand (A31MusicModel a31, string cmd)
|
{
|
System.Threading.Tasks.Task.Run (() => {
|
Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient ();
|
try {
|
byte [] recevieBytes1 = webClient.DownloadData (new Uri ("http://" + a31.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + cmd));
|
} catch { }
|
});
|
}
|
|
private void allVol_ProgressChanged (object sender, int e)
|
{
|
for (int index = 0; index < verticalScrolViewLayout.ChildrenCount; index++) {
|
object tag = verticalScrolViewLayout.GetChildren (index).Tag;
|
if (tag == null) {
|
continue;
|
}
|
if (tag.GetType () == typeof (A31MusicModel)) {
|
var a31MusicModel = tag as A31MusicModel;
|
a31MusicModel.A31PlayStatus.vol = e.ToString ();
|
a31MusicModel.ControlVolume (int.Parse (a31MusicModel.A31PlayStatus.vol));
|
} else if (tag.GetType () == typeof (MusicModel)) {
|
var musicModel = tag as MusicModel;
|
musicModel.CurVol = (79 - e).ToString ();
|
Control.ControlBytesSend (Command.ControlMusicModel, musicModel.SubnetID, musicModel.DeviceID, MusicModel.MusiceBytes ("*Z1VOL" + musicModel.CurVol));
|
}
|
}
|
}
|
|
string beforeVol = "30";
|
private void MuteVol_MouseDownEventHandler (object sender, MouseEventArgs e)
|
{
|
muteVol.IsSelected = !muteVol.IsSelected;
|
if (muteVol.IsSelected) {
|
//静音之前先保存之前的音量
|
beforeVol = allVol.Progress.ToString ();
|
allVol.Progress = 0;
|
//muteVol.IsSelected = true;
|
} else {
|
allVol.Progress = int.Parse (beforeVol);
|
//muteVol.IsSelected = false;
|
}
|
|
for (int index = 0; index < verticalScrolViewLayout.ChildrenCount; index++) {
|
object tag = verticalScrolViewLayout.GetChildren (index).Tag;
|
if (tag == null) {
|
continue;
|
}
|
if (tag.GetType () == typeof (A31MusicModel)) {
|
var a31MusicModel = tag as A31MusicModel;
|
a31MusicModel.A31PlayStatus.vol = allVol.Progress.ToString ();
|
a31MusicModel.ControlVolume (int.Parse (a31MusicModel.A31PlayStatus.vol));
|
} else if (tag.GetType () == typeof (MusicModel)) {
|
var musicModel = tag as MusicModel;
|
musicModel.CurVol = (79 - allVol.Progress).ToString ();
|
Control.ControlBytesSend (Command.ControlMusicModel, musicModel.SubnetID, musicModel.DeviceID, MusicModel.MusiceBytes ("*Z1VOL" + musicModel.CurVol));
|
}
|
}
|
}
|
|
private void back_MouseDownEventHandler (object sender, MouseEventArgs e)
|
{
|
RemoveFromParent ();
|
}
|
|
class a31wifimessage
|
{
|
static a31wifimessage ()
|
{
|
new a31wifimessage ();
|
}
|
public a31wifimessage ()
|
{
|
res = null;
|
aplist = null;
|
}
|
public string res;
|
public List<a31message> aplist;
|
}
|
|
class a31message
|
{
|
static a31message ()
|
{
|
new a31message ();
|
}
|
public a31message ()
|
{
|
ssid = null;
|
channel = null;
|
auth = null;
|
encry = null;
|
extch = null;
|
}
|
public string ssid;
|
public string channel;
|
public string auth;
|
public string encry;
|
public string extch;
|
|
}
|
|
class a31wifi
|
{
|
static a31wifi ()
|
{
|
new a31wifi ();
|
}
|
public a31wifi ()
|
{
|
ssid = null;
|
}
|
public string ssid;
|
}
|
|
}
|
}
|