using System;
using System.Collections.Generic;
using System.Linq;
namespace TeamAAS.Vision
{
///
/// 视觉图层总线(ILayerPublisher 的默认实现 + 全局入口):
/// - 节点运行完调 (线程安全,后台线程可调);
/// - 显示端(编辑器大预览窗、主页画面、图层 ComboBox)订阅 / ;
/// - 内存策略:按 (flowId, nodeName) 保存“最近一次运行”的图层集;同一 RunStamp 重复发布=整体替换,
/// 新 RunStamp 发布=先释放旧批次 owned 对象再替换 → 图层永不无限叠加。
/// 阶段1 为纯托管对象总线,不依赖任何视觉库;平台显示控件负责解释 Content 并管理非托管对象的生命周期标记(Owned)。
///
public sealed class VisionLayerStore : ILayerPublisher
{
private static readonly Lazy _instance =
new Lazy(() => new VisionLayerStore(), isThreadSafe: true);
/// 全局默认图层总线。
public static VisionLayerStore Instance => _instance.Value;
private readonly object _sync = new object();
/// key = flowId|nodeName → 该节点最近一次运行的发布参数。
private readonly Dictionary _latest =
new Dictionary(StringComparer.OrdinalIgnoreCase);
/// 图层发布事件(显示端订阅;发布线程直接回调,订阅方自行切 UI 线程)。
public event Action LayerPublished;
/// 图层清除事件(参数:flowId;nodeName 为 null 表示整流程清除)。
public event Action FlowCleared;
/// owned 对象释放钩子:由宿主注入(如 HalconRuntime.Dispose),SDK 不依赖视觉库。
public static Action