using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace HXX.Scanner.Biz
{
public class self_http_manager
{
private static self_http_manager _instance;
private static string HostURL = "http://localhost:9998/";
public static self_http_manager Instance
{
get
{
if (_instance == null)
{
_instance = new self_http_manager();
}
return _instance;
}
}
private System.Net.HttpListener _listener = null;
public bool startSta = false;
///
/// 启动
///
//public void Start(string ip, int port)
public void Start()
{
Stop();
List httpPrefixes = new List();
//httpPrefixes.Add("http://" + ip + ":" + port + "/" + "UpVmsRecord/");
//httpPrefixes.Add("http://" + ip + ":" + port + "/");
httpPrefixes.Add(HostURL);
new Thread(new ThreadStart(delegate
{
_listener = new HttpListener();
while (true)
{
try
{
_listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
//_listener.Prefixes.Add(httpPrefixes0);
//_listener.Prefixes.Add(httpPrefixes1);
if (httpPrefixes != null)
{
foreach (string url in httpPrefixes)
{
_listener.Prefixes.Add(url);
}
}
_listener.Start();
}
catch (Exception ex)
{
startSta = false;
break;
}
//线程池
int minThreadNum;
int portThreadNum;
int maxThreadNum;
ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
//ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
try
{
while (true)
{
startSta = true;
//等待请求连接
//没有请求则GetContext处于阻塞状态
HttpListenerContext ctx = _listener.GetContext();
ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc), ctx);
}
}
catch
{
startSta = false;
}
}
})).Start();
}
///
/// 停止
///
public void Stop()
{
if (_listener != null)
{
_listener.Stop();
_listener.Close();
_listener = null;
}
}
///
/// 任务进
///
///
void TaskProc(object obj)
{
HttpListenerContext ctx = (HttpListenerContext)obj;
try
{
var url = ctx.Request.Url.AbsoluteUri;
//Stream stream = ctx.Request.InputStream;
//System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.UTF8);
//if (url.Contains("UpVmsRecord"))
//{
// string body = reader.ReadToEnd();
// ////这里的body就是客户端发过来的数据
// //var upRecord = Newtonsoft.Json.JsonConvert.DeserializeObject(body);
// //if (upRecord != null)
// //{
// // Form1._Instance.InsertRecord(upRecord);
// //}
//}
//stream.Close();
ctx.Response.AddHeader("Access-Control-Allow-Origin", "*");
ctx.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
ctx.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type,Authorization,X-Requested-With");
ctx.Response.AddHeader("Access-Control-Max-Age", "3600");
var bytes = bizWork(url);
ctx.Response.OutputStream.Write(bytes, 0, bytes.Length);
ctx.Response.Close();
ctx = null;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.ToString());
}
}
private byte[] bizWork(string url)
{
byte[] bytes;
try
{
var path = url.Replace(HostURL, "");
path = config_manager.Get("dataDir") + "/" + path;
if (File.Exists(path))
{
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
}
}
else
{
bytes = Encoding.UTF8.GetBytes("File Not Found");
}
}
catch (Exception ee)
{
bytes = Encoding.UTF8.GetBytes(ee.Message);
}
return bytes;
}
public static string get_url(string file_full_name)
{
var result = HostURL + file_full_name.Replace(config_manager.Get("dataDir"), "").Replace(@"\", "/");
return result;
}
}
}