using System;
|
using System.Collections.Generic;
|
using Shared;
|
using Shared.IO;
|
using System.Net;
|
namespace HDL_ON.UI.Music
|
{
|
public class MusicMain : FrameLayout
|
{
|
|
//FrameLayout Frame = null;
|
//public MusicListViewMain() {
|
// Frame = this;
|
//}
|
public MusicMain()
|
{
|
Tag = "MusicMain";
|
}
|
//public override void RemoveFromParent()
|
//{
|
// base.RemoveFromParent();
|
// clearA31Threads();
|
//}
|
|
//static void clearA31Threads()
|
//{
|
// var threads = threadLists.FindAll((obj) => { return obj.Name == "A31"; });
|
// foreach (var thread in threads)
|
// {
|
// try
|
// {
|
// threadLists.Remove(thread);
|
// if (thread.IsAlive)
|
// {
|
// thread.Abort();
|
// }
|
// }
|
// catch (Exception e)
|
// {
|
// MainPage.Log("clearA31Threads error : " +e.Message);
|
// }
|
// }
|
//}
|
|
|
/// <summary>
|
/// 显示加载界面
|
/// </summary>
|
public static Loading loading = new Loading();
|
VerticalRefreshLayout verticalRefresh;
|
|
public void Show()
|
{
|
#region 界面布局
|
this.BackgroundColor = Color.ViewColor;
|
var topView = new TopView();
|
this.AddChidren(topView.TopFLayoutView());
|
topView.topNameBtn.TextID =StringId.a31Music;
|
topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
RemoveFromParent();
|
};
|
|
verticalRefresh = new VerticalRefreshLayout
|
{
|
Y = topView.fLayout.Bottom,
|
Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
|
};
|
this.AddChidren(verticalRefresh);
|
#endregion
|
|
verticalRefresh.BeginHeaderRefreshingAction += () =>
|
{
|
SeachMusic(false);
|
|
};
|
this.AddChidren(loading);
|
|
if (A31MusicModel.A31MusicModelList.Count == 0)
|
{
|
SeachMusic(true);
|
}
|
else
|
{
|
//clearA31Threads();
|
//verticalRefresh.RemoveAll();
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
///这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
|
if (!a31player.IsCanShow)
|
{
|
continue;
|
}
|
if (A31MusicModel.A31MusicModelList.Count - 1 == i)
|
{
|
a31player.IsEnd = true;
|
}
|
else
|
{
|
a31player.IsEnd = false;
|
}
|
///加载界面时默认不在线
|
///这里标记是为了不读取不在线播放器状态
|
a31player.IsOnLine = false;
|
MusicListView(a31player);
|
}
|
///读取正确的信息,包括IP和端口及名称
|
SendMethod.Seach((obj) =>
|
{
|
try
|
{
|
if (obj == null)
|
{
|
///这里要读取主从关系
|
readServerOrClientMode();
|
A31MusicModel.Save();
|
return;
|
}
|
var a31MusicModel = A31MusicModel.A31MusicModelList.Find((music) => music.UniqueDeviceName == obj.UniqueDeviceName);
|
if (a31MusicModel != null)
|
{
|
a31MusicModel.IPAddress = obj.IPAddress;
|
a31MusicModel.Port = obj.Port;
|
a31MusicModel.Name = obj.Name;
|
a31MusicModel.IsCanShow = true;
|
a31MusicModel.IsOnLine = true;
|
}
|
}
|
catch (Exception e) { MainPage.Log(e.Message); }
|
});
|
}
|
}
|
|
void SeachMusic(bool Yes = false)
|
{
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
a31player.IsCanShow = false;
|
a31player.IsOnLine = false;
|
}
|
if (Yes)
|
{
|
//为了第一次进来log一下;
|
loading.Start();
|
}
|
SendMethod.Seach((obj) =>
|
{
|
if (obj == null)
|
{
|
readServerOrClientMode();
|
A31MusicModel.Save();
|
if (!Yes)
|
{
|
///等待跑完在关闭
|
verticalRefresh.EndHeaderRefreshing();
|
}
|
Application.RunOnMainThread(() =>
|
{
|
if (Yes)
|
{
|
//为了第一次进来log一下;
|
loading.Hide();
|
}
|
verticalRefresh.RemoveAll();
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
//这个状态是之前保存的,加载完成后要标记为不在线,后面再读取正确的状态
|
if (!a31player.IsCanShow)
|
{
|
continue;
|
}
|
if (A31MusicModel.A31MusicModelList.Count - 1 == i)
|
{
|
a31player.IsEnd = true;
|
}
|
else
|
{
|
a31player.IsEnd = false;
|
}
|
MusicListView(a31player);
|
A31MusicModel.ReadMusicStates();
|
}
|
});
|
return;
|
}
|
var a31MusicModel = A31MusicModel.A31MusicModelList.Find((music) => { return music.UniqueDeviceName == obj.UniqueDeviceName; });
|
if (a31MusicModel == null)
|
{
|
//不是我们支持的品牌不支持
|
if (obj.Name != null)
|
{
|
obj.sid = "00010112345678901234561A1A230123AABB" + obj.UniqueDeviceName;
|
A31MusicModel.A31MusicModelList.Add(obj);
|
}
|
}
|
else
|
{
|
a31MusicModel.IPAddress = obj.IPAddress;
|
a31MusicModel.Port = obj.Port;
|
a31MusicModel.Name = obj.Name;
|
a31MusicModel.IsCanShow = true;
|
a31MusicModel.IsOnLine = true;
|
}
|
});
|
|
}
|
/// <summary>
|
/// 显示音乐列表的方法
|
/// </summary>
|
void MusicListView(A31MusicModel a31player)
|
{
|
MusicView musicView = new MusicView();
|
musicView.View(verticalRefresh);
|
musicView.singerBtn.Text = a31player.A31PlayStatus.Artist;
|
musicView.songNameBtn.Text = a31player.A31PlayStatus.Title;
|
musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(a31player);
|
|
if (a31player.IsEnd)
|
{
|
musicView.muiscFl.Height = Application.GetRealHeight(12 + 139 + 12);
|
}
|
|
musicView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.collectIconBtn.IsSelected = !musicView.collectIconBtn.IsSelected;
|
if (a31player.ServerClientType == 1)
|
{
|
if (musicView.collectIconBtn.IsSelected)
|
{
|
a31player.MainPlayCollection = true;
|
}
|
else
|
{
|
a31player.MainPlayCollection = false;
|
}
|
}
|
else
|
{
|
if (musicView.collectIconBtn.IsSelected)
|
{
|
a31player.collection = true;
|
}
|
else
|
{
|
a31player.collection = false;
|
}
|
}
|
A31MusicModel.Save();
|
};
|
|
EventHandler<MouseEventArgs> clickMergence = (sender, e) =>
|
{
|
if (a31player.ServerClientType == 0)
|
{
|
new View.DialogView { }.PlayMergence();
|
}
|
else if (a31player.ServerClientType == 1)
|
{
|
new View.DialogView { }.DetachPlayMergence(a31player);
|
|
}
|
};
|
musicView.mergeBjBtn.MouseUpEventHandler += clickMergence;
|
musicView.mergeBtn.MouseUpEventHandler += clickMergence;
|
musicView.mergeIconBtn.MouseUpEventHandler += clickMergence;
|
|
EventHandler<MouseEventArgs> clickPlayView = (sender, e) =>
|
{
|
A31MusicModel.Current = a31player;//当前播放器
|
var a31PlayMusicPage = new A31PlayMusicPage();
|
MainPage.BasePageView.AddChidren(a31PlayMusicPage);
|
a31PlayMusicPage.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
musicView.musicIfonFl.MouseUpEventHandler += clickPlayView;
|
musicView.clickBtn.MouseUpEventHandler += clickPlayView;//
|
|
///上一曲点击事件
|
musicView.prevBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
musicView.prevBtn.IsSelected = true;
|
SendMethod.Previous(a31player);
|
};
|
musicView.prevBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.prevBtn.IsSelected = false;
|
};
|
///暂停/播放点击事件
|
musicView.playBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
if (musicView.playBtn.IsSelected)
|
{
|
musicView.playBtn.IsSelected = false;
|
SendMethod.Pause(a31player);
|
a31player.A31PlayStatus.status = "pause";
|
}
|
else
|
{
|
musicView.playBtn.IsSelected = true;
|
SendMethod.Play(a31player);
|
a31player.A31PlayStatus.status = "play";
|
}
|
};
|
///下一曲点击事件
|
musicView.nextBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
musicView.nextBtn.IsSelected = true;
|
SendMethod.Next(a31player);
|
};
|
musicView.nextBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.nextBtn.IsSelected = false;
|
};
|
|
var musicThread = new System.Threading.Thread(() =>
|
{
|
while (true)
|
{
|
System.Threading.Thread.Sleep(1000);
|
if (!a31player.IsOnLine)
|
{
|
continue;
|
}
|
//SendMethod.ReadStatus(a31player);
|
Application.RunOnMainThread(() =>
|
{
|
musicView.singerBtn.Text = a31player.A31PlayStatus.Artist;
|
musicView.songNameBtn.Text = a31player.A31PlayStatus.Title;
|
musicView.musicNameBtn.Text = new View.DialogView { }.NamePlayer(a31player);
|
if (a31player.A31PlayStatus.status == "play")
|
{
|
musicView.playBtn.IsSelected = true;
|
}
|
else
|
{
|
musicView.playBtn.IsSelected = false;
|
}
|
musicView.regionBtn.Text = a31player.GetRoomListName();
|
if (a31player.ServerClientType == 1)
|
{
|
if (a31player.MainPlayCollection)
|
{
|
musicView.collectIconBtn.IsSelected = true;
|
}
|
else
|
{
|
musicView.collectIconBtn.IsSelected = false;
|
}
|
}
|
else
|
{
|
if (a31player.collection)
|
{
|
musicView.collectIconBtn.IsSelected = true;
|
}
|
else
|
{
|
musicView.collectIconBtn.IsSelected = false;
|
}
|
}
|
});
|
}
|
})
|
{ IsBackground = true, Name = "A31" };
|
musicThread.Start();
|
//threadLists.Add(musicThread);
|
}
|
|
|
/// <summary>
|
/// 读取主从关系
|
/// </summary>
|
void readServerOrClientMode()
|
{
|
try
|
{
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
if (!a31player.IsOnLine)
|
{
|
continue;
|
}
|
try
|
{
|
a31player.ServerClientType = 0;
|
var result = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
|
if (result == null && result == "Failed")
|
{
|
result = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList");
|
}
|
if (result != null && result != "Failed")
|
{
|
a31player.Slave = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves>(result);
|
}
|
}
|
catch (Exception e)
|
{
|
var d = e.Message;
|
}
|
}
|
|
//分析主从关系
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
if (!a31player.IsOnLine)
|
{
|
continue;
|
}
|
try
|
{
|
if (a31player.Slave != null && "0" != a31player.Slave.slaves)
|
{
|
a31player.ServerClientType = 1;//主的
|
string str = a31player.Name;
|
for (int j = 0; j < a31player.Slave.slave_list.Count; j++)
|
{
|
|
var slave = a31player.Slave.slave_list[j];
|
str = str + "+" + slave.name;
|
var tempA31Player = A31MusicModel.A31MusicModelList.Find((obj) => slave.uuid.Replace("uuid:", "") == obj.UniqueDeviceName);
|
if (tempA31Player == null)
|
{
|
A31MusicModel.A31MusicModelList.Add(new A31MusicModel
|
{
|
sid = "00010112345678901234561A1A230123AABB" + slave.uuid.Replace("uuid:", ""),
|
ServerClientType = -1,//从的
|
IPAddress = slave.ip,
|
MainPlayIP = a31player.IPAddress,
|
UniqueDeviceName = slave.uuid.Replace("uuid:", ""),
|
Name = slave.name,
|
IsCanShow = false,
|
IsOnLine = false,//true作用为了读取从播放器的音量
|
});
|
}
|
//如果找到就更新为从的
|
else
|
{
|
tempA31Player.ServerClientType = -1;//从的
|
tempA31Player.IPAddress = slave.ip;
|
tempA31Player.MainPlayIP = a31player.IPAddress;
|
tempA31Player.Name = slave.name;
|
tempA31Player.UniqueDeviceName = slave.uuid.Replace("uuid:", "");
|
tempA31Player.IsCanShow = false;
|
tempA31Player.IsOnLine = false;//true作用为了读取从播放器的音量
|
|
}
|
}
|
a31player.MainPlayName = str;
|
}
|
}
|
catch (Exception e)
|
{
|
var ss = e.Message;
|
}
|
}
|
|
}
|
catch { }
|
}
|
|
}
|
|
}
|