using System;
using System.Collections.Generic;
using Shared;
using Shared.IO;
using System.Net;
namespace HDL_ON.UI.Music
{
public class MusicMain : FrameLayout
{
///
/// MusicMain对象构造函数
///
public MusicMain()
{
Tag = "MusicMain";
//进来音乐列表界面先移除之前线程;
A31MusicModel.RemoveListThread();
}
///
/// 重写RemoveFromParent方法
///
public override void RemoveFromParent()
{
base.RemoveFromParent();
clearA31Threads();
A31MusicModel.ReadMusicStates();//进来没有音乐被收藏过,退出有音乐被收藏过
}
///
/// 创建线程列表
///
static List threadLists = new List();
///
/// 移除线程
///
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);
}
}
}
///
/// 显示加载界面
///
public static Loading loading = new Loading();
///
/// 定义全局对象
///
VerticalRefreshLayout verticalRefresh;
public void Show()
{
#region 界面布局
this.BackgroundColor = MusicColor.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 = "030101123456780909020123AABB" + 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;
}
});
}
///
/// 显示音乐列表的方法
///
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.collect = true;
}
else
{
a31player.collect = false;
}
}
A31MusicModel.Save();
};
EventHandler clickMergence = (sender, e) =>
{
if (a31player.ServerClientType == 0)
{
new View.DialogView { }.PlayMergence(a31player);
}
else if (a31player.ServerClientType == 1)
{
new View.DialogView { }.DetachPlayMergence(a31player);
}
};
musicView.mergeBjBtn.MouseUpEventHandler += clickMergence;
musicView.mergeBtn.MouseUpEventHandler += clickMergence;
musicView.mergeIconBtn.MouseUpEventHandler += clickMergence;
EventHandler 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.singerBtn.MouseUpEventHandler += clickPlayView;
musicView.songNameBtn.MouseUpEventHandler += clickPlayView;//
musicView.musicNameBtn.MouseUpEventHandler += clickPlayView;
musicView.regionBtn.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.collect)
{
musicView.collectIconBtn.IsSelected = true;
}
else
{
musicView.collectIconBtn.IsSelected = false;
}
}
});
}
})
{ IsBackground = true, Name = "A31" };
musicThread.Start();
threadLists.Add(musicThread);
}
///
/// 读取主从关系
///
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(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 = "030101123456780909020123AABB" + 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 { }
}
}
}