master
handefeng 7 months ago
parent eb507fdbec
commit e0f699bbb8
  1. 0
      Libs/AlgorithmServer.dll
  2. 15
      Model/Entity/ApiEntity/ImageCollectionResult.cs
  3. 16
      Model/Entity/ApiEntity/StatusCodes.cs
  4. 54
      Model/Services/AlgorithmServer.cs
  5. 20
      Model/Services/SOCClientService.cs

@ -0,0 +1,15 @@
namespace SparkClient.Model.Common;
public class ImageCollectionResult
{
/// <summary>
/// 状态码
/// </summary>
public string Status { get; set; }
/// <summary>
/// 图片名称列表
/// </summary>
public List<string> Images { get; set; }
}

@ -6,27 +6,27 @@
public static class StatusCodes
{
// 成功
public const string S000 = "S000";
public const string Success = "S000";
// 采图正在进行中
public const string S001 = "S001";
public const string InProgress = "S001";
// 缓存图片被清理(读取不够及时)
public const string S002 = "S002";
public const string CacheCleared = "S002";
// 无法向单片机发送指令
public const string S003 = "S003";
public const string CannotSendCommand = "S003";
// 单片机访问超时
public const string S004 = "S004";
public const string MicrocontrollerTimeout = "S004";
// 单片机返回错误码
public const string S005 = "S005";
public const string MicrocontrollerError = "S005";
// 未找到切工仪
public const string P001 = "P001";
public const string DeviceNotFound = "P001";
// 算法调用失败
public const string P002 = "P002";
public const string AlgorithmFailed = "P002";
}
}

@ -1,35 +1,28 @@
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using HandyControl.Controls;
using HandyControl.Tools;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using MessageBox = HandyControl.Controls.MessageBox;
namespace SparkClient.Model.Services
{
public class AlgorithmServer
{
// 使用 P/Invoke 声明 C++ 函数
[DllImport("D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)]
[DllImport("../../../Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern double Add(double a, double b);
[DllImport("D:D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)]
[DllImport("../../../Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern double Multiply(double a, double b);
// 导入 C++ DLL 中的 ParseJsonAndReturnActions 函数
[DllImport("D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
[DllImport("../../../Libs/AlgorithmServer.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr ParseJsonAndReturnActions(byte[] jsonData);
public AlgorithmServer()
// 添加公共方法供外部调用
public string CallParseJsonAndReturnActions(JObject jsonData)
{
string jsonDataString = jsonData.ToString();
byte[] jsonDataBytes = System.Text.Encoding.UTF8.GetBytes(jsonDataString);
// 调用 C++ 函数进行加法运算
double resultAdd = Add(3.5, 4.5);
MessageBox.Show($"Add(3.5, 4.5) = {resultAdd}");
@ -37,38 +30,17 @@ namespace SparkClient.Model.Services
// 调用 C++ 函数进行乘法运算
double resultMultiply = Multiply(3.5, 4.5);
MessageBox.Show($"Multiply(3.5, 4.5) = {resultMultiply}");
// 测试 JSON 数据
// 定义并初始化 JObject
JObject jsonData = new JObject(
new JProperty("dataAttributes", new JArray(
new JObject(new JProperty("name", "你好")),
new JObject(new JProperty("name", "hello")),
new JObject(new JProperty("name", "666")),
new JObject(new JProperty("name", "是的")),
new JObject(new JProperty("name", "确认"))
))
);
// 将 JObject 序列化为字符串
string jsonDataString = jsonData.ToString();
// 将 JSON 字符串转换为字节数组
byte[] jsonDataBytes = System.Text.Encoding.UTF8.GetBytes(jsonDataString);
// 调用 C++ DLL 函数解析 JSON
IntPtr resultPtr = ParseJsonAndReturnActions(jsonDataBytes);
// 检查返回的指针是否为空
if (resultPtr != IntPtr.Zero)
{
string? result = Marshal.PtrToStringAnsi(resultPtr);
MessageBox.Show(result, "解析结果", MessageBoxButton.OK, MessageBoxImage.Information);
return Marshal.PtrToStringAnsi(resultPtr) ?? "解析结果为空";
}
else
{
MessageBox.Show("解析结果为空", "解析结果", MessageBoxButton.OK, MessageBoxImage.Warning);
return "解析结果为空";
}
}
}

@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows;
using HandyControl.Tools.Extension;
using SparkClient.Model.Common;
namespace SparkClient.Model.Services
{
@ -154,7 +155,7 @@ namespace SparkClient.Model.Services
/// <param name="lightLevel">光照级别</param>
/// <param name="savePath">图片保存路径</param>
/// <returns>操作结果</returns>
public async Task<string> ProcessImageCollectionAsync(int lightLevel, string savePath)
public async Task<ImageCollectionResult> ProcessImageCollectionAsync(int lightLevel, string savePath)
{
try
{
@ -167,10 +168,11 @@ namespace SparkClient.Model.Services
// 启动任务接口
string startStatus = await CollectImagesAsync(lightLevel);
if (startStatus != "S000")
// 成功
if (startStatus != StatusCodes.Success)
{
// 启动任务失败
return JsonConvert.SerializeObject(new { status = startStatus, images = new List<string>() });
return new ImageCollectionResult { Status = startStatus, Images = new List<string>() };
}
// 读取图片接口
@ -179,16 +181,15 @@ namespace SparkClient.Model.Services
{
// 采集状态接口
string acquisitionStatus = await CollectStatusAsync();
if (acquisitionStatus != "S000")
// 成功
if (acquisitionStatus != StatusCodes.Success)
{
// 采集状态失败
return JsonConvert.SerializeObject(new { status = acquisitionStatus, images = new List<string>() });
return new ImageCollectionResult { Status = acquisitionStatus, Images = new List<string>() };
}
}
// 按下载时间排序图片名称
return JsonConvert.SerializeObject(new { status = "S000", images = imageNames });
return new ImageCollectionResult { Status = StatusCodes.Success, Images = imageNames };
}
catch (Exception e)
{
@ -196,8 +197,7 @@ namespace SparkClient.Model.Services
// logger.Error(e, "发生异常");
string logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 发生异常: {e.Message}{Environment.NewLine}";
File.AppendAllText(LogFilePath, logMessage);
return JsonConvert.SerializeObject(new { status = "P001", images = new List<string>() });
return new ImageCollectionResult { Status = StatusCodes.DeviceNotFound, Images = new List<string>() };
}
}

Loading…
Cancel
Save