void OnSocketReceive(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; //client.SendBufferSize=10000000; int bytes = client.EndReceive(ar); client.BeginReceive(socketBuffer, 0, socketBuffer.Length, SocketFlags.None, OnSocketReceive, client); //IPAddress ipAd = IPAddress.Parse("127.0.0.1"); // myList=new TcpListener(IPAddress.Any,port); // listenThread = new Thread(new ThreadStart(startListening)); // listenThread.Start(); //} //private void startListening(){ //if(myList!=null) //myList.Start(); //Console.WriteLine("BansheRemoteListener will listen on port " + port.ToString()); //while(true){ //if(myList!=null) //client=myList.AcceptSocket(); //client.Receive(socketBuffer,socketBuffer.Length,SocketFlags.None); string text = Encoding.UTF8.GetString(socketBuffer, 0, bytes); string sep = "/"; string[] remoteMessage = text.Split('/'); string action = remoteMessage[0]; string variable = remoteMessage[1]; if (action.Equals("play")) { variable = variable.Replace('*', '/'); } //Console.WriteLine("BansheeRemoteListener: " + action+ " " + variable); Banshee.Collection.TrackInfo currTrack = ServiceManager.PlayerEngine.CurrentTrack; string replyText = ""; ushort currVol; ushort volStep = 10; bool replyReq = false; string home = Environment.GetEnvironmentVariable("HOME"); string coverPath = ""; //string dbPath=home+"/.config/banshee-1/banshee.db"; if (currTrack != null && currTrack.ArtworkId != null) { coverPath = home + "/.cache/media-art/" + currTrack.ArtworkId.ToString() + ".jpg"; } switch (action) { case "coverImage": /*request*/ byte[] coverImage = File.ReadAllBytes(coverPath); client.Send(coverImage); replyReq = true; break; /*case "syncCount": * int count = System.IO.File.ReadAllBytes(dbPath).Length; * client.Send(System.Text.Encoding.UTF8.GetBytes(count.ToString())); * replyReq=true; * break;*/ /*case "sync": //request * //Console.WriteLine("About to Read the File"); * byte[] db = File.ReadAllBytes(dbPath); * //String s = Convert.ToString(db[8152063],16).PadLeft(2,'0'); * //Console.WriteLine("Byte Read "+s); * byte[] chunk; * int remainingBytes=db.Length; * int offset=0; * int chunksize = 1024; * //int rep = 0; * //String hash="";// = System.Convert.ToBase64String * //int numPieces = (int)Math.Ceiling((double)db.Length/2048); * //Console.WriteLine("Number of bytes "+db.Length); * //client.Send(System.Text.Encoding.UTF8.GetBytes(db.Length.ToString())); * while(remainingBytes>0){ * if(remainingBytes>=chunksize){ * chunk = new byte[chunksize]; * Array.Copy(db,offset,chunk,0,chunksize); * //if(rep==0){ * // hash = System.Convert.ToBase64String(chunk,0,chunksize); * //Console.WriteLine("Hash is : "+hash); * //client.Close(); * //client=myList.AcceptSocket(); * //int bytesT = client.Receive(socketBuffer,socketBuffer.Length,SocketFlags.None); * //string textT = Encoding.UTF8.GetString(socketBuffer,0,bytesT); * //client=myList.AcceptSocket(); * //Console.WriteLine("Received Hash is : "+textT); * * //} * offset+=chunksize; * remainingBytes=remainingBytes-chunksize; * } * else{ * chunk = new byte[remainingBytes]; * Array.Copy(db,offset,chunk,0,remainingBytes); * //hash = System.Convert.ToBase64String(chunk,0,chunksize); * remainingBytes=0; * } * client.Send(chunk); * //rep++; * } * //client.Send(db); * replyReq = true; * break;*/ /*case "sync": //request * //Console.WriteLine("About to Read the File"); * byte[] db = File.ReadAllBytes(dbPath); * int byteLength = db.Length; * int offset = Convert.ToInt32(variable); * int chunksize = 1024; * byte[] chunk; * //if(offset+chunksize>byteLength){ * // chunk=new byte[byteLength-offset]; * // Array.Copy(db,offset,chunk,0,(byteLength-offset)); * //} * //else{ * chunk = new byte[chunksize]; * Array.Copy(db,0,chunk,0,chunksize); * //} * client.Send(chunk); * Console.WriteLine("Sent from offset "+variable); * //String s = Convert.ToString(db[8152063],16).PadLeft(2,'0'); * //Console.WriteLine("Byte Read "+s); * * //int remainingBytes=db.Length; * //int offset=0; * //int chunksize = 1024; * //int rep = 0; * //String hash="";// = System.Convert.ToBase64String * //int numPieces = (int)Math.Ceiling((double)db.Length/2048); * //Console.WriteLine("Number of bytes "+db.Length); * //client.Send(System.Text.Encoding.UTF8.GetBytes(db.Length.ToString())); * //while(remainingBytes>0){ * // if(remainingBytes>=chunksize){ * // chunk = new byte[chunksize]; * // Array.Copy(db,offset,chunk,0,chunksize); * //if(rep==0){ * // hash = System.Convert.ToBase64String(chunk,0,chunksize); * //Console.WriteLine("Hash is : "+hash); * //client.Close(); * //client=myList.AcceptSocket(); * //int bytesT = client.Receive(socketBuffer,socketBuffer.Length,SocketFlags.None); * //string textT = Encoding.UTF8.GetString(socketBuffer,0,bytesT); * //client=myList.AcceptSocket(); * //Console.WriteLine("Received Hash is : "+textT); * * //} * // offset+=chunksize; * // remainingBytes=remainingBytes-chunksize; * // } * // else{ * // chunk = new byte[remainingBytes]; * // Array.Copy(db,offset,chunk,0,remainingBytes); * //hash = System.Convert.ToBase64String(chunk,0,chunksize); * // remainingBytes=0; * // } * //client.Send(chunk); * //rep++; * //} * //client.Send(db); * replyReq = true; * break;*/ case "coverExists": /*request*/ replyText = coverExists(coverPath); replyReq = true; break; case "playPause": /*command*/ ServiceManager.PlayerEngine.TogglePlaying(); replyReq = true; break; case "next": /*command*/ ServiceManager.PlaybackController.Next(); replyReq = true; break; case "prev": /*command*/ ServiceManager.PlaybackController.Previous(); replyReq = true; break; case "play": var source = ServiceManager.SourceManager.ActiveSource as ITrackModelSource; if (source != null) { var countSongs = source.Count; UnknownTrackInfo track = new UnknownTrackInfo(new SafeUri(variable)); TrackInfo trackTemp = null; for (int i = 0; i < countSongs; i++) { trackTemp = source.TrackModel [i]; if (trackTemp.TrackEqual(track)) { break; } } if (trackTemp != null) { ServiceManager.PlayerEngine.OpenPlay(trackTemp); } } replyReq = true; break; case "volumeDown": /*command*/ currVol = ServiceManager.PlayerEngine.Volume; //ServiceManager.PlayerEngine.Open(new SafeUri("hello")); if (currVol < 10) { ServiceManager.PlayerEngine.Volume = 0; } else { ServiceManager.PlayerEngine.Volume = (ushort)(currVol - volStep); } replyReq = true; break; case "volumeUp": /*command*/ currVol = ServiceManager.PlayerEngine.Volume; if (currVol > 90) { ServiceManager.PlayerEngine.Volume = 100; } else { ServiceManager.PlayerEngine.Volume = (ushort)(currVol + volStep); } replyReq = true; break; case "mute": /*command*/ currVol = ServiceManager.PlayerEngine.Volume; if (currVol > 0) { volume = currVol; ServiceManager.PlayerEngine.Volume = 0; } else { ServiceManager.PlayerEngine.Volume = volume; } replyReq = true; break; case "status": /*request*/ replyText = ServiceManager.PlayerEngine.CurrentState.ToString().ToLower(); Console.WriteLine("Status " + replyText); replyReq = true; break; case "album": /*request*/ replyText = currTrack.DisplayAlbumTitle; replyReq = true; break; case "artist": /*request*/ replyText = currTrack.DisplayArtistName; replyReq = true; break; case "title": /*request*/ replyText = currTrack.DisplayTrackTitle; replyReq = true; break; case "trackCurrentTime": /*request*/ replyText = (ServiceManager.PlayerEngine.Position / 1000).ToString(); replyReq = true; break; case "trackTotalTime": /*request*/ replyText = currTrack.Duration.ToString(); replyReq = true; break; case "seek": /*command*/ ServiceManager.PlayerEngine.Position = UInt32.Parse(variable) * 1000; replyReq = true; break; case "shuffle": /*command*/ /*request*/ if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "off") { ServiceManager.PlaybackController.ShuffleMode = "song"; replyText = "song"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "song") { //ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Linear ; ServiceManager.PlaybackController.ShuffleMode = "artist"; replyText = "Artist"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "artist") { //ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Linear ; ServiceManager.PlaybackController.ShuffleMode = "album"; replyText = "Album"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "album") { //ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Linear ; ServiceManager.PlaybackController.ShuffleMode = "rating"; replyText = "Rating"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "rating") { //ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Linear ; ServiceManager.PlaybackController.ShuffleMode = "score"; replyText = "Score"; } else { ServiceManager.PlaybackController.ShuffleMode = "off"; replyText = "off"; } //replyText="off"; //replyText = ServiceManager.PlaybackController.ShuffleMode.ToString(); //Console.WriteLine(ServiceManager.PlaybackController.ShuffleMode.ToString()); replyReq = true; break; case "repeat": /*command*/ /*request*/ if (ServiceManager.PlaybackController.RepeatMode == PlaybackRepeatMode.None) { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.RepeatAll; replyText = "all"; } else if (ServiceManager.PlaybackController.RepeatMode == PlaybackRepeatMode.RepeatAll) { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.RepeatSingle; replyText = "single"; } else { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.None; replyText = "off"; } //replyText = ServiceManager.PlaybackController.RepeatMode.ToString(); //Console.WriteLine(replyText); replyReq = true; break; case "all": /*request*/ replyText = ServiceManager.PlayerEngine.CurrentState.ToString().ToLower() + sep; replyText += currTrack.DisplayAlbumTitle.Replace('/', '\\') + sep; replyText += currTrack.DisplayArtistName.Replace('/', '\\') + sep; replyText += currTrack.DisplayTrackTitle.Replace('/', '\\') + sep; replyText += ((uint)(ServiceManager.PlayerEngine.Position / 1000)).ToString() + sep; replyText += ((uint)(currTrack.Duration.TotalSeconds)).ToString() + sep; replyText += coverExists(coverPath); replyReq = true; break; case "test": replyText = ""; replyReq = true; break; default: replyText = ""; replyReq = false; break; } byte[] messageByte = System.Text.Encoding.UTF8.GetBytes(replyText); if (replyReq) { reply(client, messageByte); //Console.WriteLine(System.Text.Encoding.UTF8.GetString(messageByte)); //} client.Close(); } }
void OnSocketReceive(IAsyncResult ar) { Socket client = null; int bytes = 0; try { client = (Socket)ar.AsyncState; bytes = client.EndReceive(ar); client.BeginReceive(socketBuffer, 0, socketBuffer.Length, SocketFlags.None, OnSocketReceive, client); string text = Encoding.UTF8.GetString(socketBuffer, 0, bytes); string sep = "/"; string[] remoteMessage = text.Split('/'); string action = remoteMessage[0]; string variable = remoteMessage[1]; if (action.Equals("play")) { variable = variable.Replace('*', '/'); } Banshee.Collection.TrackInfo currTrack = ServiceManager.PlayerEngine.CurrentTrack; string replyText = ""; ushort currVol; ushort volStep = 10; bool replyReq = false; string home = Environment.GetEnvironmentVariable("HOME"); string coverPath = ""; string dbPath = home + "/.config/banshee-1/banshee.db"; if (currTrack != null && currTrack.ArtworkId != null) { coverPath = home + "/.cache/media-art/" + currTrack.ArtworkId.ToString() + ".jpg"; } switch (action) { case "coverImage": byte[] coverImage = File.ReadAllBytes(coverPath); client.Send(coverImage); replyReq = true; break; case "syncCount": int count = System.IO.File.ReadAllBytes(dbPath).Length; client.Send(System.Text.Encoding.UTF8.GetBytes(count.ToString())); replyReq = true; break; case "sync": byte[] db = File.ReadAllBytes(dbPath); client.Send(db); replyReq = true; break; case "coverExists": replyText = coverExists(coverPath); replyReq = true; break; case "playPause": ServiceManager.PlayerEngine.TogglePlaying(); replyReq = true; break; case "next": ServiceManager.PlaybackController.Next(); replyReq = true; break; case "prev": ServiceManager.PlaybackController.Previous(); replyReq = true; break; case "play": var source = ServiceManager.SourceManager.MusicLibrary as DatabaseSource; source.FilterQuery = ""; if (source != null) { var countSongs = source.Count; UnknownTrackInfo track = new UnknownTrackInfo(new SafeUri(variable)); TrackInfo trackTemp = null; for (int i = 0; i < countSongs; i++) { trackTemp = source.TrackModel [i]; if (trackTemp.TrackEqual(track)) { break; } } if (trackTemp != null) { ServiceManager.PlayerEngine.OpenPlay(trackTemp); } } replyReq = true; break; case "volumeDown": currVol = ServiceManager.PlayerEngine.Volume; if (currVol < 10) { ServiceManager.PlayerEngine.Volume = 0; } else { ServiceManager.PlayerEngine.Volume = (ushort)(currVol - volStep); } replyReq = true; break; case "volumeUp": currVol = ServiceManager.PlayerEngine.Volume; if (currVol > 90) { ServiceManager.PlayerEngine.Volume = 100; } else { ServiceManager.PlayerEngine.Volume = (ushort)(currVol + volStep); } replyReq = true; break; case "mute": currVol = ServiceManager.PlayerEngine.Volume; if (currVol > 0) { volume = currVol; ServiceManager.PlayerEngine.Volume = 0; } else { ServiceManager.PlayerEngine.Volume = volume; } replyReq = true; break; case "status": replyText = ServiceManager.PlayerEngine.CurrentState.ToString().ToLower(); replyReq = true; break; case "album": replyText = currTrack.DisplayAlbumTitle; replyReq = true; break; case "artist": replyText = currTrack.DisplayArtistName; replyReq = true; break; case "title": replyText = currTrack.DisplayTrackTitle; replyReq = true; break; case "trackCurrentTime": replyText = (ServiceManager.PlayerEngine.Position / 1000).ToString(); replyReq = true; break; case "trackTotalTime": replyText = currTrack.Duration.ToString(); replyReq = true; break; case "seek": ServiceManager.PlayerEngine.Position = UInt32.Parse(variable) * 1000; replyReq = true; break; case "shuffle": if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "off") { ServiceManager.PlaybackController.ShuffleMode = "song"; replyText = "song"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "song") { ServiceManager.PlaybackController.ShuffleMode = "artist"; replyText = "Artist"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "artist") { ServiceManager.PlaybackController.ShuffleMode = "album"; replyText = "Album"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "album") { ServiceManager.PlaybackController.ShuffleMode = "rating"; replyText = "Rating"; } else if (ServiceManager.PlaybackController.ShuffleMode.ToString() == "rating") { ServiceManager.PlaybackController.ShuffleMode = "score"; replyText = "Score"; } else { ServiceManager.PlaybackController.ShuffleMode = "off"; replyText = "off"; } replyReq = true; break; case "repeat": if (ServiceManager.PlaybackController.RepeatMode == PlaybackRepeatMode.None) { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.RepeatAll; replyText = "all"; } else if (ServiceManager.PlaybackController.RepeatMode == PlaybackRepeatMode.RepeatAll) { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.RepeatSingle; replyText = "single"; } else { ServiceManager.PlaybackController.RepeatMode = PlaybackRepeatMode.None; replyText = "off"; } replyReq = true; break; case "all": replyText = ServiceManager.PlayerEngine.CurrentState.ToString().ToLower() + sep; replyText += currTrack.DisplayAlbumTitle.Replace('/', '\\') + sep; replyText += currTrack.DisplayArtistName.Replace('/', '\\') + sep; replyText += currTrack.DisplayTrackTitle.Replace('/', '\\') + sep; replyText += ((uint)(ServiceManager.PlayerEngine.Position / 1000)).ToString() + sep; replyText += ((uint)(currTrack.Duration.TotalSeconds)).ToString() + sep; replyText += coverExists(coverPath); replyReq = true; break; case "test": replyText = ""; replyReq = true; break; default: replyText = ""; replyReq = false; break; } byte[] messageByte = System.Text.Encoding.UTF8.GetBytes(replyText); if (replyReq) { reply(client, messageByte); } client.Close(); } catch (Exception) { } }