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
}
}