AHTC/RGD/RGD.ZhiQianAPI/HttpServer.cs
2025-05-19 09:22:33 +08:00

174 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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