using Newtonsoft.Json.Linq; using Serein.Library.Api; using Serein.NodeFlow; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Serein.Library; using Serein.Library.Utils; using Serein.Workbench.Avalonia.Api; using Serein.Workbench.Api; using System.Diagnostics; namespace Serein.Workbench.Services { internal class FlowEEForwardingService : IFlowEEForwardingService { /// /// 流程运行环境 /// private readonly IFlowEnvironment flowEnvironment; private readonly IFlowEnvironmentEvent flowEnvironmentEvent; private readonly UIContextOperation uIContextOperation; /// /// 转发流程运行环境各个事件的实现类 /// /// /// /// public FlowEEForwardingService(IFlowEnvironment flowEnvironment, IFlowEnvironmentEvent flowEnvironmentEvent, UIContextOperation uIContextOperation) { this.flowEnvironment = flowEnvironment; this.flowEnvironmentEvent = flowEnvironmentEvent; this.uIContextOperation = uIContextOperation; InitFlowEnvironmentEvent(); } #region 工作台事件转发 /// /// 加载了依赖文件事件 /// public event LoadDllHandler? OnDllLoad; /// /// 项目加载完成事件 /// public event ProjectLoadedHandler? OnProjectLoaded; /// /// 项目保存中事件 /// public event ProjectSavingHandler? OnProjectSaving; /// /// 节点连接改变事件 /// public event NodeConnectChangeHandler? OnNodeConnectChange; /// /// 节点创建事件 /// public event NodeCreateHandler? OnNodeCreate; /// /// 节点移除事件 /// public event NodeRemoveHandler? OnNodeRemove; /// /// 节点放置容器事件 /// public event NodePlaceHandler? OnNodePlace; /// /// 节点取出事件 /// public event NodeTakeOutHandler? OnNodeTakeOut; /// /// 流程起始节点改变事件 /// public event StartNodeChangeHandler? OnStartNodeChange; /// /// 流程运行完毕事件 /// public event FlowRunCompleteHandler? OnFlowRunComplete; /// /// 被监视的对象数据改变事件 /// public event MonitorObjectChangeHandler? OnMonitorObjectChange; /// /// 节点中断状态改变事件 /// public event NodeInterruptStateChangeHandler? OnNodeInterruptStateChange; /// /// 表达式中断触发事件 /// public event ExpInterruptTriggerHandler? OnInterruptTrigger; /// /// 容器对象改变事件 /// public event IOCMembersChangedHandler? OnIOCMembersChanged; /// /// 节点定位事件 /// public event NodeLocatedHandler? OnNodeLocated; /// /// 节点移动事件 /// public event NodeMovedHandler? OnNodeMoved; /// /// 运行环境输出事件 /// public event EnvOutHandler? OnEnvOut; /// /// 添加画布事件 /// public event CanvasCreateHandler OnCanvasCreate; /// /// 移除了画布事件 /// public event CanvasRemoveHandler OnCanvasRemove; #endregion #region 流程运行环境事件 private void InitFlowEnvironmentEvent() { flowEnvironmentEvent.OnDllLoad += FlowEnvironment_DllLoadEvent; flowEnvironmentEvent.OnProjectSaving += EnvDecorator_OnProjectSaving; flowEnvironmentEvent.OnProjectLoaded += FlowEnvironment_OnProjectLoaded; flowEnvironmentEvent.OnCanvasCreate += FlowEnvironmentEvent_OnCanvasCreate; flowEnvironmentEvent.OnCanvasRemove += FlowEnvironmentEvent_OnCanvasRemove; flowEnvironmentEvent.OnStartNodeChange += FlowEnvironment_StartNodeChangeEvent; flowEnvironmentEvent.OnNodeConnectChange += FlowEnvironment_NodeConnectChangeEvemt; flowEnvironmentEvent.OnNodeCreate += FlowEnvironment_NodeCreateEvent; flowEnvironmentEvent.OnNodeRemove += FlowEnvironment_NodeRemoveEvent; flowEnvironmentEvent.OnNodePlace += EnvDecorator_OnNodePlaceEvent; flowEnvironmentEvent.OnNodeTakeOut += EnvDecorator_OnNodeTakeOutEvent; flowEnvironmentEvent.OnFlowRunComplete += FlowEnvironment_OnFlowRunCompleteEvent; flowEnvironmentEvent.OnMonitorObjectChange += FlowEnvironment_OnMonitorObjectChangeEvent; flowEnvironmentEvent.OnNodeInterruptStateChange += FlowEnvironment_OnNodeInterruptStateChangeEvent; flowEnvironmentEvent.OnInterruptTrigger += FlowEnvironment_OnInterruptTriggerEvent; flowEnvironmentEvent.OnIOCMembersChanged += FlowEnvironment_OnIOCMembersChangedEvent; flowEnvironmentEvent.OnNodeLocated += FlowEnvironment_OnNodeLocateEvent; flowEnvironmentEvent.OnNodeMoved += FlowEnvironment_OnNodeMovedEvent; flowEnvironmentEvent.OnEnvOut += FlowEnvironment_OnEnvOutEvent; } private void ResetFlowEnvironmentEvent() { flowEnvironmentEvent.OnDllLoad -= FlowEnvironment_DllLoadEvent; flowEnvironmentEvent.OnProjectSaving -= EnvDecorator_OnProjectSaving; flowEnvironmentEvent.OnProjectLoaded -= FlowEnvironment_OnProjectLoaded; flowEnvironmentEvent.OnStartNodeChange -= FlowEnvironment_StartNodeChangeEvent; flowEnvironmentEvent.OnNodeConnectChange -= FlowEnvironment_NodeConnectChangeEvemt; flowEnvironmentEvent.OnNodeCreate -= FlowEnvironment_NodeCreateEvent; flowEnvironmentEvent.OnNodeRemove -= FlowEnvironment_NodeRemoveEvent; flowEnvironmentEvent.OnNodePlace -= EnvDecorator_OnNodePlaceEvent; flowEnvironmentEvent.OnNodeTakeOut -= EnvDecorator_OnNodeTakeOutEvent; flowEnvironmentEvent.OnFlowRunComplete -= FlowEnvironment_OnFlowRunCompleteEvent; flowEnvironmentEvent.OnMonitorObjectChange -= FlowEnvironment_OnMonitorObjectChangeEvent; flowEnvironmentEvent.OnNodeInterruptStateChange -= FlowEnvironment_OnNodeInterruptStateChangeEvent; flowEnvironmentEvent.OnInterruptTrigger -= FlowEnvironment_OnInterruptTriggerEvent; flowEnvironmentEvent.OnIOCMembersChanged -= FlowEnvironment_OnIOCMembersChangedEvent; flowEnvironmentEvent.OnNodeLocated -= FlowEnvironment_OnNodeLocateEvent; flowEnvironmentEvent.OnNodeMoved -= FlowEnvironment_OnNodeMovedEvent; flowEnvironmentEvent.OnEnvOut -= FlowEnvironment_OnEnvOutEvent; } #region 运行环境事件 /// /// 环境内容输出 /// /// /// private void FlowEnvironment_OnEnvOutEvent(InfoType type, string value) { uIContextOperation.Invoke(() => { OnEnvOut?.Invoke(type, value); }); } /// /// 需要保存项目 /// /// /// private void EnvDecorator_OnProjectSaving(ProjectSavingEventArgs eventArgs) { OnProjectSaving?.Invoke(eventArgs); } /// /// 加载完成 /// /// private void FlowEnvironment_OnProjectLoaded(ProjectLoadedEventArgs eventArgs) { OnProjectLoaded?.Invoke(eventArgs); } /// /// 运行完成 /// /// /// private void FlowEnvironment_OnFlowRunCompleteEvent(FlowEventArgs eventArgs) { SereinEnv.WriteLine(InfoType.INFO, "-------运行完成---------\r\n"); OnFlowRunComplete?.Invoke(eventArgs); } /// /// 加载了DLL文件,dll内容 /// private void FlowEnvironment_DllLoadEvent(LoadDllEventArgs eventArgs) { OnDllLoad?.Invoke(eventArgs); } /// /// 节点连接关系变更 /// /// private void FlowEnvironment_NodeConnectChangeEvemt(NodeConnectChangeEventArgs eventArgs) { OnNodeConnectChange?.Invoke(eventArgs); } /// /// 添加了画布 /// /// /// private void FlowEnvironmentEvent_OnCanvasCreate(CanvasCreateEventArgs eventArgs) { OnCanvasCreate?.Invoke(eventArgs); } /// /// 移除了画布 /// /// /// private void FlowEnvironmentEvent_OnCanvasRemove(CanvasRemoveEventArgs eventArgs) { OnCanvasRemove?.Invoke(eventArgs); } /// /// 节点移除事件 /// /// private void FlowEnvironment_NodeRemoveEvent(NodeRemoveEventArgs eventArgs) { OnNodeRemove?.Invoke(eventArgs); } /// /// 添加节点事件 /// /// 添加节点事件参数 /// private void FlowEnvironment_NodeCreateEvent(NodeCreateEventArgs eventArgs) { OnNodeCreate?.Invoke(eventArgs); } /// /// 放置一个节点 /// /// /// private void EnvDecorator_OnNodePlaceEvent(NodePlaceEventArgs eventArgs) { OnNodePlace?.Invoke(eventArgs); } /// /// 取出一个节点 /// /// private void EnvDecorator_OnNodeTakeOutEvent(NodeTakeOutEventArgs eventArgs) { OnNodeTakeOut?.Invoke(eventArgs); } /// /// 设置了流程起始控件 /// /// /// private void FlowEnvironment_StartNodeChangeEvent(StartNodeChangeEventArgs eventArgs) { OnStartNodeChange?.Invoke(eventArgs); } /// /// 被监视的对象发生改变 /// /// private void FlowEnvironment_OnMonitorObjectChangeEvent(MonitorObjectEventArgs eventArgs) { OnMonitorObjectChange?.Invoke(eventArgs); } /// /// 节点中断状态改变。 /// /// private void FlowEnvironment_OnNodeInterruptStateChangeEvent(NodeInterruptStateChangeEventArgs eventArgs) { OnNodeInterruptStateChange?.Invoke(eventArgs); } /// /// 节点触发了中断 /// /// /// private void FlowEnvironment_OnInterruptTriggerEvent(InterruptTriggerEventArgs eventArgs) { OnInterruptTrigger?.Invoke(eventArgs); } /// /// IOC变更 /// /// /// private void FlowEnvironment_OnIOCMembersChangedEvent(IOCMembersChangedEventArgs eventArgs) { OnIOCMembersChanged?.Invoke(eventArgs); } /// /// 节点需要定位 /// /// /// private void FlowEnvironment_OnNodeLocateEvent(NodeLocatedEventArgs eventArgs) { OnNodeLocated?.Invoke(eventArgs); } /// /// 节点移动 /// /// private void FlowEnvironment_OnNodeMovedEvent(NodeMovedEventArgs eventArgs) { OnNodeMoved?.Invoke(eventArgs); } #endregion #endregion } }