2025-07-28 12:16:29 +08:00
|
|
|
|
using Serein.NodeFlow.Model;
|
|
|
|
|
|
using Serein.NodeFlow.Model.Library;
|
2025-07-29 14:25:31 +08:00
|
|
|
|
using Serein.NodeFlow.Model.Nodes;
|
2025-03-18 11:52:54 +08:00
|
|
|
|
using Serein.Workbench.Themes;
|
|
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Serein.Workbench.Node.ViewModel
|
|
|
|
|
|
{
|
2025-07-30 21:15:07 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 动态脚本节点控制视图模型
|
|
|
|
|
|
/// </summary>
|
2025-03-18 11:52:54 +08:00
|
|
|
|
public class NetScriptNodeControlViewModel : NodeControlViewModelBase
|
|
|
|
|
|
{
|
2025-07-30 21:15:07 +08:00
|
|
|
|
private new SingleNetScriptNode NodeModel => (SingleNetScriptNode)base.NodeModel;
|
2025-03-18 11:52:54 +08:00
|
|
|
|
|
|
|
|
|
|
public string Tips
|
|
|
|
|
|
{
|
|
|
|
|
|
get => NodeModel.Tips;
|
|
|
|
|
|
set { NodeModel.Tips = value; OnPropertyChanged(); }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string Script
|
|
|
|
|
|
{
|
|
|
|
|
|
get => NodeModel.Script;
|
|
|
|
|
|
set { NodeModel.Script = value; OnPropertyChanged(); }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public NetScriptNodeControlViewModel(NodeModelBase nodeModel) : base(nodeModel)
|
|
|
|
|
|
{
|
|
|
|
|
|
Script = @"using Serein.Library;
|
|
|
|
|
|
using Serein.Library.Api;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
|
|
[DynamicFlow(""[动态编译]"")]
|
|
|
|
|
|
public class FlowLibrary
|
|
|
|
|
|
{
|
|
|
|
|
|
[NodeAction(NodeType.Action, AnotherName = ""输出"")]
|
|
|
|
|
|
public void Print(IDynamicContext context,string value = ""Hello World!"")
|
|
|
|
|
|
{
|
|
|
|
|
|
context.Env.WriteLine(InfoType.INFO, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
}";
|
|
|
|
|
|
|
2025-07-30 21:15:07 +08:00
|
|
|
|
CommandOpenScriptEdit = new RelayCommand(o =>
|
2025-03-18 11:52:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
DynamicCompilerView dynamicCompilerView = new DynamicCompilerView();
|
|
|
|
|
|
dynamicCompilerView.ScriptCode = this.Script ;
|
|
|
|
|
|
dynamicCompilerView.OnCompileComplete = OnCompileComplete;
|
|
|
|
|
|
dynamicCompilerView.ShowDialog();
|
|
|
|
|
|
});
|
2025-07-29 14:25:31 +08:00
|
|
|
|
NodeModel1 = nodeModel;
|
2025-03-18 11:52:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-28 12:16:29 +08:00
|
|
|
|
private static void OnCompileComplete(FlowLibraryCache flowLibrary)
|
2025-03-18 11:52:54 +08:00
|
|
|
|
{
|
2025-07-28 12:16:29 +08:00
|
|
|
|
var loadResult = flowLibrary.LoadFlowMethod(); // 动态编译完成后加载程序集
|
2025-03-18 11:52:54 +08:00
|
|
|
|
if (!loadResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var md = flowLibrary.MethodDetailss.Values.FirstOrDefault();
|
|
|
|
|
|
if (md is null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 打开编辑窗口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public ICommand CommandOpenScriptEdit { get; }
|
2025-07-30 21:15:07 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 节点模型
|
|
|
|
|
|
/// </summary>
|
2025-07-29 14:25:31 +08:00
|
|
|
|
public NodeModelBase NodeModel1 { get; }
|
2025-03-18 11:52:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|