Exemple #1
0
        private void ReturnDefault(MyHttpListenerContext ctx)
        {
            var res = ctx.Response;
            var req = ctx.Request;

            res.ContentEncoding = Encoding.UTF8;
            var useGzip = req.Headers["Accept-Encoding"].Split(',').Contains("gzip");

            if (useGzip)
            {
                res.AppendHeader("Content-Encoding", "gzip");
            }
            res.ContentType = "text/html; charset=UTF-8";

            using (var os = res.OutputStream)
                using (var gzips = new System.IO.Compression.GZipStream(os, System.IO.Compression.CompressionMode.Compress))
                    using (var sw = new System.IO.StreamWriter(useGzip ? gzips : os))
                    {
                        sw.Write(Properties.Resources.template_html
                                 .Replace("%%SCRIPT%%", Properties.Resources.main_js)
                                 .Replace("%%STYLE%%", Properties.Resources.defalut_css)
                                 .Replace("%%IMAGE_SIZE%%", IMAGE_SIZE.ToString()));
                        sw.Flush();
                    }
            res.Close();
        }
Exemple #2
0
        private void HandleHTTPContext(MyHttpListenerContext ctx)
        {
            var req = ctx.Request;
            var res = ctx.Response;

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

            string mode = "";

            if (req.QueryString.AllKeys.Contains("mode"))
            {
                mode = req.QueryString["mode"];
            }

            try
            {
                HTTPRequestHandler handler = ReturnDefault;
                if (HTTPHandlers.ContainsKey(mode))
                {
                    handler = HTTPHandlers[mode];
                }
                handler(ctx);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            finally
            {
//                res.Close();
            }
        }
Exemple #3
0
        private void ReturnXML(MyHttpListenerContext ctx)
        {
            var req = ctx.Request;
            var res = ctx.Response;

            res.ContentEncoding = Encoding.UTF8;
            res.ContentType     = "text/xml; charset=UTF-8";

            string type = req.QueryString["type"];

            int comet_session = 0;

            switch (type)
            {
            case "playlist":
                Util.Util.tryParseInt(req.QueryString["comet_id"], ref comet_session);
                if (comet_session == GetCometContext_XMLPlaylist())
                {
                    holdingConnections_Playlist.Add(new HttpListenerContextHolder(ctx));
                }
                else
                {
                    ReturnXML_Playlist(ctx.Request, ctx.Response);
                }
                break;

            default:
                Util.Util.tryParseInt(req.QueryString["comet_id"], ref comet_session);
                if (comet_session == GetCometContext_XMLInfo())
                {
                    holdingConnections_Info.Add(new HttpListenerContextHolder(ctx));
                }
                else
                {
                    ReturnXML_Info(ctx.Request, ctx.Response);
                }
                break;
            }

            // 60sec以上前の接続を破棄
            var expiredConnections = holdingConnections_Playlist.FindAll(_ => (System.DateTime.Now.Ticks - _.tick) > 60 * 1000 * 1000 * 10)
                                     .Concat(holdingConnections_Info.FindAll(_ => (System.DateTime.Now.Ticks - _.tick) > 60 * 1000 * 1000 * 10));

            foreach (HttpListenerContextHolder e in expiredConnections)
            {
                try
                {
                    e.ctx.Response.Abort();
                }
                catch { }
            }
            ;
            holdingConnections_Playlist.RemoveAll(_ => expiredConnections.Contains(_));
            holdingConnections_Info.RemoveAll(_ => expiredConnections.Contains(_));
        }
Exemple #4
0
        private void KickAPI(MyHttpListenerContext ctx)
        {
            var    req = ctx.Request;
            var    res = ctx.Response;
            string op  = req.QueryString["operation"];

            switch (op)
            {
            case "play":
                Controller.Play();
                break;

            case "next":
                Controller.NextTrack();
                break;

            case "prev":
                Controller.PrevTrack();
                break;

            case "stop":
                Controller.Stop();
                break;

            case "playpause":
                Controller.TogglePause();
                break;

            case "volup":
                Controller.Volume += 0.1F;
                break;

            case "voldown":
                Controller.Volume -= 0.1F;
                break;

            case "playitem":
                int index = 0;
                Lutea.Util.Util.tryParseInt(req.QueryString["index"], ref index);
                Controller.PlayPlaylistItem(index);
                break;

            case "createPlaylist":
                Controller.CreatePlaylist(System.Web.HttpUtility.UrlDecode(req.QueryString["query"]));
                break;

            case "quit":
                Controller.Quit();
                break;
            }
            res.Close();
        }
Exemple #5
0
        private void ReturnBlank(MyHttpListenerContext ctx)
        {
            var res = ctx.Response;

            res.ContentEncoding = Encoding.UTF8;
            res.ContentType     = "text/html; charset=UTF-8";

            using (var os = res.OutputStream)
                using (var sw = new System.IO.StreamWriter(os))
                {
                    sw.Write("<html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=8\" /><style type=\"text/css\">" + Properties.Resources.defalut_css + "</style></head><body></body></html>");
                    sw.Flush();
                }
            res.Close();
        }
Exemple #6
0
        private void ReturnCoverOriginalSize(MyHttpListenerContext ctx)
        {
            var res = ctx.Response;

            res.ContentType = "image/jpeg";
            var image = Controller.Current.CoverArtImage();

            if (image == null)
            {
                image = new Bitmap(1, 1);
            }
            using (var ms = new System.IO.MemoryStream())
            {
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                var buffer = ms.GetBuffer();
                res.OutputStream.Write(buffer, 0, buffer.Length);
                res.Close();
            }
        }
Exemple #7
0
        private void ReturnCover(MyHttpListenerContext ctx)
        {
            var res = ctx.Response;

            res.ContentType = "image/png";
            if (CachedImagePNG_CoverArt == null)
            {
                var image = Controller.Current.CoverArtImage();
                if (image == null)
                {
                    image = new Bitmap(1, 1);
                }
                var resized = Util.ImageUtil.GetResizedImageWithPadding(image, IMAGE_SIZE, IMAGE_SIZE);
                using (var ms = new System.IO.MemoryStream())
                {
                    resized.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    CachedImagePNG_CoverArt = ms.GetBuffer();
                }
            }
            res.OutputStream.Write(CachedImagePNG_CoverArt, 0, CachedImagePNG_CoverArt.Length);
            res.Close();
        }
Exemple #8
0
 public HttpListenerContextHolder(MyHttpListenerContext ctx)
 {
     this.ctx = ctx;
     tick     = System.DateTime.Now.Ticks;
 }