using FANUC; using fanuc采集; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; 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 Http_Request_Url = "http://127.0.0.1:5100/fanuc/"; 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; 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已开启:" + Http_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(Http_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") { { if (!request.Url.ToString().Contains("favicon")) { string ip = request.QueryString["ip"]; string port = request.QueryString["port"]; string fun = request.QueryString["fun"]; int ret = 0; ConDevice CIF = new ConDevice(); switch (fun) { #region case "All": ConDevice2 CIF2 = new ConDevice2(ip, port); DeviceInfo info = new DeviceInfo(); if (CIF2.h > 0) { info.MainProg = CIF2.MainProg(); info.CurProg = CIF2.MainProg(); info.Status = CIF2.Status(); info.EMG = CIF2.EMG(); info.ActFeed = CIF2.ActFeed(); info.ActSpindle = CIF2.ActSpindle(); info.SpindleLoad = CIF2.SpindleLoad(); info.spindleMagnification = CIF2.spindleMagnification(); info.ServoLoadX = CIF2.ServoLoadX(); info.ServoLoadY = CIF2.ServoLoadY(); info.ServoLoadZ = CIF2.ServoLoadZ(); info.PowerOnTime = CIF2.PowerOnTime(); info.AccumulateCuttingTime = CIF2.AccumulateCuttingTime(); info.CuttingTimePerCycle = CIF2.CuttingTimePerCycle(); info.WorkTime = CIF2.WorkTime(); info.Part_Count = CIF2.Part_Count(); string isalarm = ""; //info.AlmMsg = CIF2.AlmMsg(out isalarm); info.AlmMsg = CIF2.operationAlarm(); info.IsAlarm = isalarm; info.ToolNo = CIF2.ToolNo(); info.ToolLife = CIF2.ToolLife(); //info.ToolLife = CIF2.ToolLife(ip, port); string jsonalldata = JsonConvert.SerializeObject(info); CIF2.freehand(); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), jsonalldata); servlet.onGet(request, response, jsonalldata); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), CIF2.h.ToString()); servlet.onGet(request, response, CIF2.h.ToString()); } break; case "UploadFile": try { string prgname = request.QueryString["prgname"]; YG.Log.Instance.WriteLogAdd(">>>===上传文件名 : >>>>===" + prgname); ret = CIF.UploadNcProg(ip, port, prgname); if (ret == Fanuc.EW_OK) { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK"); servlet.onGet(request, response, "0"); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString()); servlet.onGet(request, response, ret.ToString()); } } catch (Exception uploadex) { servlet.onGet(request, response, uploadex.Message); } break; case "DeleteNCProgram": try { string prgname = request.QueryString["prgname"]; ret = CIF.DeleteNcProg(ip, port, prgname); if (ret == Fanuc.EW_OK) { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK"); servlet.onGet(request, response, "0"); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString()); servlet.onGet(request, response, ret.ToString()); } } catch (Exception uploadex) { servlet.onGet(request, response, uploadex.Message); } break; case "SelectNcProgram": try { string prgname = request.QueryString["prgname"]; YG.Log.Instance.WriteLogAdd(">>>===选择程序文件名 : >>>>===" + prgname); ret = CIF.SelectedNcProg(ip, port, prgname); if (ret == Fanuc.EW_OK) { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK"); servlet.onGet(request, response, "0"); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString()); servlet.onGet(request, response, ret.ToString()); } } catch (Exception uploadex) { servlet.onGet(request, response, uploadex.Message); } break; case "StartNCProgram": try { string prgname = request.QueryString["prgname"]; ret = CIF.ReadPmcMarco(ip, port, prgname); if (ret == Fanuc.EW_OK) { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK"); servlet.onGet(request, response, "0"); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString()); servlet.onGet(request, response, ret.ToString()); } } catch (Exception uploadex) { servlet.onGet(request, response, uploadex.Message); } break; // 读写NCDATA case "ReadNcdataMarco": string ncDateaddress = request.QueryString["address"]; int ReadncdataMarco = CIF.ReadMacroRange(ip, port, ncDateaddress); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ReadncdataMarco\": \"" + ReadncdataMarco + "\"}"); servlet.onGet(request, response, "{\"ReadncdataMarco\": \"" + ReadncdataMarco + "\"}"); break; // 读写G54工件坐标系 case "ReadWriteZofs": int ReadWriteZofs = CIF.ReadWriteZofs(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ReadWriteZofs\": \"" + ReadWriteZofs + "\"}"); servlet.onGet(request, response, "{\"ReadWriteZofs\": \"" + ReadWriteZofs + "\"}"); break; case "Connect":///连接测试 try { Ping pingSender = new Ping(); PingReply reply = pingSender.Send(ip); if (reply.Status!= IPStatus.Success) { ret = -16; } //retConnect = Fanuc.cnc_allclibhndl3(ip, Convert.ToUInt16(port), 2, out Fanuc.h); Thread.Sleep(100); } catch (Exception ex) { servlet.onGet(request, response, ex.Message); } if (ret == Fanuc.EW_OK) { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK"); servlet.onGet(request, response, "0"); } else { AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString()); servlet.onGet(request, response, ret.ToString()); } break; case "MainProg": string MainProg = CIF.MainProg(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"MainProg\": \"" + MainProg + "\"}"); servlet.onGet(request, response, "{\"MainProg\": \"" + MainProg + "\"}"); break; case "CurProg": string CurProg = CIF.MainProg(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"CurProg\": \"" + CurProg + "\"}"); servlet.onGet(request, response, "{\"CurProg\": \"" + CurProg + "\"}"); break; case "Status": string Status = CIF.Status(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Status\": \"" + Status + "\"}"); servlet.onGet(request, response, "{\"Status\": \"" + Status + "\"}"); break; case "Mode": string Mode = CIF.Mode(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Mode\": \"" + Mode + "\"}"); servlet.onGet(request, response, "{\"Mode\": \"" + Mode + "\"}"); break; case "EMG": string EMG = CIF.EMG(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"EMG\": \"" + EMG + "\"}"); servlet.onGet(request, response, "{\"EMG\": \"" + EMG + "\"}"); break; case "ActFeed": string ActFeed = CIF.ActFeed(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ActFeed\": \"" + ActFeed + "\"}"); servlet.onGet(request, response, "{\"ActFeed\": \"" + ActFeed + "\"}"); break; case "ActSpindle": string ActSpindle = CIF.ActSpindle(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ActSpindle\": \"" + ActSpindle + "\"}"); servlet.onGet(request, response, "{\"ActSpindle\": \"" + ActSpindle + "\"}"); break; case "ServoLoadX": string ServoLoadX = CIF.ServoLoadX(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadX\": \"" + ServoLoadX + "\"}"); servlet.onGet(request, response, "{\"ServoLoadX\": \"" + ServoLoadX + "\"}"); break; case "ServoLoadY": string ServoLoadY = CIF.ServoLoadY(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadY\": \"" + ServoLoadY + "\"}"); servlet.onGet(request, response, "{\"ServoLoadY\": \"" + ServoLoadY + "\"}"); break; case "ServoLoadZ": string ServoLoadZ = CIF.ServoLoadZ(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadZ\": \"" + ServoLoadZ + "\"}"); servlet.onGet(request, response, "{\"ServoLoadZ\": \"" + ServoLoadZ + "\"}"); break; case "PowerOnTime": string PowerOnTime = CIF.PowerOnTime(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"PowerOnTime\": \"" + PowerOnTime + "\"}"); servlet.onGet(request, response, "{\"PowerOnTime\": \"" + PowerOnTime + "\"}"); break; case "AccumulateCuttingTime": string AccumulateCuttingTime = CIF.AccumulateCuttingTime(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"AccumulateCuttingTime\": \"" + AccumulateCuttingTime + "\"}"); servlet.onGet(request, response, "{\"AccumulateCuttingTime\": \"" + AccumulateCuttingTime + "\"}"); break; case "CuttingTimePerCycle": string CuttingTimePerCycle = CIF.CuttingTimePerCycle(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"CuttingTimePerCycle\": \"" + CuttingTimePerCycle + "\"}"); servlet.onGet(request, response, "{\"CuttingTimePerCycle\": \"" + CuttingTimePerCycle + "\"}"); break; case "WorkTime": string WorkTime = CIF.WorkTime(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"WorkTime\": \"" + WorkTime + "\"}"); servlet.onGet(request, response, "{\"WorkTime\": \"" + WorkTime + "\"}"); break; case "Part_Count": string Part_Count = CIF.Part_Count(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Part_Count\": \"" + Part_Count + "\"}"); servlet.onGet(request, response, "{\"Part_Count\": \"" + Part_Count + "\"}"); break; case "ToolNo": string ToolNo = CIF.ToolNo(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ToolNo\": \"" + ToolNo + "\"}"); servlet.onGet(request, response, "{\"ToolNo\": \"" + ToolNo + "\"}"); break; case "ToolList": List tools = CIF.ToolLife(ip, port); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ToolLife\": \"" + tools + "\"}"); servlet.onGet(request, response, JsonConvert.SerializeObject(tools)); break; case "AlmInfo": try { List allAlmList = new List(); ConDevice2 con2 = new ConDevice2(ip, port); //实时报警 List alms = con2.operationAlarm(); //信息履历 List almLL = con2.rdalmhistry5(); if (alms != null && alms.Count() > 0) { allAlmList.AddRange(alms); } if (almLL != null && almLL.Count() > 0) { allAlmList.AddRange(almLL); } con2.freehand(); string jsonData = JsonConvert.SerializeObject(allAlmList); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"AlmInfo\": \"" + allAlmList.Count() + "\"}"); servlet.onGet(request, response, jsonData); } catch(Exception ex) { servlet.onGet(request, response, ex.Message); } break; case "IsAlarm": string state1 = ""; List s1 = CIF.AlmMsg(ip, port, out state1); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"IsAlarm\": \"" + state1 + "\"}"); servlet.onGet(request, response, "{\"IsAlarm\": \"" + state1 + "\"}"); break; case "NcList": List ncinfo = CIF.NcList(ip, port); string ncinfojson = JsonConvert.SerializeObject(ncinfo); AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"NcList\": \"" + ncinfojson + "\"}"); servlet.onGet(request, response, "{\"NcList\": \"" + ncinfojson + "\"}"); break; #endregion default: servlet.onGet(request, response, "无效的请求"); break; } } } response.Close(); } else if (request.HttpMethod == "POST") { } }catch(Exception ex) { YG.Log.Instance.WriteLogAdd(">>>===服务异常 : >>>>===" + ex.Message); } } 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); } } } }