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 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(); verticalRefresh.EndHeaderRefreshing(); }; 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; } ///加载界面时默认不在线 ///这里标记是为了不读取不在线播放器状态 a31player.IsOnLine = false; MusicListView(a31player); } ///读取正确的信息,包括IP和端口及名称 SendMethod.Seach((obj) => { try { if (obj == null) { ///这里要读取主从关系 // readServerOrClientMode(false); 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(true); A31MusicModel.Save(); 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; } 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 = a31player.Name; musicView.regionBtn.TextID = StringId.region; if (a31player.A31PlayStatus.status == "play") { musicView.playBtn.IsSelected = true; } else { musicView.playBtn.IsSelected = false; } EventHandler clickPlay = (sender, e) => { A31MusicModel.Current = a31player;//当前播放器 var a31PlayMusicPage = new A31PlayMusicPage(); MainPage.BasePageView.AddChidren(a31PlayMusicPage); a31PlayMusicPage.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; musicView.singerBtn.MouseUpEventHandler += clickPlay; musicView.songNameBtn.MouseUpEventHandler += clickPlay; musicView.musicNameBtn.MouseUpEventHandler += clickPlay; musicView.regionBtn.MouseUpEventHandler += clickPlay; ///上一曲点击事件 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; }; 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 = a31player.Name; if (a31player.A31PlayStatus.status == "play") { musicView.playBtn.IsSelected = true; } else { musicView.playBtn.IsSelected = false; } }); } }); } } }