using EasyModbusClient; using EasyModbusClient.businessBody; using IMCS.DefaultList; using IMCS.Lib; using System; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace IMCS.Device { public class DeviceHttpServer { public delegate void DelegateHttpServer(string value, HttpListenerResponse response); public event DelegateHttpServer HttpServerMsg; public delegate void DelegateHttpServer_WL_Roboot(string value, HttpListenerResponse response); public event DelegateHttpServer_WL_Roboot HttpServerMsg_Wl_Roboot; public delegate void DelegateHttpServer_WL_Print(string value, HttpListenerResponse response); public event DelegateHttpServer_WL_Roboot HttpServerMsg_Wl_Print; public delegate void DelegateHttpServer_WL_Clean(string value, HttpListenerResponse response); public event DelegateHttpServer_WL_Clean HttpServerMsg_Wl_Clean; public delegate void DelegateHttpServer_WL_Machine(string value, HttpListenerResponse response); public event DelegateHttpServer_WL_Machine HttpServerMsg_Wl_Machine; public void HttpServer() { bool IsRun = false; string HttpServerUrlString = ""; string localip = Dns.GetHostAddresses(Dns.GetHostName()).Where(m => m.ToString().Contains(".170")).FirstOrDefault().ToString(); HttpServerUrlString = $"http://{localip}:8089/"; //netsh http add urlacl url=http://192.168.170.24:8089/ user=Everyone string cmdreceive = LibCMD.Instance.WriteCmd($"netsh http add urlacl url={HttpServerUrlString} user=Everyone"); // string cmdreceive = CMDLib.Instance.WriteCmd($"netsh http add urlacl url=http://{localip}:8089/ user=Everyone"); if (cmdreceive.Contains("已成功添加") || cmdreceive.Contains("当文件已存在时")) { YG.Log.Instance.WriteLogAdd($"启动HttpServer 默认添加允许项:{cmdreceive}成功"); } else { YG.Log.Instance.WriteLogAdd($"启动HttpServer 默认添加允许项:{cmdreceive}失败"); } System.Threading.Thread.Sleep(500); HttpListener listener = new HttpListener(); listener.Prefixes.Add(HttpServerUrlString); listener.Start(); EasyModbusClient.util.CommonUtil.WriteAccessLog(DateTime.Now + ">>>监听服务启动Listening>>>>"); Task task = Task.Factory.StartNew(async () => { while (listener.IsListening) { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; try { Servlet servlet = new MyServlet(); servlet.onCreate(); if (!request.Url.ToString().Contains("favicon")) { EasyModbusClient.util.CommonUtil.WriteAccessLog(DateTime.Now + ">>>任务请求开始>>>>===" + request.Url); if (request.HttpMethod == "POST") { Stream stream = context.Request.InputStream; StreamReader reader = new System.IO.StreamReader(stream, Encoding.UTF8); string body = reader.ReadToEnd(); EasyModbusClient.util.CommonUtil.WriteAccessLog(DateTime.Now + ">>>===收到POST数据 : >>>>===" + body); System.Console.WriteLine(DateTime.Now + ">>>===收到POST数据 : >>>>===" + body); CcsRequestBody ccsRequestBody = (CcsRequestBody)JsonJavaScriptSerializer.FromJSON(body); if (body.Contains("开")) { IsRun = true; //send(response, -4, "LHT"); } else if (body.Contains("关")) { IsRun = false; // send(response, -3, "LHT"); } if (IsRun) { if (body.Contains("MachineName")) { ItemHttpPostDefaultList itemHttpPostDefaultList = Newtonsoft.Json.JsonConvert.DeserializeObject(body); if (itemHttpPostDefaultList.JsonOK) { } // break; } } //CcsRequestBody ccsRequestBody = (CcsRequestBody)JsonJavaScriptSerializer.FromJSON(body); //string url = (ccsRequestBody.Url + ":" + ccsRequestBody.Port); //string businessType = ccsRequestBody.BusinessType; //ConnectDeviceInfo conDeviceInfo = (util.CommonUtil.GetConnectDeviceInfo(url)); //ResponseBody responseBody = new ResponseBody(); //responseBody.Code = 0; //responseBody.Msg = util.Constants.OPERATE_SUCCESS_MSG; //response.StatusCode = 200; //response.ContentType = "application/json;charset=UTF-8"; //response.ContentEncoding = Encoding.UTF8; //response.AppendHeader("Content-Type", "application/json;charset=UTF-8"); //if (conDeviceInfo != null) //{ // ModbusClient server = conDeviceInfo.server; // if (!string.IsNullOrEmpty(businessType)) // { // responseBody = WriteValue(conDeviceInfo, businessType, true); // } // else // { // responseBody.Msg = util.Constants.PARA_ERROR_MSG; // responseBody.Code = util.Constants.RET_FAILURE_CODE; // } // //加入回调任务队列 // ccsRequestBody.Data = responseBody.Code + ""; // util.CommonUtil.RequestTaskList(ccsRequestBody); // var serializerSettings = new JsonSerializerSettings() // { // // 设置为驼峰命名 // ContractResolver = new CamelCasePropertyNamesContractResolver() // }; // using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8)) // { // writer.Write(JsonConvert.SerializeObject(responseBody, Formatting.Indented, serializerSettings)); // writer.Close(); // response.Close(); // } //} } } } catch (Exception ex) { EasyModbusClient.util.CommonUtil.WriteAccessLog(DateTime.Now + ">>>===HTTP Server监听器异常 {0}信息 : >>>>===" + ex.ToString()); listener.Stop(); HttpServer(); } } }); task.Wait(); } } }