174 lines
8.1 KiB
C#
174 lines
8.1 KiB
C#
|
using RGD.Common;
|
|||
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.Net;
|
|||
|
using System.Security.AccessControl;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace RGD.ZhiQianAPI
|
|||
|
{
|
|||
|
public class HttpServer
|
|||
|
{
|
|||
|
private static HttpListener httpobj;
|
|||
|
|
|||
|
public static void start()
|
|||
|
{
|
|||
|
httpobj = new HttpListener();
|
|||
|
//定义url及端口号,通常设置为配置文件
|
|||
|
var url = "http://192.168.0.203:17020/";
|
|||
|
httpobj.Prefixes.Add(url);
|
|||
|
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
httpobj.Start();
|
|||
|
}
|
|||
|
catch(Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine();
|
|||
|
}
|
|||
|
//异步监听客户端请求,当客户端的网络请求到来时会自动执行Result委托
|
|||
|
//该委托没有返回值,有一个IAsyncResult接口的参数,可通过该参数获取context对象
|
|||
|
httpobj.BeginGetContext(Result, null);
|
|||
|
}
|
|||
|
|
|||
|
public static void close()
|
|||
|
{
|
|||
|
httpobj.Close();
|
|||
|
}
|
|||
|
|
|||
|
private static void Result(IAsyncResult ar)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
httpobj.BeginGetContext(Result, null);
|
|||
|
var guid = Guid.NewGuid().ToString();
|
|||
|
var context = httpobj.EndGetContext(ar);
|
|||
|
var request = context.Request;
|
|||
|
var response = context.Response;
|
|||
|
context.Response.ContentEncoding = Encoding.UTF8;
|
|||
|
string returnObj = null;
|
|||
|
if (request.HttpMethod == "POST" && request.InputStream != null)
|
|||
|
{
|
|||
|
//Console.WriteLine(request.RawUrl);
|
|||
|
returnObj = HandleRequest(request, response);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
returnObj = "不是POST请求或传入数据有误";
|
|||
|
}
|
|||
|
|
|||
|
using (var stream = response.OutputStream)
|
|||
|
{
|
|||
|
//把处理信息返回到客户端
|
|||
|
response.AddHeader("Content-Type", "application/json");
|
|||
|
byte[] returnByteArr = Encoding.UTF8.GetBytes(returnObj);
|
|||
|
stream.Write(returnByteArr, 0, returnByteArr.Length);
|
|||
|
|
|||
|
stream.Close();
|
|||
|
string log = string.Format("WCS返回AGV接口时间{0}:\n{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), returnObj);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static string HandleRequest(HttpListenerRequest request, HttpListenerResponse response)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Stream stream = request.InputStream;
|
|||
|
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
|
|||
|
string content = reader.ReadToEnd();
|
|||
|
string log = string.Format("AGV调用WCS接口时间{0}:\n{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
switch (request.RawUrl)
|
|||
|
{
|
|||
|
case "/agv/requestDilivery":
|
|||
|
log = string.Format("AGV调用WCS 名称:requestDilivery 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var reqTakeModel = HandleAgvRequest.takeDiliveryRequest(content);
|
|||
|
return reqTakeModel;
|
|||
|
|
|||
|
case "/agv/confirmDilivery":
|
|||
|
log = string.Format("AGV调用WCS 名称:confirmDilivery 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var takeCompleteModel = HandleAgvRequest.takeDiliveryComplete(content);
|
|||
|
return takeCompleteModel;
|
|||
|
|
|||
|
case "/agv/requestStore":
|
|||
|
log = string.Format("AGV调用WCS 名称:requestStore 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var reqPutModel = HandleAgvRequest.putDiliveryRequest(content);
|
|||
|
return reqPutModel;
|
|||
|
|
|||
|
case "/agv/confirmStore":
|
|||
|
log = string.Format("AGV调用WCS 名称:confirmStore 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var putCompleteModel = HandleAgvRequest.putDiliveryComplete(content);
|
|||
|
return putCompleteModel;
|
|||
|
|
|||
|
case "/agv/BoxStatusNotify":
|
|||
|
log = string.Format("AGV调用WCS 名称:BoxStatusNotify 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var taskStatusModel = HandleAgvRequest.taskStatusHandle(content);
|
|||
|
return taskStatusModel;
|
|||
|
|
|||
|
case "/agv/BoxReleasedNotify":
|
|||
|
//case "/agv/BoxkReleasedNotify":
|
|||
|
log = string.Format("AGV调用WCS 名称:BoxReleasedNotify 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var conveyorPutModel = HandleAgvRequest.putComplete(content);
|
|||
|
return conveyorPutModel;
|
|||
|
|
|||
|
case "/agv/BoxTakenNotify":
|
|||
|
log = string.Format("AGV调用WCS 名称:BoxTakenNotify 接口时间{0}:\n,内容:{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), content);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
var conveyorTakeModel = HandleAgvRequest.takeComplete(content);
|
|||
|
return conveyorTakeModel;
|
|||
|
|
|||
|
default:
|
|||
|
return "";
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
response.StatusDescription = "404";
|
|||
|
response.StatusCode = 404;
|
|||
|
Console.WriteLine($"在接收数据时发生错误:{ex.ToString()}");
|
|||
|
return $"在接收数据时发生错误:{ex.ToString()}";//把服务端错误信息直接返回
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static string sendJsonToService(string url, string jsonmodel, string interfacename)
|
|||
|
{
|
|||
|
string log = string.Format("WCS调用AGV 名称{2} 接口时间{0}:\n{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), jsonmodel, interfacename);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
var wc = new WebClient();
|
|||
|
wc.Encoding = Encoding.UTF8;
|
|||
|
wc.Headers[HttpRequestHeader.ContentType]
|
|||
|
= "application/json";
|
|||
|
//wc.Headers[HttpRequestHeader.Authorization] = "767e4e1d144c7512f2c94d68e4236b61";
|
|||
|
wc.Headers.Add("appcode", "767e4e1d144c7512f2c94d68e4236b61");
|
|||
|
//wc.Encoding = System.Text.Encoding.GetEncoding("GB2312");
|
|||
|
var returnInfo = wc.UploadString(url, jsonmodel);
|
|||
|
|
|||
|
log = string.Format("AGV返回接口时间{0}:\n{1}\n", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss:fff"), returnInfo);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
|
|||
|
return returnInfo;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
log = string.Format("发送数据异常,异常信息为:{0}", ex.Message);
|
|||
|
LogUtil.WriteLogNoTime("D:\\AGV通讯日志", "", log);
|
|||
|
}
|
|||
|
return "";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|