123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- using HttpServer.App;
- using System;
- using System.Net;
- using System.Text;
- using System.Threading;
- using System.Web;
- namespace HttpServer
- {
- internal static class HttpProgram
- {
- private static bool _isRunning;
- private static void Main(string[] args)
- {
- Console.WriteLine("Starting...");
- var tWorker = new Thread(Working);
- _isRunning = true;
- tWorker.Start();
- Console.WriteLine("Press ENTER to Stop.");
- Console.ReadLine();
- Console.Write("Shutting down...");
- _isRunning = false;
- tWorker.Join();
- Console.Write("Stopped.");
- Console.WriteLine();
- Console.Write("Press ENTER to Exit.");
- Console.ReadLine();
- }
- private static void Working()
- {
- var listener = new HttpListener();
- listener.Prefixes.Add(Properties.Settings.Default.ListenPrefix);
- listener.Start();
- var upTime = DateTime.Now;
- Console.WriteLine($"HTTP Server started, listening on {Properties.Settings.Default.ListenPrefix}");
- var task = listener.GetContextAsync();
- var polling = DateTime.Now;
- var polled = false;
- while (_isRunning)
- {
- Console.CursorLeft = 0;
- if (false == task.Wait(500))
- {
- var timeSpan = DateTime.Now - polling;
- var up = DateTime.Now - upTime;
- Console.Write("Polling request..." +
- $" {timeSpan.Days:00}D {timeSpan.Hours:00}H {timeSpan.Minutes:00}M {timeSpan.Seconds:00}S {timeSpan.Milliseconds:000}" +
- $" / UP {up.Days:00}D {up.Hours:00}H {up.Minutes:00}M {up.Seconds:00}S {up.Milliseconds:000}");
- polled = true;
- }
- else
- {
- if (polled)
- {
- Console.WriteLine();
- polled = false;
- }
- var context = task.Result;
- task = listener.GetContextAsync();
- var request = context.Request;
- Console.WriteLine($"Request from {request.RemoteEndPoint} {request.HttpMethod} {request.RawUrl}");
- var queryString = HttpUtility.ParseQueryString(request.Url.Query);
- var mac = queryString["mac"].Replace(":", "-").ToUpper();
- Console.WriteLine($" MAC:{mac}");
- var buffer = Encoding.ASCII.GetBytes(IpxeScriptManager.GetScript(mac));
- context.Response.OutputStream.Write(buffer, 0, buffer.Length);
- context.Response.Close();
- Console.WriteLine(" Response closed.");
- }
- }
- listener.Close();
- }
- }
- }
|