.vs/HDL_APP_Project/xs/UserPrefs.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HDL_APP_Project/xs/sqlite3/storage.ide | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HDL_APP_Project/xs/sqlite3/storage.ide-shm | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HDL_APP_Project/xs/sqlite3/storage.ide-wal | 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/Music/A31MusicModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/Music/MusicMain.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/Music/SendMethod.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/Music/View/DialogView.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,8 +1,11 @@ <Properties StartupConfiguration="{09712674-2A38-407B-B1E2-560B2C352F9A}|Default"> <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/Music/MusicMain.cs"> <Files> <File FileName="HDL_ON/UI/Music/MusicMain.cs" Line="70" Column="14" /> <File FileName="HDL_ON/UI/Music/SendMethod.cs" Line="69" Column="24" /> <File FileName="HDL_ON/UI/Music/SendMethod.cs" Line="457" Column="52" /> <File FileName="../旧版本Music/MyMusic.cs" Line="754" Column="70" /> <File FileName="HDL_ON/UI/Music/A31MusicModel.cs" Line="159" Column="15" /> <File FileName="HDL_ON/UI/Music/View/DialogView.cs" Line="673" Column="1" /> <File FileName="HDL_ON/UI/Music/MusicMain.cs" Line="1" Column="1" /> </Files> <Pads> <Pad Id="ProjectPad"> @@ -17,6 +20,9 @@ <Node name="MusicMain.cs" selected="True" /> </Node> <Node name="UI0-Public" expanded="True" /> <Node name="UI2" expanded="True"> <Node name="2-Classification" expanded="True" /> </Node> </Node> </Node> <Node name="HDL-ON_Android" expanded="True"> .vs/HDL_APP_Project/xs/sqlite3/storage.ideBinary files differ
.vs/HDL_APP_Project/xs/sqlite3/storage.ide-shmBinary files differ
.vs/HDL_APP_Project/xs/sqlite3/storage.ide-walBinary files differ
HDL_ON/UI/Music/A31MusicModel.cs
@@ -144,10 +144,13 @@ /// </summary> public int ServerClientType; /// <summary> /// 表示从的播放器IP /// 记录主播放器IP /// </summary> public string ServerIP = string.Empty; public string MainPlayIP = string.Empty; /// <summary> /// 记录主播放器名称 /// </summary> public string MainPlayName = string.Empty; public Slaves Slave = new Slaves(); HDL_ON/UI/Music/MusicMain.cs
@@ -12,6 +12,10 @@ //public MusicListViewMain() { // Frame = this; //} public MusicMain() { Tag = "MusicMain"; } public override void RemoveFromParent() { base.RemoveFromParent(); @@ -103,7 +107,7 @@ if (obj == null) { ///这里要读取主从关系 // readServerOrClientMode(false); //readServerOrClientMode(); A31MusicModel.Save(); return; } @@ -139,7 +143,7 @@ { if (obj == null) { //readServerOrClientMode(true); readServerOrClientMode(); A31MusicModel.Save(); Application.RunOnMainThread(() => { @@ -195,6 +199,8 @@ musicView.songNameBtn.Text = a31player.A31PlayStatus.Title; musicView.musicNameBtn.Text = a31player.Name; musicView.regionBtn.TextID = StringId.region; EventHandler<MouseEventArgs> clickMergence = (sender, e) => { @@ -266,7 +272,14 @@ { musicView.singerBtn.Text = a31player.A31PlayStatus.Artist; musicView.songNameBtn.Text = a31player.A31PlayStatus.Title; musicView.musicNameBtn.Text = a31player.Name; if (a31player.ServerClientType == 1) { musicView.musicNameBtn.Text = a31player.MainPlayName; } else { musicView.musicNameBtn.Text = a31player.Name; } if (a31player.A31PlayStatus.status == "play") { musicView.playBtn.IsSelected = true; @@ -281,7 +294,100 @@ } /// <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 = SendMethod.OpenWeb("http://" + a31player.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList"); } if (result != null) { 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 { ServerClientType = -1,//从的 IPAddress = slave.ip, MainPlayIP = a31player.IPAddress, UniqueDeviceName = slave.uuid.Replace("uuid:", ""), Name = slave.name, IsCanShow = false, IsOnLine = false, }); } //如果找到就更新为从的 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; } } a31player.MainPlayName = str; } } catch (Exception e) { var ss = e.Message; } } } catch (Exception e) { var ss = e.Message; } } } HDL_ON/UI/Music/SendMethod.cs
@@ -155,7 +155,7 @@ if (a31MusicModel.ServerClientType == -1) { var result = OpenWeb("http://" + a31MusicModel.ServerIP + "/httpapi.asp?command=multiroom:getSlaveList"); var result = OpenWeb("http://" + a31MusicModel.MainPlayIP + "/httpapi.asp?command=multiroom:getSlaveList"); if (result != null) { var slaves = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves>(result); @@ -460,7 +460,7 @@ { if (a31player.ServerClientType == -1) { new System.Net.WebClient().DownloadData(new Uri("http://" + a31player.ServerIP + "/httpapi.asp?command=multiroom:SlaveVolume:" + a31player.IPAddress + ":" + volume)); new System.Net.WebClient().DownloadData(new Uri("http://" + a31player.MainPlayIP + "/httpapi.asp?command=multiroom:SlaveVolume:" + a31player.IPAddress + ":" + volume)); } else if (a31player.ServerClientType == 1) { HDL_ON/UI/Music/View/DialogView.cs
@@ -311,7 +311,7 @@ Width = Application.GetRealWidth(344), }; dialogFra.AddChidren(verticalScrolViewLayout); var playList = new List<A31MusicModel>(); var playList1 = new List<A31MusicModel>(); for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++) { var player = A31MusicModel.A31MusicModelList[i]; @@ -367,19 +367,19 @@ { clickBtn.IsSelected = !clickBtn.IsSelected; selectedIconBtn.IsSelected = clickBtn.IsSelected; var musicPlayer = playList.Find((c) => c.UniqueDeviceName == player.UniqueDeviceName); var musicPlayer = playList1.Find((c) => c.UniqueDeviceName == player.UniqueDeviceName); if (selectedIconBtn.IsSelected) { if (musicPlayer == null) { playList.Add(player); playList1.Add(player); } } else { if (musicPlayer != null) { playList.Remove(player); playList1.Remove(player); } } }; @@ -396,20 +396,47 @@ } confirmBtn.MouseUpEventHandler += (sender, e) => { if (playList.Count <= 1) if (playList1.Count <= 1) { new PublicAssmebly().TipMsgAutoClose("至少选中两个以上播放器", false); return; } PlayerView(dialog, playList); var playList2 = new List<A31MusicModel>(); for (int i = 0; i < playList1.Count; i++) { var musics = playList1[i]; if (musics.A31PlayStatus.playSource == "play") { playList2.Add(musics); } } if (playList2.Count == 0) { PlayerView(dialog, playList1, playList1); } else if (playList2.Count == 1) { dialog.Close(); var player = playList2[0]; Threading(player, playList1); } else { PlayerView(dialog, playList1, playList2); } }; } /// <summary> /// 选中主播放器的界面 /// </summary> /// <param name="musicList"></param> void PlayerView(Dialog dialogF ,List<A31MusicModel> musicList) /// <param name="musicList1"></param> /// /// <param name="musicList2">显示播放器列表</param> void PlayerView(Dialog dialogF, List<A31MusicModel> musicList1, List<A31MusicModel> musicList2) { //主控件 Dialog dialog = new Dialog() { @@ -472,7 +499,6 @@ IsBold = true, }; topFra.AddChidren(txetBtn); //确认控件 Button confirmBtn = new Button { @@ -486,10 +512,7 @@ TextSize = TextSize.Text14, }; topFra.AddChidren(confirmBtn); confirmBtn.MouseUpEventHandler += (sender, e) => { }; VerticalScrolViewLayout verticalScrolViewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(50), @@ -498,10 +521,10 @@ }; dialogFra.AddChidren(verticalScrolViewLayout); //记录选中状态 Button selectedBtn = new Button() { Tag="No"}; for (int i = 0; i < musicList.Count; i++) Button selectedBtn = new Button() { Name = "No" }; for (int i = 0; i < musicList2.Count; i++) { var player = musicList[i]; var player = musicList2[i]; RowLayout addFlieRow = new RowLayout { Height = Application.GetRealHeight(50), @@ -532,6 +555,7 @@ Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "MusicIcon/noSelectedIcon.png", SelectedImagePath = "MusicIcon/selectedIcon.png", Tag = player, }; addFlieRow.AddChidren(selectedIconBtn); ///加大几点范围 @@ -543,8 +567,8 @@ clickBtn.MouseUpEventHandler += (sender, e) => { selectedBtn.IsSelected = false; selectedBtn.Tag = "Yes"; selectedBtn = selectedIconBtn; selectedBtn.Name = "Yes"; selectedBtn.IsSelected = true; }; //线 @@ -561,15 +585,153 @@ confirmBtn.MouseUpEventHandler += (sender, e) => { if (selectedBtn.Tag.ToString() == "No") if (selectedBtn.Name.ToString() == "No") { new PublicAssmebly().TipMsgAutoClose("还没选中播放器", false); return; } dialogF.Close(); dialog.Close(); var serverMusic = selectedBtn.Tag as A31MusicModel; Threading(serverMusic, musicList1); }; } /// <summary> /// 发送组合命令逻辑处理的方法 /// </summary> /// <param name="serverMusic">主播放器</param> /// <param name="musicList1"></param> void Threading(A31MusicModel serverMusic, List<A31MusicModel> musicList1) { System.Threading.Tasks.Task.Run(() => { try { var IP = ""; if (serverMusic.ServerClientType == -1) { IP = serverMusic.MainPlayIP; } else { IP = serverMusic.IPAddress; } var statusEx = SendMethod.OpenWeb("http://" + IP + "/httpapi.asp?command=getStatusEx"); if (statusEx == null) { statusEx = SendMethod.OpenWeb("http://" + IP + "/httpapi.asp?command=getStatusEx"); } if (statusEx == null) { return; } var serverIfon = Newtonsoft.Json.JsonConvert.DeserializeObject<A31Wifi>(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; } 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)) { } } } DateTime dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 10 * 1000) { System.Threading.Thread.Sleep(1000); try { var result = SendMethod.OpenWeb("http://" + serverMusic.IPAddress + "/httpapi.asp?command=multiroom:getSlaveList"); if (result != null) { var tmepSlaves = Newtonsoft.Json.JsonConvert.DeserializeObject<Slaves>(result); if (tmepSlaves != null && tmepSlaves.slave_list != null) { string str = serverMusic.Name; for (int j = 0; j < A31MusicModel.A31MusicModelList.Count; j++) { var music = A31MusicModel.A31MusicModelList[j]; if (music.UniqueDeviceName == serverMusic.UniqueDeviceName) { music.ServerClientType = 1; 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; } } serverMusic.MainPlayName = str; A31MusicModel.Save(); break; } } } catch { } } } catch { } finally { Application.RunOnMainThread(() => { MainPage.BasePageView.RemoveViewByTag("MusicMain"); var musicMain = new MusicMain(); MainPage.BasePageView.AddChidren(musicMain); musicMain.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }); } }); } } [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; } }