ProcessRequest() public static method

public static ProcessRequest ( HttpListenerContext context ) : void
context System.Net.HttpListenerContext
return void
示例#1
0
        private static void Run()
        {
            Console.Clear();
            DrawArt();

            using (HttpListener listener = new HttpListener())
            {
                if (!int.TryParse(SongPlayerFactory.GetConfigFile().GetValue("server.port"), out port))
                {
                    port = 8765;
                }

                prefix = string.Format("http://*:{0}/", port);

                DrawProgramStatus();

                SongPlayerFactory.GetSongPlayer().LibraryStatusChanged += new StatusChangedEventHandler(Program_LibraryStatusChanged);
                SongPlayerFactory.GetSongPlayer().PlayerStatusChanged  += new StatusChangedEventHandler(Program_PlayerStatusChanged);

                listener.Prefixes.Add(prefix);

                listener.Start();

                while (_running)
                {
                    HttpListenerContext context = listener.GetContext();
                    Stopwatch           watch   = Stopwatch.StartNew();

                    Program_LastRequestChanged(string.Format("{0} - {1}\t{2}", DateTime.Now.ToString("HH:mm:ss"), context.Request.UserHostAddress, context.Request.RawUrl));

                    try
                    {
                        Dispatcher.ProcessRequest(context);

                        watch.Stop();
                    }
                    catch (Exception ex)
                    {
                        context.Response.StatusCode = 500;

                        using (var writer = new StreamWriter(context.Response.OutputStream))
                            writer.Write(ex.ToString());
                    }
                }
            }
        }
示例#2
0
        private async static Task Run()
        {
            // list of tasks
            List <Task> tasks = new List <Task>();

            Console.Clear();
            DrawArt();

            using (HttpListener listener = new HttpListener())
            {
                host = SongPlayerFactory.GetConfigFile().GetValue("server.host");
                if (string.IsNullOrWhiteSpace(host))
                {
                    host = "*";
                }

                if (!int.TryParse(SongPlayerFactory.GetConfigFile().GetValue("server.port"), out port))
                {
                    port = 8765;
                }

                DrawProgramStatus();

                string stringVolume = SongPlayerFactory.GetConfigFile().GetValue("player.startupvolume");
                int    volume;
                if (!int.TryParse(stringVolume, out volume))
                {
                    volume = 50;
                }

                SongPlayerFactory.GetSongPlayer().Volume = volume;
                SongPlayerFactory.GetSongPlayer().LibraryStatusChanged += new StatusChangedEventHandler(Program_LibraryStatusChanged);
                SongPlayerFactory.GetSongPlayer().PlayerStatusChanged  += new StatusChangedEventHandler(Program_PlayerStatusChanged);

                listener.Prefixes.Add(Prefix);

                listener.Start();

                // maximum number of tasks
                int maximumNumberOfTasks = 4 * Environment.ProcessorCount;
                Program_LastRequestChanged(string.Format("Asynchronous handles a maximum of {0} requests.", maximumNumberOfTasks));


                using (SemaphoreSlim semaphore = new SemaphoreSlim(maximumNumberOfTasks, maximumNumberOfTasks))
                {
                    while (_running)
                    {
                        // wait until a semaphore request is released
                        await semaphore.WaitAsync();

                        tasks.RemoveAll(x => x.Status == TaskStatus.RanToCompletion);

                        tasks.Add(Task.Run(() =>
                        {
                            listener.GetContextAsync().ContinueWith(async(t) =>
                            {
                                HttpListenerContext context = await t;

                                try
                                {
                                    Program_LastRequestChanged(string.Format("{0} - {1}\t{2}", DateTime.Now.ToString("HH:mm:ss"), context.Request.UserHostAddress, context.Request.RawUrl));

                                    Dispatcher.ProcessRequest(context);
                                    return;
                                }
                                catch (Exception ex)
                                {
                                    context.Response.StatusCode = 500;

                                    using (var writer = new StreamWriter(context.Response.OutputStream))
                                        writer.Write(ex.ToString());
                                }
                                finally
                                {
                                    // release semaphore request
                                    semaphore.Release();
                                }
                            });
                        }));
                    }
                }
            }

            await Task.WhenAll(tasks);
        }