using FANUC; using Fanuc_HttpServer.fanuc; using Fanuc_HttpServer.hedidenain; using Fanuc_HttpServer.opcuaserver; using fanuc采集; using HttpServer.mazak; using HttpServer.mitsubishi; using Newtonsoft.Json; using RequestServer.HttpServer; using ResponseServer.HttpServer; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using static fanuc采集.ConDevice; namespace HttpServer { public partial class Form1 : Form { string FanucHttp_Request_Url = ConfigurationManager.AppSettings["FanucHttp_Request_Url"]; bool _contine = true;//用于线程循环 private AutoResetEvent autoConnectEvent = new AutoResetEvent(false);//此处需要调用System.Threading;用于触发等待的线程已发生的事件(连接) public delegate void RecvAndSendHandler(HttpListenerContext s);//此处需要调用System.Net用于请求和响应HttpListener类 public event RecvAndSendHandler RecvAndSend; AsyncCallback callback; HttpListenerContext context = null; private MazakServer mazakServer = new MazakServer(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.RecvAndSend += new RecvAndSendHandler(HttpListen_RecvAndSend); #region 添加监听的信息线程添加到线程池 WaitCallback wc = new WaitCallback(http_Listen); ThreadPool.QueueUserWorkItem(wc); label1.Text = "HttpServer已开启:" + FanucHttp_Request_Url; #endregion } /// /// 监听的线程 /// /// private void http_Listen(object ob) { callback = new AsyncCallback(acceptCallback); HttpListener httpListenner; httpListenner = new HttpListener(); httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous; httpListenner.Prefixes.Add(FanucHttp_Request_Url); httpListenner.Start(); while (_contine) { try { httpListenner.BeginGetContext(callback, httpListenner); autoConnectEvent.WaitOne(); } catch (Exception ex) { YG.Log.Instance.WriteLogAdd(">>>===服务异常 : >>>>===" + ex.Message); } Thread.Sleep(10); } } /// /// 回调函数 /// /// private void acceptCallback(IAsyncResult ar) { try { context = ((HttpListener)ar.AsyncState).EndGetContext(ar); } catch (Exception) { autoConnectEvent.Set(); } if (context != null) { RecvAndSend(context);//触发我们一开始声明的事件 autoConnectEvent.Set(); } } /// /// 接听到消息的方法 /// /// private void HttpListen_RecvAndSend(HttpListenerContext cont) { HttpListenerRequest request = cont.Request; HttpListenerResponse response = context.Response; Servlet servlet = new MyServlet(); servlet.onCreate(); try { if (request.HttpMethod == "GET") { response.Close(); } else if (request.HttpMethod == "POST") { try { Stream stream = context.Request.InputStream; StreamReader reader = new StreamReader(stream, Encoding.UTF8); string body = reader.ReadToEnd(); //YG.Log.Instance.WriteLogAdd(">>>===收到POST数据 : >>>>===" + body); ResponseBody responseBody = new ResponseBody(); RequestBody reqBody = JsonConvert.DeserializeObject>(body); if (reqBody.deviceType == DeviceTypeEnum.Fanuc.ToString()) { responseBody = FanucServer.requestHttpServer(reqBody); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), responseBody.msg); } else if (reqBody.deviceType == DeviceTypeEnum.Opcua.ToString()) { reqBody.userName = "OpcUaClient"; reqBody.password = "OPCUA123"; responseBody = new OpcUaServer().requestHttpServer(reqBody); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), responseBody.msg); } else if (reqBody.deviceType == DeviceTypeEnum.Heidenhain.ToString()) { responseBody = new HeidenhainServer().requestHttpServer(reqBody); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), responseBody.msg); } else if (reqBody.deviceType == DeviceTypeEnum.Mitsubishi.ToString()) { responseBody = new MitsubishiServer().requestHttpServer(reqBody); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), responseBody.msg); } else if (reqBody.deviceType == DeviceTypeEnum.Mazaka.ToString()) { responseBody = mazakServer.requestHttpServer(reqBody); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), responseBody.msg); } response.ContentType = "application/json;charset=UTF-8"; response.ContentEncoding = Encoding.UTF8; response.AppendHeader("Content-Type", "application/json;charset=UTF-8"); string retJsonData = JsonConvert.SerializeObject(responseBody); using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8)) { YG.Log.Instance.WriteLogAdd($"响应结果--->>{JsonConvert.SerializeObject(JsonConvert.SerializeObject(responseBody))}--->>{body}\r\n"); writer.Write(JsonConvert.SerializeObject(responseBody)); writer.Close(); response.Close(); } } catch (Exception opcex) { YG.Log.Instance.WriteLogAdd($"响应异常--->>" + opcex.Message); AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), opcex.Message); ResponseBody responseBody = new ResponseBody(); responseBody.result = false; response.Close(); } } } catch (Exception ex) { YG.Log.Instance.WriteLogAdd(">>>===服务异常 : >>>>===" + ex.Message); ResponseBody responseBody = new ResponseBody(); responseBody.result = false; response.Close(); } } public class DeviceInfo { public string MainProg { get; set; } public string CurProg { get; set; } public string Status { get; set; } public string Mode { get; set; } public string EMG { get; set; } public string ActFeed { get; set; } public string ActSpindle { get; set; } public string spindleMagnification { get; set; } public string SpindleLoad { get; set; } public string ServoLoadX { get; set; } public string ServoLoadY { get; set; } public string ServoLoadZ { get; set; } public string PowerOnTime { get; set; } public string AccumulateCuttingTime { get; set; } public string CuttingTimePerCycle { get; set; } public string WorkTime { get; set; } public string Part_Count { get; set; } public string IsAlarm { get; set; } public List AlmMsg { get; set; } public string ToolNo { get; set; } public string ToolLife { get; set; } } public class Servlet { public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response, string info) { } public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { } public virtual void onCreate() { } } public void AddList(string dtime, string type, string url, string res) { this.Invoke(new Action(delegate () { listView1.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 ListViewItem lvi = new ListViewItem(); lvi.Text = dtime; lvi.SubItems.Add(type); lvi.SubItems.Add(url); lvi.SubItems.Add(res); this.listView1.Items.Insert(0, lvi); if (this.listView1.Items.Count > 10) { this.listView1.Items.Clear(); } this.listView1.EndUpdate(); //结束数据处理,UI界面一次性绘制。} })); } public class MyServlet : Servlet { public override void onCreate() { //base.onCreate(); } public override void onGet(HttpListenerRequest request, HttpListenerResponse response, string info) { Console.WriteLine("GET:" + request.Url); byte[] buffer = Encoding.UTF8.GetBytes(info); //string sss = request.QueryString["ty"]; System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); // You must close the output stream. output.Close(); //listener.Stop(); } public override void onPost(HttpListenerRequest request, HttpListenerResponse response) { Console.WriteLine("POST:" + request.Url); byte[] res = Encoding.UTF8.GetBytes("OK"); response.OutputStream.Write(res, 0, res.Length); } } } }