Files
serein-flow/FlowStartTool/Program.cs

107 lines
3.3 KiB
C#
Raw Normal View History

2024-10-12 22:25:33 +08:00
using Newtonsoft.Json;
using Serein.Library;
2024-10-12 22:25:33 +08:00
using Serein.Library.Api;
using Serein.Library.Utils;
using Serein.NodeFlow.Env;
2024-10-13 19:36:45 +08:00
using System.Diagnostics;
using System.Reflection;
using static System.Net.Mime.MediaTypeNames;
2024-10-12 22:25:33 +08:00
namespace Serein.FlowStartTool
{
public class Program
{
public static void Main(string[] args)
{
2024-10-27 00:54:10 +08:00
#if true
args = [@"F:\临时\project\linux\project.dnf"];
#endif
2024-10-13 19:36:45 +08:00
Console.WriteLine("Hello :) ");
Console.WriteLine($"args : {string.Join(" , ", args)}");
string filePath;
string fileDataPath;
SereinProjectData? flowProjectData;
string exeAssemblyDictPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
2024-10-13 19:36:45 +08:00
if (args.Length == 1)
{
filePath = args[0];
fileDataPath = Path.GetDirectoryName(filePath) ?? "";
}
else if (args.Length == 0)
{
Console.WriteLine("loading project file data...");
2024-10-13 19:36:45 +08:00
filePath = Process.GetCurrentProcess().ProcessName + ".dnf";
fileDataPath = exeAssemblyDictPath;
}
else
2024-10-12 22:25:33 +08:00
{
return;
2024-10-13 19:36:45 +08:00
}
Console.WriteLine($"Current Name : {filePath}");
Console.WriteLine($"Dict Path : {fileDataPath}");
try
{
// 读取文件内容
string content = File.ReadAllText(filePath); // 读取整个文件内容
flowProjectData = JsonConvert.DeserializeObject<SereinProjectData>(content);
if (flowProjectData is null || string.IsNullOrEmpty(fileDataPath))
2024-10-12 22:25:33 +08:00
{
2024-10-13 19:36:45 +08:00
throw new Exception("项目文件读取异常");
2024-10-12 22:25:33 +08:00
}
2024-10-13 19:36:45 +08:00
}
catch (Exception ex)
{
Console.WriteLine($"读取文件时发生错误:{ex.Message}");
return;
}
IsRuning = true;
2024-10-27 00:54:10 +08:00
_ = StartFlow(flowProjectData, fileDataPath);
2024-10-13 19:36:45 +08:00
while (IsRuning)
{
2024-10-27 00:54:10 +08:00
Console.ReadKey();
2024-10-12 22:25:33 +08:00
}
}
public static IFlowEnvironment? Env;
2024-10-13 19:36:45 +08:00
public static bool IsRuning;
2024-10-12 22:25:33 +08:00
public static async Task StartFlow(SereinProjectData flowProjectData, string fileDataPath)
{
SynchronizationContext? uiContext = SynchronizationContext.Current; // 在UI线程上获取UI线程上下文信息
var uIContextOperation = new UIContextOperation(uiContext); // 封装一个调用UI线程的工具类
//if (OperatingSystem.IsLinux())
//{
//}
// if (uIContextOperation is null)
//{
// throw new Exception("无法封装 UIContextOperation ");
//}
//else
//{
// env = new FlowEnvironmentDecorator(uIContextOperation);
// this.window = window;
//}
2024-10-27 00:54:10 +08:00
Env = new FlowEnvironmentDecorator(uIContextOperation);
Env.LoadProject(new FlowEnvInfo { Project = flowProjectData }, fileDataPath); // 加载项目
await Env.StartRemoteServerAsync(7525); // 启动 web socket 监听远程请求
//await Env.StartAsync();
2024-10-13 19:36:45 +08:00
IsRuning = false;
2024-10-12 22:25:33 +08:00
}
2024-10-13 19:36:45 +08:00
2024-10-12 22:25:33 +08:00
}
}