Exemplo n.º 1
0
        public override void Process(HttpListenerRequest request, HttpListenerResponse response)
        {
            SongPlayerFactory.GetConfigFile();

            string text = Get("index.htm");

            response.ContentType = "text/html";

            WriteUtf8String(response.OutputStream, text);
        }
Exemplo n.º 2
0
        public bool ClientAllowed(string requesterName)
        {
            if (string.IsNullOrEmpty(requesterName))
            {
                return(true);
            }

            string allowedClients = SongPlayerFactory.GetConfigFile().GetValue("server.clients");

            //Only allow clients from config file
            return(string.IsNullOrEmpty(allowedClients) ||
                   allowedClients.Equals("all", StringComparison.OrdinalIgnoreCase) ||
                   SongPlayerFactory.GetConfigFile().GetValue("server.clients").ContainsOrdinalIgnoreCase(requesterName));
        }
Exemplo n.º 3
0
        public override void Process(HttpListenerRequest request, HttpListenerResponse response)
        {
            string[] actionPath = request.RawUrl.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            string action = actionPath[1].ToLower();

            ISongPlayer songPlayer = SongPlayerFactory.GetSongPlayer();
            string      requester  = GetRequester(request);

            response.AppendHeader("Cache-Control", "no-cache");

            switch (action)
            {
            case "queue":
                switch (request.HttpMethod)
                {
                case "GET":
                    response.ContentType = "application/json";
                    WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                        new
                    {
                        Queue        = songPlayer.PlayQueue.ToList(),
                        PlayerStatus = songPlayer.PlayerStatus,
                        Self         = requester
                    }
                                        ));
                    break;

                case "POST":
                    if (!ClientAllowed(requester))
                    {
                        return;
                    }

                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Enqueue(reader.ReadToEnd(), requester);
                    }
                    break;

                case "DELETE":
                    if (!ClientAllowed(requester))
                    {
                        return;
                    }

                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Dequeue(reader.ReadToEnd(), requester);
                    }
                    break;
                }
                break;

            case "playlist":
            {
                if (!ClientAllowed(requester))
                {
                    return;
                }

                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted          = reader.ReadToEnd();
                        var    playlistRequest = JsonConvert.DeserializeAnonymousType(posted, new { Filter = string.Empty, Page = 0, SortBy = "artist", Ascending = true });

                        Song[] songs = songPlayer.GetPlayList(
                            playlistRequest.Filter,
                            playlistRequest.SortBy,
                            playlistRequest.Ascending
                            ).ToArray();

                        response.ContentType = "application/json";
                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                            new
                            {
                                TotalPageCount      = (songs.Length + (_pageSize - 1)) / _pageSize,
                                CurrentPage         = playlistRequest.Page,
                                SongsForCurrentPage = songs.Skip((playlistRequest.Page - 1) * _pageSize).Take(_pageSize).ToArray(),
                                SortBy    = playlistRequest.SortBy,
                                Ascending = playlistRequest.Ascending
                            }
                                            ));
                    }
                }
                break;
            }

            case "next":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Next(requester);
                break;

            case "rescan":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Rescan();
                ImageHelper.Purge();
                break;

            case "pause":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Pause();
                break;

            case "volume":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted = reader.ReadToEnd();

                        int volume;
                        if (int.TryParse(posted, out volume))
                        {
                            songPlayer.Volume = volume;
                        }

                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(songPlayer.Volume));
                    }
                }
                break;

            case "image":
                string tempId;
                bool   large = false;
                if (actionPath.Length == 4)
                {
                    tempId = actionPath[2];
                    if (!string.IsNullOrEmpty(tempId))
                    {
                        tempId = WebUtility.HtmlDecode(tempId);
                    }

                    if (actionPath[3].Equals("large", StringComparison.OrdinalIgnoreCase))
                    {
                        large = true;
                    }
                }
                else
                {
                    tempId = string.Empty;

                    if (actionPath[2].Equals("large", StringComparison.OrdinalIgnoreCase))
                    {
                        large = true;
                    }
                }

                ImageHelper.HelpMe(response, tempId, songPlayer, large);
                break;

            default:
                response.ContentType = "text/plain";
                WriteUtf8String(response.OutputStream, request.RawUrl);
                break;
            }
        }
Exemplo n.º 4
0
        public override void Process(HttpListenerRequest request, HttpListenerResponse response)
        {
            string[] actionPath = request.RawUrl.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            string action = actionPath[1];

            ISongplayer songPlayer = SongPlayerFactory.GetSongPlayer();

            switch (action)
            {
            case "queue":
                switch (request.HttpMethod)
                {
                case "GET":
                    response.ContentType = "application/json";
                    WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                        new
                    {
                        Queue        = songPlayer.PlayQueue.ToList(),
                        PlayerStatus = songPlayer.PlayerStatus,
                        Self         = GetRequester(request)
                    }
                                        ));
                    break;

                case "POST":
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Enqueue(reader.ReadToEnd(), GetRequester(request));
                    }
                    break;

                case "DELETE":
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Dequeue(reader.ReadToEnd(), GetRequester(request));
                    }
                    break;
                }
                break;

            case "playlist":
            {
                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted          = reader.ReadToEnd();
                        var    playlistRequest = JsonConvert.DeserializeAnonymousType(posted, new { Filter = string.Empty, Page = 0, SortBy = "artist", Ascending = true });

                        Song[] songs = songPlayer.GetPlayList(
                            playlistRequest.Filter,
                            playlistRequest.SortBy,
                            playlistRequest.Ascending
                            ).ToArray();

                        response.ContentType = "application/json";
                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                            new
                            {
                                TotalPageCount      = (songs.Length + (_pageSize - 1)) / _pageSize,
                                CurrentPage         = playlistRequest.Page,
                                SongsForCurrentPage = songs.Skip((playlistRequest.Page - 1) * _pageSize).Take(_pageSize).ToArray(),
                                SortBy    = playlistRequest.SortBy,
                                Ascending = playlistRequest.Ascending
                            }
                                            ));
                    }
                }
                break;
            }

            case "next":
                response.ContentType = "application/json";
                songPlayer.Next(GetRequester(request));
                WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(songPlayer.PlayerStatus));
                break;

            case "rescan":
                response.ContentType = "application/json";
                songPlayer.Rescan(GetRequester(request));
                break;

            case "pause":
                response.ContentType = "application/json";
                songPlayer.Pause(GetRequester(request));
                break;

            case "volume":
                response.ContentType = "application/json";
                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted = reader.ReadToEnd();
                        songPlayer.Volume = int.Parse(posted);

                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(songPlayer.Volume));
                    }
                }
                break;

            default:
                response.ContentType = "text/plain";
                WriteUtf8String(response.OutputStream, request.RawUrl);
                break;
            }
        }