添加middleware

This commit is contained in:
2025-03-02 15:11:22 +08:00
parent 329f5c8310
commit 84ee8354c0
924 changed files with 112743 additions and 0 deletions

View File

@@ -0,0 +1,225 @@
using System;
using System.Net;
using System.Threading.Tasks;
using System.Windows;
using System.Linq;
using zdhsys;
using Newtonsoft.Json;
using System.IO;
using System.Text;
using System.Windows.Shapes;
using Newtonsoft.Json.Linq;
namespace zdhsys
{
public partial class App : Application
{
private HttpListener _listener;
private Task _serverTask;
internal ExperimentData experimentData { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 启动HTTP服务器
StartHttpServer();
}
private void StartHttpServer()
{
_listener = new HttpListener();
_listener.Prefixes.Add("http://*:50000/");
_listener.Start();
_serverTask = Task.Run(() => HandleRequests());
}
private async Task HandleRequests()
{
while (_listener.IsListening)
{
var context = await _listener.GetContextAsync();
ProcessRequest(context);
}
}
private void ProcessRequest(HttpListenerContext context)
{
try
{
var request = context.Request;
var response = context.Response;
// 处理路由
if (request.Url.AbsolutePath == "/" && request.HttpMethod == "GET")
{
var responseString = "{\"message\": \"Welcome to AI robot platform API!\"}";
var buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentType = "application/json";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
else if (request.Url.AbsolutePath == "/sendScheme2RobotPlatform" && request.HttpMethod == "POST")
{
try
{
using (var reader = new System.IO.StreamReader(request.InputStream, request.ContentEncoding))
{
var json = reader.ReadToEnd();
Console.WriteLine("Received JSON data:");
Console.WriteLine(json);
// 更新实验数据
experimentData = JsonConvert.DeserializeObject<ExperimentData>(json);
Console.WriteLine("Experiment data updated:");
Console.WriteLine($"Task ID: {experimentData.TaskId}");
Console.WriteLine($"Experiment Name: {experimentData.ExperimentName}");
// 创建任务ID文件夹
string currentDirectory = Directory.GetCurrentDirectory();
string directoryPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(currentDirectory)), "PLdata", experimentData.TaskId);
Directory.CreateDirectory(directoryPath);
string jsonFilePath = System.IO.Path.Combine(directoryPath, "scheme.json");
try
{
// 将 JSON 字符串解析为 JObject
var jsonObject = JObject.Parse(json);
// 将对象序列化为格式化的 JSON 字符串(缩进为 2
string formattedJson = jsonObject.ToString(Formatting.Indented);
// 将格式化的 JSON 写入文件
File.WriteAllText(jsonFilePath, formattedJson);
Console.WriteLine($"JSON 已成功写入文件:{jsonFilePath}");
}
catch (Exception ex)
{
Console.WriteLine($"发生错误:{ex.Message}");
}
var responseString = "{\"status\": \"success\", \"message\": \"Experiment data updated\"}";
var buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentType = "application/json";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
catch (Exception ex)
{
response.StatusCode = (int)HttpStatusCode.BadRequest;
var errorResponse = new { error = ex.Message };
var buffer = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(errorResponse));
response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
else if (request.Url.AbsolutePath == "/getPLdata" && request.HttpMethod == "GET")
{
try
{
// 获取taskid参数
string taskId = experimentData.TaskId;
string currentDirectory = Directory.GetCurrentDirectory();
// 如果 taskId 为空,则尝试从 PLdata 文件夹中获取最新的日期文件夹
if (string.IsNullOrEmpty(taskId))
{
string plDataPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(currentDirectory)), "PLdata");
// 检查 PLdata 文件夹是否存在
if (!Directory.Exists(plDataPath))
{
Console.WriteLine("PLdata directory does not exist.");
return;
}
// 获取 PLdata 文件夹中的所有子文件夹
var directories = Directory.GetDirectories(plDataPath)
.Where(dir => DateTime.TryParse(System.IO.Path.GetFileName(dir), out _)) // 确保文件夹名是有效的日期格式
.Select(dir => new { Path = dir, Date = DateTime.Parse(System.IO.Path.GetFileName(dir)) })
.OrderByDescending(x => x.Date) // 按日期降序排序
.ToList();
if (directories.Any())
{
// 取最新日期的文件夹名称作为 taskId
taskId = System.IO.Path.GetFileName(directories.First().Path);
Console.WriteLine($"Latest taskid from folder: {taskId}");
}
else
{
Console.WriteLine("No valid date folders found in PLdata.");
return;
}
}
// 构建路径
string directoryPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(currentDirectory)), "PLdata", taskId);
Console.WriteLine($"Constructed directory path: {directoryPath}");
// 检查目录是否存在
if (!Directory.Exists(directoryPath))
{
response.StatusCode = (int)HttpStatusCode.NotFound;
var errorResponse = new { error = "Task directory not found" };
var buffer = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(errorResponse));
response.OutputStream.Write(buffer, 0, buffer.Length);
return;
}
// 获取最新的txt文件
var files = Directory.GetFiles(directoryPath, "*.TXT")
.Select(f => new FileInfo(f))
.OrderByDescending(f => f.LastWriteTime)
.ToList();
if (files.Count == 0)
{
response.StatusCode = (int)HttpStatusCode.NotFound;
var errorResponse = new { error = "No TXT files found" };
var buffer = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(errorResponse));
response.OutputStream.Write(buffer, 0, buffer.Length);
return;
}
// 读取最新文件内容
string latestFileContent = File.ReadAllText(files[0].FullName);
// 发送响应
var responseBuffer = Encoding.UTF8.GetBytes(latestFileContent);
response.ContentType = "text/plain";
response.ContentLength64 = responseBuffer.Length;
response.OutputStream.Write(responseBuffer, 0, responseBuffer.Length);
}
catch (Exception ex)
{
response.StatusCode = (int)HttpStatusCode.InternalServerError;
var errorResponse = new { error = ex.Message };
var buffer = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(errorResponse));
response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
else
{
response.StatusCode = (int)HttpStatusCode.NotFound;
}
}
finally
{
context.Response.OutputStream.Close();
}
}
protected override void OnExit(ExitEventArgs e)
{
// 关闭HTTP服务器
_listener?.Stop();
_listener?.Close();
base.OnExit(e);
}
}
}