Example #1
0
        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);
        }
Example #2
0
        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);
        }