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);
}
}
}
}