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) { source = ServiceManager.SourceManager.DefaultSource 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); } else { log("Track not found: " + variable); } } else { log("No source to play from."); } 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) { } }