using System; using System.Collections.Generic; using Shared; namespace HDL_ON.UI.Music.View { public class DialogView { /// ///弹窗文件夹列表界面 /// /// public void FieListView(MusicInfo musicInfo) { #region //主控件 Dialog dialog = new Dialog() { BackgroundColor = MusicColor.PopupBackgroundColor, }; dialog.Show(); //父控件 FrameLayout frame = new FrameLayout { }; dialog.AddChidren(frame); frame.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //白色快父控件 FrameLayout dialogFra = new FrameLayout() { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(187), Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(460), BackgroundColor = MusicColor.WhiteColor, Radius = (uint)Application.GetRealHeight(12), }; frame.AddChidren(dialogFra); //显示头部信息父控件 FrameLayout topFra = new FrameLayout() { Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(70), }; dialogFra.AddChidren(topFra); //取消控件 Button cancelnBtn = new Button { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(24), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.cancelMusic, TextAlignment = TextAlignment.CenterLeft, TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text14, }; topFra.AddChidren(cancelnBtn); cancelnBtn.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //标题控件 Button txetBtn = new Button { X = cancelnBtn.Right + Application.GetRealWidth(20), Y = Application.GetRealHeight(23), Width = Application.GetRealWidth(152), Height = Application.GetRealHeight(22), TextColor = MusicColor.TextColor, TextSize = TextSize.Text16, TextAlignment = TextAlignment.Center, TextID = StringId.myList, IsBold = true, }; topFra.AddChidren(txetBtn); //添加图标控件 Button addIconBtn = new Button { X = Application.GetRealWidth(304), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "MusicIcon/addMusic.png", }; topFra.AddChidren(addIconBtn); #endregion VerticalScrolViewLayout verticalScrolViewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(70), Height = dialogFra.Height - Application.GetRealHeight(70), Width = Application.GetRealWidth(344), }; dialogFra.AddChidren(verticalScrolViewLayout); addIconBtn.MouseUpEventHandler += (sender, e) => { var fileNameList = new List(); fileNameList.Clear(); foreach (var stringName in A31MusicModel.Current.FileLists) { fileNameList.Add(stringName.ListName); } new TipView().InputBox(StringId.addNewList, "", StringId.listNameNull, StringId.listNamesSame, fileNameList, (name) => { A31MusicModel.Current.FileLists.Add(new FileListInfo { ListName = name, }); A31MusicModel.Save(); FileView(dialog, verticalScrolViewLayout, musicInfo); }); }; FileView(dialog, verticalScrolViewLayout, musicInfo); } void FileView(Dialog dialog, VerticalScrolViewLayout verticalScrolViewLayout, MusicInfo musicInfo) { verticalScrolViewLayout.RemoveAll(); for (int i = 0; i < A31MusicModel.Current.FileLists.Count; i++) { var list = A31MusicModel.Current.FileLists[i]; RowLayout addFlieRow = new RowLayout { Height = Application.GetRealHeight(78), LineColor = MusicColor.WhiteColor, SubViewWidth = Application.GetRealWidth(80),//改变编辑控件宽度多少; }; verticalScrolViewLayout.AddChidren(addFlieRow); //文件图标 Button fileIconBtn = new Button { X = Application.GetRealWidth(12), Y = Application.GetRealHeight(8), Width = Application.GetMinRealAverage(62), Height = Application.GetMinRealAverage(62), UnSelectedImagePath = "MusicIcon/file.png", }; addFlieRow.AddChidren(fileIconBtn); //文件名控件 Button fileNameBtn = new Button { X = fileIconBtn.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(29), Width = Application.GetRealWidth(189), Height = Application.GetRealHeight(20), TextColor = MusicColor.TextColor, TextSize = TextSize.Text14, TextAlignment = TextAlignment.CenterLeft, Text = list.ListName, }; addFlieRow.AddChidren(fileNameBtn); ///编辑控件 var editBtn = new Button { BackgroundColor = MusicColor.MusicEditColor, Text = Language.StringByID(StringId.editMusic), TextColor = MusicColor.WhiteColor, TextSize = TextSize.Text16, }; addFlieRow.AddRightView(editBtn); editBtn.MouseUpEventHandler += (sender, e) => { var fileNameList = new List(); fileNameList.Clear(); foreach (var stringName in A31MusicModel.Current.FileLists) { fileNameList.Add(stringName.ListName); } new TipView().InputBox(StringId.modifyName, list.ListName, StringId.listNameNull, StringId.listNamesSame, fileNameList, (name) => { if (list.ListName != name) { ///修改名称不一样更新保存 list.ListName = name; fileNameBtn.Text = name; A31MusicModel.Save(); } }); }; ///删除控件 var delBtn = new Button { BackgroundColor = MusicColor.MusicDelColor, Text = Language.StringByID(StringId.delMusic), TextColor = MusicColor.WhiteColor, TextSize = TextSize.Text16, }; addFlieRow.AddRightView(delBtn); delBtn.MouseUpEventHandler += (sender, e) => { new View.TipView().TipBox(StringId.tip, StringId.delMusicFile, () => { addFlieRow.RemoveFromParent(); A31MusicModel.Current.FileLists.Remove(list); A31MusicModel.Save(); }); }; EventHandler click = (sender, e) => { if (null == list.MusicInfoList.Find((music) => music.URL == musicInfo.URL)) { list.MusicInfoList.Add(musicInfo); A31MusicModel.Save(); } dialog.Close(); string msg = Language.StringByID(StringId.addMusicList) + list.ListName; new PublicAssmebly().TipMsgAutoClose(msg, false); }; fileIconBtn.MouseUpEventHandler += click; fileNameBtn.MouseUpEventHandler += click; addFlieRow.MouseUpEventHandler += click; } } /// /// 选中组合的播放器的界面 /// public void PlayMergence(A31MusicModel a31MusicModel) { #region //主控件 Dialog dialog = new Dialog() { BackgroundColor = MusicColor.PopupBackgroundColor, }; dialog.Show(); //父控件 FrameLayout frame = new FrameLayout { }; dialog.AddChidren(frame); frame.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //白色快父控件 FrameLayout dialogFra = new FrameLayout() { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(397), Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(250), BackgroundColor = MusicColor.WhiteColor, Radius = (uint)Application.GetRealHeight(12), }; frame.AddChidren(dialogFra); //显示头部信息父控件 FrameLayout topFra = new FrameLayout() { Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(50), }; dialogFra.AddChidren(topFra); //取消控件 Button cancelnBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.cancelMusic, TextAlignment = TextAlignment.CenterLeft, TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text14, }; topFra.AddChidren(cancelnBtn); cancelnBtn.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //标题控件 Button txetBtn = new Button { X = cancelnBtn.Right + Application.GetRealWidth(20), Y = Application.GetRealHeight(14), Width = Application.GetRealWidth(152), Height = Application.GetRealHeight(22), TextColor = MusicColor.TextColor, TextSize = TextSize.Text16, TextAlignment = TextAlignment.Center, TextID = StringId.selectedMergence, IsBold = true, }; topFra.AddChidren(txetBtn); //确认控件 Button confirmBtn = new Button { X = Application.GetRealWidth(344 - 60 - 20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.confirmMusic, TextAlignment = TextAlignment.CenterRight, TextColor = MusicColor.SelectedColor, TextSize = TextSize.Text14, }; topFra.AddChidren(confirmBtn); VerticalScrolViewLayout verticalScrolViewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(50), Height = dialogFra.Height - Application.GetRealHeight(50), Width = Application.GetRealWidth(344), }; dialogFra.AddChidren(verticalScrolViewLayout); var playList1 = new List(); for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++) { var player = A31MusicModel.A31MusicModelList[i]; if (!player.IsOnLine) { //不在线不显示; continue; } RowLayout PlayRow = new RowLayout { Height = Application.GetRealHeight(50), LineColor = MusicColor.WhiteColor, SubViewWidth = Application.GetRealWidth(80),//改变编辑控件宽度多少; }; verticalScrolViewLayout.AddChidren(PlayRow); //播放器名称控件 Button PlayNameBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(20), TextColor = MusicColor.TextColor, TextSize = TextSize.Text14, TextAlignment = TextAlignment.CenterLeft, Text = NamePlayer(player), }; PlayRow.AddChidren(PlayNameBtn); //选中图标控件 Button selectedIconBtn = new Button { X = Application.GetRealWidth(303), Y = Application.GetRealHeight(11), Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "MusicIcon/noSelectedIcon.png", SelectedImagePath = "MusicIcon/selectedIcon.png", }; PlayRow.AddChidren(selectedIconBtn); ///加大几点范围 Button clickBtn = new Button { Height = Application.GetRealHeight(50), }; PlayRow.AddChidren(clickBtn); if (a31MusicModel.UniqueDeviceName == player.UniqueDeviceName) { clickBtn.IsSelected = selectedIconBtn.IsSelected = true; playList1.Add(a31MusicModel); } clickBtn.MouseUpEventHandler += (sender, e) => { clickBtn.IsSelected = !clickBtn.IsSelected; selectedIconBtn.IsSelected = clickBtn.IsSelected; var musicPlayer = playList1.Find((c) => c.UniqueDeviceName == player.UniqueDeviceName); if (selectedIconBtn.IsSelected) { if (musicPlayer == null) { playList1.Add(player); } } else { if (musicPlayer != null) { playList1.Remove(player); } } }; //线 Button lineBtn = new Button { Y = PlayRow.Height - 1, X = Application.GetRealWidth(20), Width = Application.GetRealWidth(304), Height = 1, BackgroundColor = MusicColor.LineColor, }; PlayRow.AddChidren(lineBtn); } #endregion confirmBtn.MouseUpEventHandler += (sender, e) => { if (playList1.Count <= 1) { new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.selectAtLeastTwoPlayers), false); return; } int number = 0; foreach (var musin in playList1) { if (musin.ServerClientType == 1) { number++; } } if (number >= 2) { new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.cannotSelectTwoOrMoreMainPlayersToCombine), false); //如果都是主播放我就不能组合; return; } ///查询是否已经存在主播放; var host_Music_If = playList1.Find((c) => c.ServerClientType == 1); if (host_Music_If == null) { var playList2 = new List(); for (int i = 0; i < playList1.Count; i++) { var musics = playList1[i]; if (musics.A31PlayStatus.status == "play") { playList2.Add(musics); } } if (playList2.Count == 0) { SelectedPlayerView(dialog, playList1, playList1); } else if (playList2.Count == 1) { //只有一个播放器在播放,默认为主播发器; dialog.Close(); var player = playList2[0]; MergeThreading(player, playList1); } else { SelectedPlayerView(dialog, playList1, playList2); } } else { dialog.Close(); MergeThreading(host_Music_If, playList1); } }; } /// /// 选中某个音乐为主播放器的界面 /// /// 显示将要组合的播放器列表 /// /// 显示在播放音乐播放器列表 void SelectedPlayerView(Dialog dialogF, List musicList1, List musicList2) { #region //主控件 Dialog dialog = new Dialog() { //BackgroundColor = Color.PopupBackgroundColor, }; dialog.Show(); //父控件 FrameLayout frame = new FrameLayout { }; dialog.AddChidren(frame); frame.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //白色快父控件 FrameLayout dialogFra = new FrameLayout() { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(397), Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(250), BackgroundColor = MusicColor.WhiteColor, Radius = (uint)Application.GetRealHeight(12), }; frame.AddChidren(dialogFra); //显示头部信息父控件 FrameLayout topFra = new FrameLayout() { Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(50), }; dialogFra.AddChidren(topFra); //取消控件 Button cancelnBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.cancelMusic, TextAlignment = TextAlignment.CenterLeft, TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text14, }; topFra.AddChidren(cancelnBtn); cancelnBtn.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //标题控件 Button txetBtn = new Button { X = cancelnBtn.Right + Application.GetRealWidth(20), Y = Application.GetRealHeight(14), Width = Application.GetRealWidth(152), Height = Application.GetRealHeight(22), TextColor = MusicColor.TextColor, TextSize = TextSize.Text16, TextAlignment = TextAlignment.Center, TextID = StringId.readyPlay, IsBold = true, }; topFra.AddChidren(txetBtn); //确认控件 Button confirmBtn = new Button { X = Application.GetRealWidth(344 - 60 - 20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.confirmMusic, TextAlignment = TextAlignment.CenterRight, TextColor = MusicColor.SelectedColor, TextSize = TextSize.Text14, }; topFra.AddChidren(confirmBtn); VerticalScrolViewLayout verticalScrolViewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(50), Height = dialogFra.Height - Application.GetRealHeight(50), Width = Application.GetRealWidth(344), }; dialogFra.AddChidren(verticalScrolViewLayout); //记录选中状态 Button selectedBtn = new Button() { Name = "No" }; for (int i = 0; i < musicList2.Count; i++) { var player = musicList2[i]; RowLayout addFlieRow = new RowLayout { Height = Application.GetRealHeight(50), LineColor = MusicColor.WhiteColor, }; verticalScrolViewLayout.AddChidren(addFlieRow); if (player.A31PlayStatus.status == "play") { Button songNameBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(20), TextColor = MusicColor.TextColor, TextSize = TextSize.Text14, TextAlignment = TextAlignment.CenterLeft, Text = player.A31PlayStatus.Title, }; addFlieRow.AddChidren(songNameBtn); var wText = songNameBtn.GetTextWidth();//获取文本宽度 if (wText >Application.GetRealWidth(220)) { songNameBtn.Width = Application.GetRealWidth(220); } else { songNameBtn.Width = wText + Application.GetRealWidth(15); } //歌手控件 Button singerBtn = new Button { X = songNameBtn.Right, Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(220)- wText, Height = Application.GetRealHeight(20), TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text12, TextAlignment = TextAlignment.CenterLeft, Text = "-" + player.A31PlayStatus.Artist.Trim(), }; addFlieRow.AddChidren(singerBtn); } else { //播放器名称控件 Button PlayNameBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(20), TextColor = MusicColor.TextColor, TextSize = TextSize.Text14, TextAlignment = TextAlignment.CenterLeft, Text = NamePlayer(player), }; addFlieRow.AddChidren(PlayNameBtn); } //选中图标控件 Button selectedIconBtn = new Button { X = Application.GetRealWidth(303), Y = Application.GetRealHeight(11), Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "MusicIcon/noSelectedIcon.png", SelectedImagePath = "MusicIcon/selectedIcon.png", Tag = player, }; addFlieRow.AddChidren(selectedIconBtn); ///加大几点范围 Button clickBtn = new Button { Height = Application.GetRealHeight(50), }; addFlieRow.AddChidren(clickBtn); clickBtn.MouseUpEventHandler += (sender, e) => { selectedBtn.IsSelected = false; selectedBtn = selectedIconBtn; selectedBtn.Name = "Yes"; selectedBtn.IsSelected = true; }; //线 Button lineBtn = new Button { Y = addFlieRow.Height - 1, X = Application.GetRealWidth(20), Width = Application.GetRealWidth(304), Height = 1, BackgroundColor = MusicColor.LineColor, }; addFlieRow.AddChidren(lineBtn); } #endregion confirmBtn.MouseUpEventHandler += (sender, e) => { if (selectedBtn.Name.ToString() == "No") { new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.noSelectedPlay), false); return; } dialogF.Close(); dialog.Close(); var serverMusic = selectedBtn.Tag as A31MusicModel; MergeThreading(serverMusic, musicList1); }; } /// /// 选中解除组合的播放器的界面 /// public void DetachPlayMergence(A31MusicModel a31player) { #region //主控件 Dialog dialog = new Dialog() { BackgroundColor = MusicColor.PopupBackgroundColor, }; dialog.Show(); //父控件 FrameLayout frame = new FrameLayout { }; dialog.AddChidren(frame); frame.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //白色快父控件 FrameLayout dialogFra = new FrameLayout() { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(397), Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(250), BackgroundColor = MusicColor.WhiteColor, Radius = (uint)Application.GetRealHeight(12), }; frame.AddChidren(dialogFra); //显示头部信息父控件 FrameLayout topFra = new FrameLayout() { Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(50), }; dialogFra.AddChidren(topFra); //取消控件 Button cancelnBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.cancelMusic, TextAlignment = TextAlignment.CenterLeft, TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text14, }; topFra.AddChidren(cancelnBtn); cancelnBtn.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; //标题控件 Button txetBtn = new Button { X = cancelnBtn.Right + Application.GetRealWidth(20), Y = Application.GetRealHeight(14), Width = Application.GetRealWidth(152), Height = Application.GetRealHeight(22), TextColor = MusicColor.TextColor, TextSize = TextSize.Text16, TextAlignment = TextAlignment.Center, TextID = StringId.checkTheReleasePlayer, //Text = "选中解除播放器", IsBold = true, }; topFra.AddChidren(txetBtn); //确认控件 Button confirmBtn = new Button { X = Application.GetRealWidth(344 - 60 - 20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.confirmMusic, TextAlignment = TextAlignment.CenterRight, TextColor = MusicColor.SelectedColor, TextSize = TextSize.Text14, }; topFra.AddChidren(confirmBtn); VerticalScrolViewLayout verticalScrolViewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(50), Height = dialogFra.Height - Application.GetRealHeight(50), Width = Application.GetRealWidth(344), }; dialogFra.AddChidren(verticalScrolViewLayout); var playList1 = new List(); playList1.Add(a31player); for (int i = 0; i < a31player.Slave.slave_list.Count; i++) { var slave = a31player.Slave.slave_list[i]; var music_If = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == slave.uuid.Replace("uuid:", "")); if (music_If != null) { playList1.Add(music_If); } } var playList2 = new List(); for (int i = 0; i < playList1.Count; i++) { var player = playList1[i]; RowLayout PlayRow = new RowLayout { Height = Application.GetRealHeight(50), LineColor = MusicColor.WhiteColor, SubViewWidth = Application.GetRealWidth(80),//改变编辑控件宽度多少; }; verticalScrolViewLayout.AddChidren(PlayRow); //播放器名称控件 Button PlayNameBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(20), TextColor = MusicColor.TextColor, TextSize = TextSize.Text14, TextAlignment = TextAlignment.CenterLeft, Text = NamePlayer(player), }; PlayRow.AddChidren(PlayNameBtn); //选中图标控件 Button selectedIconBtn = new Button { X = Application.GetRealWidth(303), Y = Application.GetRealHeight(11), Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "MusicIcon/noSelectedIcon.png", SelectedImagePath = "MusicIcon/selectedIcon.png", }; PlayRow.AddChidren(selectedIconBtn); ///加大几点范围 Button clickBtn = new Button { Height = Application.GetRealHeight(50), Tag = player.UniqueDeviceName, }; PlayRow.AddChidren(clickBtn); clickBtn.MouseUpEventHandler += (sender, e) => { clickBtn.IsSelected = !clickBtn.IsSelected; selectedIconBtn.IsSelected = clickBtn.IsSelected; var uuid = playList2.Find((obj) => obj.UniqueDeviceName == clickBtn.Tag.ToString()); if (selectedIconBtn.IsSelected) { if (uuid == null) { playList2.Add(player); } } else { if (uuid != null) { playList2.Remove(player); } } }; //线 Button lineBtn = new Button { Y = PlayRow.Height - 1, X = Application.GetRealWidth(20), Width = Application.GetRealWidth(304), Height = 1, BackgroundColor = MusicColor.LineColor, }; PlayRow.AddChidren(lineBtn); } #endregion confirmBtn.MouseUpEventHandler += (sender, e) => { if (playList1.Count == 0) { new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.noCheckTheReleasePlayer), false); return; } dialog.Close(); RemoveThreading(a31player, playList2); }; } /// /// 发送组合命令逻辑处理的方法 /// /// 主播放器 /// void MergeThreading(A31MusicModel serverMusic, List musicList1) { A31MusicModel mainModel = null; bool mainModelCollection = false; MusicMain.loading.Start(Language.StringByID(StringId.inConfiguration)); bool _if = false; System.Threading.Tasks.Task.Run(() => { try { var statusEx = SendMethod.OpenWeb("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getStatusEx"); if (statusEx == null) { statusEx = SendMethod.OpenWeb("http://" + serverMusic.IPAddress + "/httpapi.asp?command=getStatusEx"); } if (statusEx == null) { return; } var serverIfon = Newtonsoft.Json.JsonConvert.DeserializeObject(statusEx); if (serverIfon == null) { return; } string ssid = ""; foreach (var b in serverIfon.ssid) { ssid += System.Convert.ToString(b, 16).ToUpper().Length < 2 ? "0" + System.Convert.ToString(b, 16).ToUpper() : System.Convert.ToString(b, 16).ToUpper(); } System.Threading.Thread.Sleep(1000); for (int i = 0; i < musicList1.Count; i++) { var clientMusic = musicList1[i]; if (clientMusic.UniqueDeviceName == serverMusic.UniqueDeviceName) { //过滤掉主播放器; continue; } var dd = SendMethod.OpenWeb("http://" + clientMusic.IPAddress + "/httpapi.asp?command=ConnectMasterAp:ssid=" + ssid + ":ch=" + serverIfon.WifiChannel + ":auth=OPEN:encry=NONE:pwd=:chext=0:JoinGroupMaster:eth" + serverIfon.eth2 + ":wifi" + serverIfon.ra0 + ":uuid" + serverIfon.uuid); if (null == SendMethod.OpenWeb("http://" + clientMusic.IPAddress + "/httpapi.asp?command=ConnectMasterAp:ssid=" + ssid + ":ch=" + serverIfon.WifiChannel + ":auth=OPEN:encry=NONE:pwd=:chext=0:JoinGroupMaster:eth" + serverIfon.eth2 + ":wifi" + serverIfon.ra0 + ":uuid" + serverIfon.uuid)) { if (null == SendMethod.OpenWeb("http://" + clientMusic.IPAddress + "/httpapi.asp?command=ConnectMasterAp:ssid=" + ssid + ":ch=" + serverIfon.WifiChannel + ":auth=OPEN:encry=NONE:pwd=:chext=0:JoinGroupMaster:eth" + serverIfon.eth2 + ":wifi" + serverIfon.ra0 + ":uuid" + serverIfon.uuid)) { } } System.Threading.Thread.Sleep(1000);//等待1秒再发数据 } DateTime dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 15 * 1000) { System.Threading.Thread.Sleep(1000); try { var result = SendMethod.OpenWeb("http://" + serverMusic.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList"); if (result != null && result != "Failed") { var tmepSlaves = Newtonsoft.Json.JsonConvert.DeserializeObject(result); if (tmepSlaves != null && tmepSlaves.slave_list != null && tmepSlaves.slave_list.Count != 0) { string str = serverMusic.Name; for (int j = 0; j < A31MusicModel.A31MusicModelList.Count; j++) { var music = A31MusicModel.A31MusicModelList[j]; if(music.collection && !mainModelCollection) { mainModelCollection = true; } if (music.UniqueDeviceName == serverMusic.UniqueDeviceName) { music.ServerClientType = 1; mainModel = music; music.Slave = tmepSlaves; //过滤掉主播放器; continue; } var slave_Ifon = tmepSlaves.slave_list.Find((obj) => obj.uuid.Replace("uuid:", "") == music.UniqueDeviceName); if (null != slave_Ifon) { str = str + "+" + slave_Ifon.name; //已经添加成功 music.ServerClientType = -1; music.IsCanShow = false; music.IsOnLine = false; music.IPAddress = slave_Ifon.ip; music.MainPlayIP = serverMusic.IPAddress; _if = true; } } serverMusic.MainPlayName = str; foreach(var music in A31MusicModel.A31MusicModelList) { if(music.ServerClientType == 1) { music.MainPlayCollection = mainModelCollection; } } A31MusicModel.Save(); break; } } } catch { } } } catch { } finally { Application.RunOnMainThread(() => { MusicMain.loading.Hide(); ///可以提示配置失败; if (_if) { //配置成功才可以刷新界面 MainPage.BasePageView.RemoveViewByTag("MusicMain"); var musicMain = new MusicMain(); MainPage.BasePageView.AddChidren(musicMain); musicMain.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } }); } }); } /// /// 解除组合命令逻辑处理的方法 /// /// 主播放器 /// void RemoveThreading(A31MusicModel a31player, List playList1) { MusicMain.loading.Start(Language.StringByID(StringId.lifting)); var slaveList = new List(); slaveList.AddRange(a31player.Slave.slave_list); // bool host_If = false; //表示是否显示解除的播放 bool _if = false; System.Threading.Tasks.Task.Run(() => { try { var play_If = playList1.Find((obj) => obj.UniqueDeviceName == a31player.UniqueDeviceName); if (play_If == null) { //子音箱与主音箱断开的命令 for (int i = 0; i < playList1.Count; i++) { var clientMusic = playList1[i]; if (null == SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:SlaveKickout:" + clientMusic.IPAddress)) { if (null == SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:SlaveKickout:" + clientMusic.IPAddress)) { } } ///每解除一个播放器需要等待3秒 System.Threading.Thread.Sleep(3000);//等待3秒再发数据 } } else { //解散组的命令 if (null == SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:Ungroup")) { if (null == SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:Ungroup")) { } } } DateTime dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 12 * 1000) { System.Threading.Thread.Sleep(1000); try { var result = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList"); if (result != null && result != "Failed") { var tmepSlaves = Newtonsoft.Json.JsonConvert.DeserializeObject(result); if (tmepSlaves != null) { if (tmepSlaves.slave_list.Count == 0) { var host_music = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == a31player.UniqueDeviceName); if (host_music != null) { host_music.ServerClientType = 0;//解除主从关系 host_music.MainPlayName = ""; } for (int a = 0; a < slaveList.Count; a++) { var uuid = slaveList[a].uuid.Replace("uuid:", ""); var music = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == uuid); if (music != null) { music.ServerClientType = 0;//解除主从关系 music.IsCanShow = true;//允许显示 music.IsOnLine = false;//先不允许读取 } } } else { for (int b = 0; b < tmepSlaves.slave_list.Count; b++) { var uuid = tmepSlaves.slave_list[b].uuid.Replace("uuid:", ""); var music = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == uuid); if (music != null) { music.ServerClientType = 0;//解除主从关系 music.IsCanShow = true;//允许显示 music.IsOnLine = false;//先不允许读取 } } } var host_a31player = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == a31player.UniqueDeviceName); string str = host_a31player.Name; for (int b = 0; b < tmepSlaves.slave_list.Count; b++) { str = str + "+" + tmepSlaves.slave_list[b].name; } host_a31player.MainPlayName = str;///改变主播放器的显示名称 _if = true;//解除成功 A31MusicModel.Save(); break; } } } catch { } } } catch { } finally { Application.RunOnMainThread(() => { MusicMain.loading.Hide(); ///可以提示解除失败; if (_if) { //解除成功才可以刷新界面 MainPage.BasePageView.RemoveViewByTag("MusicMain"); var musicMain = new MusicMain(); MainPage.BasePageView.AddChidren(musicMain); musicMain.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } }); } }); } /// /// 播放器名称 /// public string NamePlayer(A31MusicModel a31player) { if (a31player.ServerClientType == 1) { return a31player.MainPlayName; } else { return a31player.Name; } } List volumePlayList = new List(); A31MusicModel currVolumePlay = null;//当前的播放器 int startVolume = 0;//之前的音量 int endVolume = 0;//现在的音量 string if_volume ="";//标记是调节总音量还是单个播放器音量; /// /// 播放器音量的界面 /// /// 主播放器 public void PlayerVolumeView(A31MusicModel a31player) { volumePlayList.Clear(); for (int i = 0; i < a31player.Slave.slave_list.Count; i++) { var slave = a31player.Slave.slave_list[i]; var music_If = A31MusicModel.A31MusicModelList.Find((c) => c.UniqueDeviceName == slave.uuid.Replace("uuid:", "")); if (music_If != null) { music_If.ServerClientType = -1; music_If.A31PlayStatus.vol = slave.volume; volumePlayList.Add(music_If); } } volumePlayList.Add(a31player); #region //主控件 Dialog volumedialog = new Dialog(); volumedialog.Show(); //父控件 FrameLayout frame = new FrameLayout { }; volumedialog.AddChidren(frame); //白色快父控件 FrameLayout dialogFra = new FrameLayout() { X = Application.GetRealWidth(16), Y = Application.GetRealHeight(397-20), Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(250+20), BackgroundColor = MusicColor.WhiteColor, Radius = (uint)Application.GetRealHeight(12), }; frame.AddChidren(dialogFra); #region 确认 取消 //显示头部信息父控件 FrameLayout topFra = new FrameLayout() { Width = Application.GetRealWidth(344), Height = Application.GetRealHeight(58), }; dialogFra.AddChidren(topFra); //取消控件 Button cancelnBtn = new Button { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.cancelMusic, TextAlignment = TextAlignment.CenterLeft, TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text14, }; topFra.AddChidren(cancelnBtn); //标题控件 Button txetBtn = new Button { X = cancelnBtn.Right + Application.GetRealWidth(20), Y = Application.GetRealHeight(14), Width = Application.GetRealWidth(152), Height = Application.GetRealHeight(22), TextColor = MusicColor.TextColor, TextSize = TextSize.Text16, TextAlignment = TextAlignment.Center, TextID = StringId.volumeAdjustment, IsBold = true, }; topFra.AddChidren(txetBtn); //确认控件 Button confirmBtn = new Button { X = Application.GetRealWidth(344 - 60 - 20), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(20), TextID = StringId.confirmMusic, TextAlignment = TextAlignment.CenterRight, TextColor = MusicColor.SelectedColor, TextSize = TextSize.Text14, }; topFra.AddChidren(confirmBtn); EventHandler eventHandler= (sen,e) => { volumedialog.Close(); if (updateVolumeThread != null) { try { if (updateVolumeThread.IsAlive) { updateVolumeThread.Abort(); } } catch { } } }; cancelnBtn.MouseUpEventHandler += eventHandler; confirmBtn.MouseUpEventHandler += eventHandler; frame.MouseUpEventHandler += eventHandler; #endregion #region 总音量的View FrameLayout totalVolumeFra = new FrameLayout { Height = Application.GetRealHeight(64), Y = Application.GetRealHeight(58), }; dialogFra.AddChidren(totalVolumeFra); Button totalvolumeTextBtn = new Button { X = Application.GetRealWidth(28), Y = Application.GetRealHeight(8), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(14), TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text10, TextAlignment = TextAlignment.CenterLeft, Text = Language.StringByID(StringId.totalVolume), }; totalVolumeFra.AddChidren(totalvolumeTextBtn); DiyImageSeekBar totalVolSeekBar = new DiyImageSeekBar { Y = Application.GetRealHeight(12), X = Application.GetRealWidth(28), Width = Application.GetRealWidth(240), Height = Application.GetRealHeight(54),//进度条父控件背景高度 IsProgressTextShow = false,//显示百分比 IsClickable = true,//进度条是否滑动 ProgressBarColor = MusicColor.SelectedColor,//选中进度条颜色 ThumbImagePath = "MusicIcon/progressIcon.png",//进度条按钮图标 ThumbImageHeight = Application.GetMinRealAverage(54),//进度条按钮图标的高度(默认正方形:宽和高一样) SeekBarViewHeight = Application.GetMinRealAverage(8),//进度条的高度 Progress = int.Parse(a31player.A31PlayStatus.vol), SeekBarPadding = Application.GetRealWidth(20), //ProgressChangeDelayTime= }; totalVolumeFra.AddChidren(totalVolSeekBar); Button totalVolumeValueBtn = new Button { X = Application.GetRealWidth(289), Y = Application.GetRealHeight(31), Width = Application.GetRealWidth(26 + 15), Height = Application.GetRealHeight(17), TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text12, TextAlignment = TextAlignment.CenterLeft, Text = totalVolSeekBar.Progress.ToString() + "%", }; totalVolumeFra.AddChidren(totalVolumeValueBtn); #endregion VerticalScrolViewLayout volumeViewLayout = new VerticalScrolViewLayout { Y =Application.GetRealHeight(58+64), Height = dialogFra.Height - Application.GetRealHeight(58+64), Width = Application.GetRealWidth(343), }; dialogFra.AddChidren(volumeViewLayout); for (int i = 0; i < volumePlayList.Count; i++) { var player = volumePlayList[i]; #region 调节当个播放器View FrameLayout volumeFra = new FrameLayout { Height = Application.GetRealHeight(64), }; volumeViewLayout.AddChidren(volumeFra); Button volumeTextBtn = new Button { X = Application.GetRealWidth(28), Y = Application.GetRealHeight(8), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(14), TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text10, TextAlignment = TextAlignment.CenterLeft, Text = player.Name + Language.StringByID(StringId.volumeMusic), }; volumeFra.AddChidren(volumeTextBtn); DiyImageSeekBar volSeekBar = new DiyImageSeekBar { Y = Application.GetRealHeight(12), X = Application.GetRealWidth(28), Width = Application.GetRealWidth(240), Height = Application.GetRealHeight(54),//进度条父控件背景高度 IsProgressTextShow = false,//显示百分比 IsClickable = true,//进度条是否滑动 ProgressBarColor = MusicColor.SelectedColor,//选中进度条颜色 ThumbImagePath = "MusicIcon/progressIcon.png",//进度条按钮图标 ThumbImageHeight = Application.GetMinRealAverage(54),//进度条按钮图标的高度(默认正方形:宽和高一样) SeekBarViewHeight = Application.GetMinRealAverage(8),//进度条的高度 Progress = int.Parse(player.A31PlayStatus.vol), SeekBarPadding = Application.GetRealWidth(20), //ProgressChangeDelayTime= }; volumeFra.AddChidren(volSeekBar); Button valueBtn = new Button { X = Application.GetRealWidth(289), Y = Application.GetRealHeight(31), Width = Application.GetRealWidth(26+15), Height = Application.GetRealHeight(17), TextColor = MusicColor.MusicNoTxetColor, TextSize = TextSize.Text12, TextAlignment = TextAlignment.CenterLeft, Text = player.A31PlayStatus.vol + "%", }; volumeFra.AddChidren(valueBtn); #endregion ///音量进度条点击事件 EventHandler progressClick = (sender, e) => { if (currVolumePlay == null || (currVolumePlay != null && currVolumePlay.UniqueDeviceName != player.UniqueDeviceName)) { currVolumePlay = player; } endVolume = e; if_volume = "Volume"; valueBtn.Text = volSeekBar.Progress + "%"; }; volSeekBar.OnProgressChangedEvent += progressClick; volSeekBar.OnStopTrackingTouchEvent += progressClick; } EventHandler totalProgressClick = (sender, e) => { if_volume = "totalVolume"; endVolume = e; totalVolumeValueBtn.Text = totalVolSeekBar.Progress + "%"; for (int j = 0; j < volumePlayList.Count; j++) { var music = volumePlayList[j]; var frameLayout = (FrameLayout)volumeViewLayout.GetChildren(j); var diyImageSeekBar = (DiyImageSeekBar)frameLayout.GetChildren(1); var button = (Button)frameLayout.GetChildren(2); diyImageSeekBar.Progress = totalVolSeekBar.Progress; button.Text = totalVolSeekBar.Progress + "%"; } }; totalVolSeekBar.OnProgressChangedEvent += totalProgressClick; totalVolSeekBar.OnStopTrackingTouchEvent += totalProgressClick; #endregion } /// /// 定时音量并且发送命令 /// System.Threading.Thread updateVolumeThread; public void UpdateVolume() { if (updateVolumeThread != null) { try { if (updateVolumeThread.IsAlive) { updateVolumeThread.Abort(); } } catch { } } updateVolumeThread = new System.Threading.Thread(() => { try { while (true) { System.Threading.Thread.Sleep(500); if (startVolume == endVolume) { continue; } startVolume = endVolume; if (if_volume == "totalVolume") { for (int j = 0; j < volumePlayList.Count; j++) { var music = volumePlayList[j]; //每个500毫秒发从播放器音量命令 SendMethod.ControlVolume(endVolume, music); System.Threading.Thread.Sleep(1000); } } else if(if_volume == "Volume") { if (currVolumePlay == null) { continue; } SendMethod.ControlVolume(endVolume, currVolumePlay); } } } catch { } }) { IsBackground = true }; updateVolumeThread.Start(); } } [System.Serializable] public class A31Wifi
 { public string ssid;
 public string WifiChannel;
 public string uuid;
 public string eth2;
 public string ra0;
 public string upnp_uuid; public string firmware; public string language; public string MAC; public string Release; public string psk; public string SSIDStrategy; public string netstat; public string apcli0; 
 } }