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 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) { System.Console.WriteLine(e.Message); } } } /// /// 显示加载界面 /// 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) { System.Console.WriteLine(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); } }); return; } 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 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); musicView.regionBtn.TextID = StringId.region; if (a31player.IsEnd) { musicView.muiscFl.Height = Application.GetRealHeight(12 + 139 + 12); } EventHandler 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; musicView.clickBtn.MouseUpEventHandler += (sender, e) => { A31MusicModel.Current = a31player;//当前播放器 var a31PlayMusicPage = new A31PlayMusicPage(); MainPage.BasePageView.AddChidren(a31PlayMusicPage); a31PlayMusicPage.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; ///上一曲点击事件 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; }; musicView.collectIconBtn.MouseUpEventHandler = (sender, e) => { musicView.collectIconBtn.IsSelected = !musicView.collectIconBtn.IsSelected; a31player.collection = musicView.collectIconBtn.IsSelected ? true : false; }; System.Threading.Tasks.Task.Run(() => { System.Threading.Thread.CurrentThread.Name = "A31"; threadLists.Add(System.Threading.Thread.CurrentThread); 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; } }); } }); } /// /// 读取主从关系 /// 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 { 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 { } } } }