Parcourir la source

feat(d2-02): Program 装配 DebugSessionManager + TTL 看门狗线程

huangjie il y a 2 jours
Parent
commit
b342374e7d
1 fichiers modifiés avec 15 ajouts et 1 suppressions
  1. 15 1
      ivf_tl_operate_2.0/control/ivf_tl_ControlHost/Program.cs

+ 15 - 1
ivf_tl_operate_2.0/control/ivf_tl_ControlHost/Program.cs

@@ -45,6 +45,11 @@ namespace IvfTl.ControlHost
 
                 // 2) 先起 HTTP(让 operate 能尽早探到"在启动中"),started=false。
                 //    阶段2:/status rich + /serial/pause|resume + /shutdown。
+                var debugMgr = new IvfTl.ControlHost.Debug.DebugSessionManager(
+                    houseSn => IvfTl.Hardware.Impl.HardwareAccessLayer.Instance.GetHouseGate(houseSn),
+                    () => DateTime.UtcNow,
+                    ttlMs: 10000,
+                    log: msg => Log4netHelper.WriteLog(msg));
                 _http = new ControlHttpServer(
                     hostArgs.Port,
                     BuildStatus,        // /ping 轻量
@@ -52,7 +57,7 @@ namespace IvfTl.ControlHost
                     HandleShutdown,     // /shutdown 受护栏停机
                     HandleSerialPause,  // /serial/pause 借串口让路
                     HandleSerialResume, // /serial/resume 归还恢复
-                    msg => Log4netHelper.WriteLog(msg));
+                    msg => Log4netHelper.WriteLog(msg), debugMgr);
                 _http.Start();
 
                 // 3) 账号守卫(对齐 operate 空账号跳过逻辑)。
@@ -71,6 +76,15 @@ namespace IvfTl.ControlHost
 
                 // 5) 驻留:主线程阻塞等退出信号(阶段2 的 /shutdown 会 Set 此事件)。
                 _exitEvent = new ManualResetEventSlim(false);
+                // TTL 看门狗:周期 SweepExpired 回收超时调试会话(spec §5.1,绝不指望 operate 主动还)。
+                System.Threading.Tasks.Task.Run(async () =>
+                {
+                    while (!(_exitEvent?.IsSet ?? false))
+                    {
+                        try { debugMgr.SweepExpired(); } catch (Exception ex) { Log4netHelper.WriteLog("[debug] Sweep 异常:" + ex.Message); }
+                        await System.Threading.Tasks.Task.Delay(3000);
+                    }
+                });
                 _exitEvent.Wait();
                 return 0;
             }