123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883 |
- using HeidenhainDNCLib;
- using IMCS.HeidenHain;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using HEIDENHAIN.body;
- using System.Net.NetworkInformation;
- using System.Diagnostics.PerformanceData;
- using Newtonsoft.Json.Linq;
- using System.Reflection;
- using System.Security.Cryptography;
- namespace HEIDENHAIN
- {
- public partial class Form1 : Form
- {
- private int iChannel = 0;
- //private string RemotePath = "TNC:\\nc_prog\\ATUO";//ConfigurationManager.AppSettings["RemotePath"];
- private string RemotePath = "TNC:\\SMG80SKCX";//ConfigurationManager.AppSettings["RemotePath"];
- //连接设备列表
- public Dictionary<string, DNC_STATE> deviceList { get; set; } = new Dictionary<string, DNC_STATE>();
- private DNC_STATE m_ControlState;
- public Dictionary<string, JHMachineInProcess> machineList { get; set; } = new Dictionary<string, JHMachineInProcess>();
- //private JHMachineInProcess Machine = new JHMachineInProcess();
- // private JHAutomatic m_Automatic = null;
- // private JHFileSystem m_FileSystem = null;
- //private JHProcessData m_ProcessData = null;
- //private JHError m_Error = null;
-
- string Http_Request_Url = "http://127.0.0.1:8011/heidenhain/";
- 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
- }
- /// <summary>
- /// 监听的线程
- /// </summary>
- /// <param name="ob"></param>
- 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)
- {
- }
- Thread.Sleep(10);
- }
- }
- /// <summary>
- /// 回调函数
- /// </summary>
- /// <param name="ar"></param>
- private void acceptCallback(IAsyncResult ar)
- {
- try
- {
- context = ((HttpListener)ar.AsyncState).EndGetContext(ar);
- }
- catch (Exception)
- {
- autoConnectEvent.Set();
- }
- if (context != null)
- {
- RecvAndSend(context);//触发我们一开始声明的事件
- autoConnectEvent.Set();
- }
- }
- /// <summary>
- /// 接听到消息的方法
- /// </summary>
- /// <param name="cont"></param>
- private void HttpListen_RecvAndSend(HttpListenerContext cont)
- {
- HttpListenerRequest request = cont.Request;
- HttpListenerResponse response = context.Response;
- Servlet servlet = new MyServlet();
- servlet.onCreate();
- if (request.HttpMethod == "POST")
- {
- if (!request.Url.ToString().Contains("favicon"))
- {
- ResponseBody responseBody = new ResponseBody();
- string body = null;
- RequestBody hdhBody =null;
- try
- {
- Stream stream = context.Request.InputStream;
- StreamReader reader = new StreamReader(stream, Encoding.UTF8);
- body = reader.ReadToEnd();
- //YG.Log.Instance.WriteLogAdd(">>>===收到POST数据 : >>>>===" + body);
- hdhBody = JsonConvert.DeserializeObject<RequestBody>(body);
- AddList(DateTime.Now.ToString(), "POST", hdhBody.ServerUrl + ":设备:" + hdhBody.MachineName, "OK:数据接受");
- if (hdhBody.Type == ActionTypeEnum.Connect.ToString())
- {
- Ping pingSender = new Ping();
- PingReply reply = pingSender.Send(hdhBody.ServerUrl);
- if (reply.Status != IPStatus.Success)
- {
- responseBody.result = false;
- }
- }
- else
- {
- //第一次连接加入数组,以支持多台设备
- if (deviceList == null || (deviceList.Where(m => m.Key == hdhBody.MachineName).Count() == 0))
- {
- m_ControlState = connect(hdhBody.MachineName);
- //DNC连接正常,加入数组
- if (m_ControlState.ToString() == "DNC_STATE_MACHINE_IS_AVAILABLE")
- {
- deviceList.Add(hdhBody.MachineName, m_ControlState);
- }
- Thread.Sleep(500);
- }
- else
- {
- //取设备对应的状态
- m_ControlState = deviceList.Where(m => m.Key == hdhBody.MachineName).FirstOrDefault().Value;
- }
- // ping 不通则位离线状态
- Ping pingSender = new Ping();
- PingReply reply = pingSender.Send(hdhBody.ServerUrl,500);
- if (reply.Status != IPStatus.Success)
- {
- m_ControlState = DNC_STATE.DNC_STATE_NOT_INITIALIZED;
- }
- if (m_ControlState != null && m_ControlState.ToString() == "DNC_STATE_MACHINE_IS_AVAILABLE")
- {
- JHMachineInProcess Machine = machineList.Where(m => m.Key == hdhBody.MachineName).FirstOrDefault().Value;
- JHError m_Error = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHERROR);
- JHErrorEntry2List errorsList = m_Error.GetErrorList();
- IJHErrorEntry2 pErrorEntry = null;
- for (int i = 0; i < errorsList.Count; i++)
- {
- pErrorEntry = errorsList[i];
- if (pErrorEntry != null && pErrorEntry.Text != null)
- {
- //Console.WriteLine("===" + pErrorEntry.Text.ToString());
- responseBody.errorsInfo += pErrorEntry.Text.ToString() + " ";
- }
- }
- if (hdhBody.Type == ActionTypeEnum.Collect.ToString())
- {
- JHAutomatic m_Automatic = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHAUTOMATIC);
- JHProcessData m_ProcessData = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHPROCESSDATA);
- object pFeed = new object();
- object pSpeed = new object();
- object pRapid = new object();
- object proStatus = new object();
- //进出倍率 主轴倍率
- m_Automatic.GetOverrideInfo(ref pFeed, ref pSpeed, ref pRapid);
- m_Automatic.GetExecutionMode();
- DNC_STS_PROGRAM dncProgram = m_Automatic.GetProgramStatus();
- RunDatasInfo runDatasInfo = new RunDatasInfo();
- runDatasInfo.feedRate = pFeed.ToString();
- runDatasInfo.spindleMagnification = pSpeed.ToString();
- runDatasInfo.spindleSpeed = pRapid.ToString();
- responseBody.runDatasInfo = JsonConvert.SerializeObject(runDatasInfo);
- object oHours = new object();
- object oMinutes = new object();
- // --- NC uptime --------------------------------------------------------------------------
- m_ProcessData.GetNcUpTime(ref oHours, ref oMinutes);
- string ncUpTime = oHours.ToString() + ":" + (Convert.ToInt32(oMinutes) > 9 ? oMinutes.ToString() : ("0" + oMinutes.ToString()));
- // --- Machine uptime ---------------------------------------------------------------------
- m_ProcessData.GetMachineUpTime(ref oHours, ref oMinutes);
- string machineUpTime = oHours.ToString() + ":" + (Convert.ToInt32(oMinutes) > 9 ? oMinutes.ToString() : ("0" + oMinutes.ToString()));
- // --- Machine running time ---------------------------------------------------------------
- m_ProcessData.GetMachineRunningTime(ref oHours, ref oMinutes);
- string runningTimes = oHours.ToString() + ":" + (Convert.ToInt32(oMinutes) > 9 ? oMinutes.ToString() : ("0" + oMinutes.ToString()));
- }
- else if (hdhBody.Type == ActionTypeEnum.Upload.ToString())
- {
- JHFileSystem m_FileSystem = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHFILESYSTEM);
- JHAutomatic m_Automatic = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHAUTOMATIC);
- string sSelectedFile = Path.GetFileName(hdhBody.Path);
- string dncPath = null;
- string tempDncPath = RemotePath + "\\2.h";
- //防止地址内容累加
- string newRemotePath = null;
- if (hdhBody.Address != "")
- {
- newRemotePath = RemotePath + "\\" + hdhBody.Address;
- }
- //上传
- dncPath = GenPath(RemotePath, sSelectedFile);
- //设置临时程序为主程序
- m_Automatic.SelectProgram(iChannel, tempDncPath);
- try
- { //删除上传文件,try异常防止文件不存在
- //m_FileSystem.DeleteFile(dncPath);
- }
- catch (Exception edel)
- {
- }
- YG.Log.Instance.WriteLogAdd($"海德汉nc上传位置--->>" + dncPath, "海德汉nc上传");
- //上传
- m_FileSystem.TransmitFile(hdhBody.Path, dncPath);
- //设当前上传程序为主程序
- m_Automatic.SelectProgram(iChannel, dncPath);
- }
- else if (hdhBody.Type == ActionTypeEnum.DeleteNc.ToString())
- {
- JHFileSystem m_FileSystem = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHFILESYSTEM);
- string dncPath = GenPath(RemotePath, hdhBody.Path);
- m_FileSystem.DeleteFile(dncPath);
- }
- else if (hdhBody.Type == ActionTypeEnum.SelectNcProgram.ToString())//选中程序
- {
- JHAutomatic m_Automatic = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHAUTOMATIC);
- string dncPath = GenPath(RemotePath, hdhBody.Path);
- YG.Log.Instance.WriteLogAdd($"海德汉设置nc--->>" + dncPath, "海德汉机床nc设置");
- m_Automatic.SelectProgram(iChannel, dncPath);
- }
- else if (hdhBody.Type == ActionTypeEnum.StartNcProgram.ToString())//启动程序备用
- {
- JHAutomatic m_Automatic = Machine.GetInterface(DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHAUTOMATIC);
- //m_Automatic.SelectProgram(iChannel, GenPath(RemotePath, hdhBody.Path));
- //Thread.Sleep(1000);
- string sSelectedFile = Path.GetFileName(hdhBody.Path);
- string bstrProgramName = GenPath(RemotePath, sSelectedFile);
- YG.Log.Instance.WriteLogAdd($"海德汉执行启动--->>" + bstrProgramName, "海德汉机床启动");
- m_Automatic.StartProgram(bstrProgramName);
- }
- else if (hdhBody.Type == ActionTypeEnum.Read.ToString())
- {
- }
- else if (hdhBody.Type == ActionTypeEnum.Write.ToString())
- {
- }
- else if (hdhBody.Type == ActionTypeEnum.ToolList.ToString())
- {
- IJHDataEntry2 ToolLine = null;
- IJHDataEntry2List ToolCells = null;
- //IJHDataEntry2 ToolCell = null;
- List<ToolsInfo> toolsList = new List<ToolsInfo>();
- JHDataAccess dataAccess = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
- dataAccess.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
- //string ToolColumnNamesAccessor = @"\TABLE\TOOL\T\('1'-'50')"; // see Init()
- string ToolColumnNamesAccessor = @"\TABLE\TOOL_P\T\('1'-'50')";
- IJHDataEntry2 ToolTable = dataAccess.GetDataEntry2(ToolColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- IJHDataEntry2List ToolLines = ToolTable.GetChildList();
- int ToolLinesCount = ToolLines.Count >= 50 ? 50 : ToolLines.Count;
- //int ToolLinesCount = ToolLines.Count;
- for (int i = 0; i < ToolLinesCount; i++)
- {
- ToolLine = ToolLines[i];
- ToolCells = ToolLine.GetChildList();
- // get child list from server
- ToolsInfo toolsInfo = new ToolsInfo();
- //刀位编码
- int[] pCode = ToolCells[0].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- toolsInfo.position = string.Join(".", pCode);
- toolsInfo.number = ToolCells[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- toolsInfo.name = ToolCells[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- if (!String.IsNullOrEmpty(toolsInfo.name) && !String.IsNullOrEmpty(toolsInfo.number) && pCode.Length > 0 && pCode[1] > 0)
- {
- string ToolNumberAccessor = @"\TABLE\TOOL\T\" + toolsInfo.number.ToString();
- IJHDataEntry2List ToolList = dataAccess.GetDataEntry2(ToolNumberAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false).GetChildList();
- //报警期限
- toolsInfo.warnLife = ToolList[11].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- //刀具寿命目标值
- toolsInfo.targetLife = ToolList[12].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- //Cur_Time使用时间
- toolsInfo.curTime = ToolList[13].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- // 刀具锁定状态,
- toolsInfo.tl = ToolList[8].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- // 刀具使用完毕此刀位可以换刀,
- toolsInfo.doc = ToolList[14].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- toolsList.Add(toolsInfo);
- }
- }
- //获取海德汉的刀具寿命信息
- responseBody.toolsInfo = JsonConvert.SerializeObject(toolsList.Distinct().ToList());
- }
- else if (hdhBody.Type == ActionTypeEnum.ReadAndWriteTool.ToString())
- {
- //机外对刀仪数据
- JObject jsonObject = JObject.Parse(hdhBody.CutterData);
- // 返回的结果,数据
- var returnData = new Dictionary<string, object>();
- JHDataAccess dataAccess = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
- dataAccess.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
- /*刀具表数据修改*/
- //刀具表查询语句
- string ToolColumnNamesAccessor = @"\TABLE\TOOL\T\" + jsonObject.GetValue("cutterT");
- //刀具表数据
- IJHDataEntry2 ToolTable = dataAccess.GetDataEntry2(ToolColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- // 获取字段列表
- IJHDataEntry2List ToolLines = ToolTable.GetChildList();
- //设置刀具名-对应机床表name
- var data1 = ToolLines[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterName", data1);
- ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterName", out JToken cutterName) ? jsonObject.GetValue("cutterName") : "" , false);
- //刀具类型 - 对应机床TYP
- var data2 = ToolLines[13].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterTypDnc", data2);
- ToolLines[13].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTypDnc", out JToken cutterTypDnc) ? jsonObject.GetValue("cutterTypDnc") : "0", false);
- //刀具长度 - 对应机床 L
- var data3 = ToolLines[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterZl", data3);
- ToolLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterZl", out JToken cutterZl) ? jsonObject.GetValue("cutterZl") : "0", false);
- //刀具半径 - 对应机床R
- var data4 = ToolLines[3].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterXl", data4);
- ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterXl", out JToken cutterXl) ? jsonObject.GetValue("cutterXl") : "0", false);
- //刀具寿命 - 对应机床time1
- var data5 = ToolLines[10].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterTime1", data5);
- ToolLines[10].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTime1", out JToken cutterTime1) ? jsonObject.GetValue("cutterTime1") : "0", false);
- //刀具寿命 - 对应机床time2
- var data6 = ToolLines[11].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterTime2", data6);
- ToolLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTime2", out JToken cutterTime2) ? jsonObject.GetValue("cutterTime2") : "0", false);
- //PLC状态 - 对应机床
- var data7 = ToolLines[15].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterPlcBit", data7);
- ToolLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterPlcBit", out JToken cutterPlcBit) ? jsonObject.GetValue("cutterPlcBit") : "0", false);
- //刀具使用寿命,不允许超过该值 -- 对应机床
- var data8 = ToolLines[45].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("cutterOverTime", data8);
- ToolLines[45].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterOverTime", out JToken cutterOverTime) ? jsonObject.GetValue("cutterOverTime") : "0", false);
- //在刀具轴方向上的刀齿长
- var data9 = ToolLines[16].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("lcuts", data9);
- ToolLines[16].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("lcuts", out JToken lcuts) ? jsonObject.GetValue("lcuts") : "0", false);
- //准确定义刀具的切削刃正面宽度
- var data10 = ToolLines[46].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("rcuts", data10);
- ToolLines[46].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("rcuts", out JToken rcuts) ? jsonObject.GetValue("rcuts") : "0", false);
- //准确定义刀具的刀具可用长度
- var data11 = ToolLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("lu", data11);
- ToolLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("lu", out JToken lu) ? jsonObject.GetValue("lu") : "0", false);
- //准确定义刀具的刀颈半径
- var data12 = ToolLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("rn", data12);
- ToolLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("rn", out JToken rn) ? jsonObject.GetValue("rn") : "0", false);
- //最大的切入角度
- var data13 = ToolLines[19].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("angle", data13);
- ToolLines[19].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("angle", out JToken angle) ? jsonObject.GetValue("angle") : "0", false);
- var data14 = ToolLines[31].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData.Add("nmax", data14);
- ToolLines[31].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("nmax", out JToken nmax) ? jsonObject.GetValue("nmax") : "0", false);
- // 如果没有子车刀类型,不需要往车刀表添加
- if (jsonObject.TryGetValue("cutterTypSubDnc", out JToken value))
- {
- /*车刀表数据设置更新*/
- // 车刀表数据查询语句
- string CheDaoColumnNamesAccessor = @"\TABLE\TOOLTURN\T\" + jsonObject.GetValue("cutterT");
- // 查询表数据
- IJHDataEntry2 CheDaoTable = dataAccess.GetDataEntry2(CheDaoColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- // 获取字段列表
- IJHDataEntry2List CheDaoLines = CheDaoTable.GetChildList();
- // 设置刀具名-对应机床表name
- CheDaoLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterName", out JToken cutterName_cd) ? jsonObject.GetValue("cutterName") : "", false);
- // 设置刀具在Z轴方向上的长度 - 对应机床 ZL
- var cdData1 = CheDaoLines[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterZl"] = cdData1;
- CheDaoLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterZl", out JToken cutterZl_cd) ? jsonObject.GetValue("cutterZl") : "0", false);
- // 车刀在X轴方向上的长度 - 对应机床XL
- var cdData2 = CheDaoLines[3].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterXl"] = cdData2;
- CheDaoLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterXl", out JToken cutterXl_cd) ? jsonObject.GetValue("cutterXl") : "0", false);
- // 车刀在y轴方向上的长度 - 对应机床yL
- var cdData3 = CheDaoLines[4].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterYl"] = cdData3;
- CheDaoLines[4].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterYl", out JToken cutterYl_cd) ? jsonObject.GetValue("cutterYl") : "0", false);
- // 切削刃半径 - 对应机床rs
- var cdData4 = CheDaoLines[8].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterRs"] = cdData4;
- CheDaoLines[8].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterRs", out JToken cutterRs_cd) ? jsonObject.GetValue("cutterRs") : "0", false);
- // 设置车刀子类型
- var cdData5 = CheDaoLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterTypSubDnc"] = cdData5;
- CheDaoLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTypSubDnc", out JToken cutterTypSubDnc_cd) ? jsonObject.GetValue("cutterTypSubDnc") : "", false);
- // 车刀方向 TO 刀具定向?
- var cdData6 = CheDaoLines[10].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterTo"] = cdData6;
- CheDaoLines[10].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTo", out JToken cutterTo_cd) ? jsonObject.GetValue("cutterTo") : "0", false);
- //刀具长度1的差值
- var cdData7 = CheDaoLines[5].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["dzl"] = cdData7;
- CheDaoLines[5].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dzl", out JToken dzl_cd) ? jsonObject.GetValue("dzl") : "0", false);
- //刀具长度2的差值
- var cdData8 = CheDaoLines[6].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["dxl"] = cdData8;
- CheDaoLines[6].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dxl", out JToken dxl_cd) ? jsonObject.GetValue("dxl") : "0", false);
- //刀具长度3的差值
- var cdData9 = CheDaoLines[7].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["dyl"] = cdData9;
- CheDaoLines[7].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dyl", out JToken dyl_cd) ? jsonObject.GetValue("dyl") : "0", false);
- //刀具半径的差值
- var cdData10 = CheDaoLines[9].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["drs"] = cdData10;
- CheDaoLines[9].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("drs", out JToken drs_cd) ? jsonObject.GetValue("drs") : "0", false);
- //开槽刀宽度的差值
- var cdData11 = CheDaoLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["dcw"] = cdData11;
- CheDaoLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dcw", out JToken dcw_cd) ? jsonObject.GetValue("dcw") : "0", false);
- // 主轴定向角 0ri
- var cdData12 = CheDaoLines[11].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutterOri"] = cdData12;
- CheDaoLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterOri", out JToken cutterOri_cd) ? jsonObject.GetValue("cutterOri") : "0", false);
- // 下刀角
- var cdData13 = CheDaoLines[16].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["tangle"] = cdData13;
- CheDaoLines[16].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("tangle", out JToken tangle_cd) ? jsonObject.GetValue("tangle") : "0", false);
- // 刀尖角
- var cdData14 = CheDaoLines[15].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["pangle"] = cdData14;
- CheDaoLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("pangle", out JToken pangle_cd) ? jsonObject.GetValue("pangle") : "0", false);
- // 切槽刀的切削长度
- var cdData15 = CheDaoLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutlength"] = cdData15;
- CheDaoLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutlength", out JToken cutlength_cd) ? jsonObject.GetValue("cutlength") : "0", false);
- // 切槽刀的切削长度
- var cdData16 = CheDaoLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- returnData["cutwidth"] = cdData16;
- CheDaoLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutwidth", out JToken cutwidth_cd) ? jsonObject.GetValue("cutwidth") : "0", false);
- }
- /*刀位表数据设置更新*/
- //刀位表数据查询语句
- string writeOrDel = jsonObject.GetValue("writeOrDel").ToString();
- string DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\" + jsonObject.GetValue("cutterP");
- if (writeOrDel == "2") {
- DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\T\" + jsonObject.GetValue("cutterT");
- }
- // 查询表数据
- IJHDataEntry2 DaoWeiTable = dataAccess.GetDataEntry2(DaoWeiColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- // 获取字段列表
- IJHDataEntry2List DaoWeiLines = DaoWeiTable.GetChildList();
- // 设置刀号
- DaoWeiLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterT", out JToken cutterT_dw) ? jsonObject.GetValue("cutterT") : "0", false);
- // 设置刀具名
- DaoWeiLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterT", out JToken cutterName_dw) ? jsonObject.GetValue("cutterName") : "", false);
- responseBody.msg = "数据设置成功";
- responseBody.returnData = JsonConvert.SerializeObject(returnData);
- responseBody.result = true;
- }
- else if (hdhBody.Type == ActionTypeEnum.WriteDeviationValue.ToString())
- { // 给机床写偏差值
- JObject jsonObject = JObject.Parse(hdhBody.DeviationValue);
- JHDataAccess dataAccess1 = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
- dataAccess1.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
- //*偏差值表数据修改*//*
- //偏差值表查询语句
- string ToolColumnNamesAccessor1 = @"\TABLE\HAN121601\NR\'1'";
- //偏差值表数据
- IJHDataEntry2 ToolTable = dataAccess1.GetDataEntry2(ToolColumnNamesAccessor1, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- // 获取字段列表
- IJHDataEntry2List ToolLines = ToolTable.GetChildList();
- //设置偏差值,先设置偏差值为零
- ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[4].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[5].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[6].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 0, false);
- ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactXaxisOffset"), false);
- ToolLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactYaxisOffset"), false);
- ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactZaxisOffset"), false);
- ToolLines[4].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactAaxisOffset"), false);
- ToolLines[5].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactBaxisOffset"), false);
- ToolLines[6].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("exactCaxisOffset"), false);
- // 校验偏差值
- Thread.Sleep(50);
- Boolean checkThrough = true;
- string isreason = null;
- var data1 = ToolLines[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data1 != Convert.ToDouble(jsonObject.GetValue("exactXaxisOffset"))) { checkThrough = false; isreason = "exactXaxisOffset"; }
- var data2 = ToolLines[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data2 != Convert.ToDouble(jsonObject.GetValue("exactYaxisOffset"))) { checkThrough = false; isreason = "exactYaxisOffset"; }
- var data3 = ToolLines[3].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data3 != Convert.ToDouble(jsonObject.GetValue("exactZaxisOffset"))) { checkThrough = false; isreason = "exactZaxisOffset"; }
- var data4 = ToolLines[4].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data4 != Convert.ToDouble(jsonObject.GetValue("exactAaxisOffset"))) { checkThrough = false; isreason = "exactAaxisOffset"; }
- var data5 = ToolLines[5].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data5 != Convert.ToDouble(jsonObject.GetValue("exactBaxisOffset"))) { checkThrough = false; isreason = "exactBaxisOffset"; }
- var data6 = ToolLines[6].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- if (data6 != Convert.ToDouble(jsonObject.GetValue("exactCaxisOffset"))) { checkThrough = false; isreason = "exactCaxisOffset"; }
- if (!checkThrough)
- {
- responseBody.msg = "数据校验不成功,异常字段"+ isreason;
- responseBody.result = false;
- }
- else {
- responseBody.msg = "数据设置成功";
- responseBody.result = true;
- }
- }
- else if (hdhBody.Type == ActionTypeEnum.ReadProbeData.ToString())
- {
- IJHDataEntry2 ToolLine = null;
- IJHDataEntry2List ToolCells = null;
- JHDataAccess dataAccess = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
- dataAccess.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
- /*探头检测结果表数据修改*/
- //探头检测结果表查询语句
- string ToolColumnNamesAccessor = @"\TABLE\TOOL_P\P\('1'-'50')";
- //探头检测结果表数据
- IJHDataEntry2 ToolTable = dataAccess.GetDataEntry2(ToolColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
- // 获取字段列表
- IJHDataEntry2List ToolLines = ToolTable.GetChildList();
- int ToolLinesCount = ToolLines.Count >= 50 ? 50 : ToolLines.Count;
- for (int i = 0; i < ToolLinesCount; i++)
- {
- ToolLine = ToolLines[i];
- ToolCells = ToolLine.GetChildList();
- // get child list from server
- ToolsInfo toolsInfo = new ToolsInfo();
- //刀位编码
- int[] pCode = ToolCells[0].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
- toolsInfo.position = string.Join(".", pCode);
- toolsInfo.number = ToolCells[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- toolsInfo.name = ToolCells[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA).ToString();
- YG.Log.Instance.WriteLogAdd($"海德汉读取探头检测数据--->>" + JsonConvert.SerializeObject(toolsInfo), "海德汉机床探头检测数据");
- }
- }
- }
- else
- {
- responseBody.msg = m_ControlState.ToString();
- responseBody.result = false;
- deviceList.Remove(hdhBody.MachineName);
- machineList.Remove(hdhBody.MachineName);
- }
- }
- }
- catch (Exception opcex)
- {
- YG.Log.Instance.WriteLogAdd($"海德汉响应异常--->>" + opcex.Message);
- AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), "响应异常:" + opcex.Message);
- responseBody.result = false;
- responseBody.msg = opcex.Message;
- //发生异常,清空数组,重新连接
- deviceList = new Dictionary<string, DNC_STATE>();
- machineList = new Dictionary<string, JHMachineInProcess>();
- }
- finally {
- AddList(DateTime.Now.ToString(), "POST", hdhBody.ServerUrl + ":响应数据:" + responseBody.toolsInfo, responseBody.result ? "OK,消息消费成功" : "失败,消息消费失败" + m_ControlState != null ? m_ControlState.ToString() : "");
- 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();
- }
- }
- }
- }
- else 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"];
- AddList(DateTime.Now.ToString(), "GET", ip + port + fun, "OK");
- }
- response.Close();
- }
-
-
- }
-
- private DNC_STATE connect(string connectName)
- {
- DNC_CNC_TYPE CncType ;
- IJHConnectionList connectionList = null;
- IJHConnection connection = null;
- try
- {
- JHMachineInProcess Machine = null;
- //第一次连接加入数组,以支持多台设备
- if (machineList == null || (machineList.Where(m => m.Key == connectName).Count() == 0))
- {
- Machine = new JHMachineInProcess();
- //DNC连接正常,加入数组
- machineList.Add(connectName, Machine);
- Thread.Sleep(20);
- }
- else
- {
- //取对应设备
- Machine = machineList.Where(m => m.Key == connectName).FirstOrDefault().Value;
- }
- Machine.ConnectRequest(connectName);
- string sCurrentMachine = Machine.currentMachine;
- // Find out control type
- connectionList = Machine.ListConnections();
- for (int i = 0; i < connectionList.Count; i++)
- {
- connection = connectionList[i];
- if (connection.name == sCurrentMachine)
- {
- CncType = connection.cncType;
- }
- if (connection != null)
- Marshal.ReleaseComObject(connection);
- }
- return Machine.GetState();
- }
- catch (COMException cex)
- {
- return DNC_STATE.DNC_STATE_NOT_INITIALIZED;
- }
- catch (Exception ex)
- {
- return DNC_STATE.DNC_STATE_NOT_INITIALIZED;
- }
- finally
- {
- if (connectionList != null)
- Marshal.ReleaseComObject(connectionList);
- if (connection != null)
- Marshal.ReleaseComObject(connection);
- }
- }
- private string GenPath(string part1, string part2)
- {
- string sFullPath = part1;
- switch (part2)
- {
- case ".":
- break;
- case "..":
- if (part1.EndsWith(@"\") && part1.Length > 5)
- part1 = part1.Substring(0, part1.Length - 3);
- int iLastFolderPos = part1.LastIndexOf(@"\");
- if (iLastFolderPos >= 0)
- sFullPath = part1.Substring(0, iLastFolderPos + 1);
- break;
- default:
- if (part1.EndsWith(@"\"))
- sFullPath = part1 + part2;
- else
- sFullPath = part1 + @"\" + part2;
- break;
- }
- return sFullPath;
- }
- 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 > 100)
- {
- 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);
- }
- }
- }
- }
|