From 559890c482f5973f06aafdfec9550fee5ba3c7f2 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 17:02:15 +0800
Subject: [PATCH] feat: CAN 模拟器 TCP 化 + 多设备并发调试 + 后台生命周期管理
---
Aging.Infrastructure/Contracts/IAutoDeviceFacade.cs | 88 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/Aging.Infrastructure/Contracts/IAutoDeviceFacade.cs b/Aging.Infrastructure/Contracts/IAutoDeviceFacade.cs
new file mode 100644
index 0000000..0162d3d
--- /dev/null
+++ b/Aging.Infrastructure/Contracts/IAutoDeviceFacade.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Aging.Infrastructure.Contracts
+{
+ /// <summary>
+ /// 鑷姩鍖栬澶囬棬闈細涓哄叏鑷姩娴嬭瘯绋嬪簭鎻愪緵"涓�娆¤皟鐢�/涓�娆′綔鐢ㄥ煙"鐨勮涔夛紝
+ /// 鍐呴儴灏佽璧勬簮棰勭害銆侀┍鍔ㄥ垎娲俱�佸璁°��
+ ///
+ /// 浣跨敤鍦烘櫙瀵规瘮锛�
+ /// 鎵嬪姩璋冭瘯锛圖eviceDebug锛夛細闇�瑕� UI 閫愭鎺у埗浼氳瘽鐘舵�侊紙ReadOnly 鈫� Maintenance锛夈��
+ /// 鍏ㄨ嚜鍔ㄦ祴璇曪紙TestStep锛夛細鍙叧蹇�"鍙戝懡浠ゆ嬁缁撴灉"锛屼笉甯屾湜鏆撮湶鐘舵�佹満銆�
+ /// 鏈帴鍙i潰鍚戝悗鑰呫��
+ /// </summary>
+ public interface IAutoDeviceFacade
+ {
+ /// <summary>
+ /// 涓�娆℃�ф墽琛岋細鍐呴儴鑷姩瀹屾垚 鐢宠绉熺害 鈫� 鎵撳紑浼氳瘽 鈫� 鎵ц 鈫� 鍏抽棴浼氳瘽 鈫� 閲婃斁绉熺害銆�
+ /// 閫傚悎鍗曟潯鍛戒护璋冪敤銆傚鏉″懡浠ゅ缓璁娇鐢� AcquireAsync 澶嶇敤绉熺害銆�
+ /// </summary>
+ Task<DeviceCommandResult> ExecuteAsync(
+ string deviceId, string command, CancellationToken ct = default);
+
+ /// <summary>
+ /// 涓�娆℃�ф煡璇細鍐呴儴鑷姩瀹屾垚瀹屾暣鐢熷懡鍛ㄦ湡銆�
+ /// </summary>
+ Task<DeviceCommandResult> QueryAsync(
+ string deviceId, string query, CancellationToken ct = default);
+
+ /// <summary>
+ /// 鐢宠浣滅敤鍩熺绾︼細鍗犵敤璁惧锛岃繑鍥� lease 鍙ユ焺銆�
+ /// using 缁撴潫鏃讹紙Dispose锛夎嚜鍔ㄥ叧浼氳瘽 + 閲婃斁绉熺害銆�
+ /// 鍚屼竴 lease 鍐呯殑澶氭璋冪敤鍏变韩鍚屼竴浠借祫婧愬崰鐢紝淇濊瘉鍘熷瓙鎬с��
+ /// </summary>
+ /// <param name="deviceId">璁惧鏍囪瘑</param>
+ /// <param name="stepName">娴嬭瘯姝ラ鍚嶇О锛堢敤浜庢棩蹇�/瀹¤鏍囪瘑锛�</param>
+ /// <param name="ct">鍙栨秷浠ょ墝锛涚敵璇疯秴鏃惰涓哄け璐�</param>
+ Task<IAutoDeviceLease> AcquireAsync(
+ string deviceId, string stepName, CancellationToken ct = default);
+
+ /// <summary>
+ /// 榛樿绉熺害瓒呮椂锛堢锛夈�傚彲鐢宠鏇寸煭鐨� per-call 瓒呮椂銆�
+ /// </summary>
+ int DefaultLeaseTimeoutSeconds { get; set; }
+ }
+
+ /// <summary>
+ /// 鑷姩鍖栬澶囦綔鐢ㄥ煙绉熺害銆�
+ /// 涓�娆$敵璇凤紝澶氭璋冪敤锛汥ispose 鏃惰嚜鍔ㄩ噴鏀俱��
+ /// </summary>
+ public interface IAutoDeviceLease : IDisposable
+ {
+ /// <summary>鏈绉熺害鍏宠仈鐨勮澶� ID</summary>
+ string DeviceId { get; }
+
+ /// <summary>鏈绉熺害鐨勫唴閮ㄤ細璇濇爣璇嗭紙鐢ㄤ簬瀹¤鍏宠仈锛�</summary>
+ string SessionId { get; }
+
+ /// <summary>娴嬭瘯姝ラ鍚嶇О</summary>
+ string StepName { get; }
+
+ /// <summary>鐢宠鏃跺埢</summary>
+ DateTime AcquiredAt { get; }
+
+ /// <summary>绉熺害鏄惁宸茶閲婃斁</summary>
+ bool IsReleased { get; }
+
+ /// <summary>
+ /// 鍦ㄧ绾︿綔鐢ㄥ煙鍐呭彂閫佸懡浠ゃ��
+ /// </summary>
+ Task<DeviceCommandResult> ExecuteAsync(string command, CancellationToken ct = default);
+
+ /// <summary>
+ /// 鍦ㄧ绾︿綔鐢ㄥ煙鍐呮煡璇€��
+ /// </summary>
+ Task<DeviceCommandResult> QueryAsync(string query, CancellationToken ct = default);
+
+ /// <summary>V3.0锛氱绾﹀け鏁堬紙缁湡杩炵画澶辫触/琚洖鏀讹級鏃惰Е鍙戯紱璁㈤槄鑰呭簲鍋滄涓嬪彂銆�</summary>
+ event EventHandler LeaseLost;
+
+ /// <summary>V3.0锛氭樉寮忓紓姝ラ噴鏀俱��</summary>
+ Task ReleaseAsync(CancellationToken ct = default);
+
+ /// <summary>V3.0锛氱淮鎶よ娓¤姹傦紙Draining 棰勭暀锛孧VP 鎭� false锛夈��</summary>
+ bool HandoverRequested { get; }
+ }
+}
--
Gitblit v1.9.1