public override bool OnHttpRequest(HttpListenerContext context) { if (SubUrl == null) { return(false); } string rawurl = context.Request.RawUrl; if (rawurl.Length > 1 && (rawurl[0] == '/' || rawurl[0] == '\\')) { rawurl = rawurl.Substring(1); } if (SubUrl.Length > 1 && (SubUrl[0] == '/' || SubUrl[0] == '\\')) { SubUrl = SubUrl.Substring(1); } if (rawurl.IndexOf(SubUrl) == 0) //In The Beginning { string reldir; if (SubUrl.Length > 0) { reldir = rawurl.Replace(SubUrl, ""); } else { reldir = rawurl; } string dir = CombineDir(WebDir, reldir); if (!File.Exists(dir)) { return(false); } Stopwatch sw = new Stopwatch(); sw.Start(); //Async Response Task t = Task.Run(() => { context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); var content = File.ReadAllBytes(dir); context.Response.OutputStream.Write(content, 0, content.Length); context.Response.OutputStream.Close(); context.Response.Close(); sw.Stop(); Console.WriteLine("Request:" + dir + "Handled in " + sw.ElapsedMilliseconds + "ms"); }); return(true); } return(false); }
public override bool OnHttpRequest(HttpListenerContext context) { if (base.OnHttpRequest(context)) { return(true); } if (SubUrl == null) { return(false); } string rawurl = context.Request.RawUrl; if (rawurl.Length > 1 && (rawurl[0] == '/' || rawurl[0] == '\\')) { rawurl = rawurl.Substring(1); } if (SubUrl.Length > 1 && (SubUrl[0] == '/' || SubUrl[0] == '\\')) { SubUrl = SubUrl.Substring(1); } if (rawurl.IndexOf(SubUrl) == 0) //In The Beginning { string reldir; if (SubUrl.Length > 0) { reldir = rawurl.Replace(SubUrl, ""); } else { reldir = rawurl; } string dir = CombineDir(MirrorDir, reldir); Stopwatch sw = new Stopwatch(); sw.Start(); //Async Response Task t = Task.Run(() => { bool isSuccess = true; try { var result = client.GetAsync(dir).Result; if (!result.IsSuccessStatusCode) { context.Response.StatusCode = 404; context.Response.Close(); } string saveDir = CombineDir(WebDir, reldir); FileHelper.ResolvePath(saveDir); FileStream stream = new FileStream(saveDir, FileMode.Create); var src = result.Content.ReadAsStreamAsync().Result; src.CopyTo(stream); src.Seek(0, SeekOrigin.Begin); src.CopyTo(context.Response.OutputStream); src.Close(); context.Response.OutputStream.Close(); stream.Flush(); stream.Close(); context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); context.Response.Close(); } catch (Exception e) { isSuccess = false; Console.WriteLine(e); } sw.Stop(); Console.WriteLine("Request:" + dir + (isSuccess?"Handled":"Failed") + " in " + sw.ElapsedMilliseconds + "ms"); }); return(true); } return(false); }