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(); }
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(); } }
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(_)); }
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(); }
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(); }
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(); } }
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(); }
public HttpListenerContextHolder(MyHttpListenerContext ctx) { this.ctx = ctx; tick = System.DateTime.Now.Ticks; }