hot reload
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using Hawkeye.VisionBuilder.Workflow.Configuration;
|
||||
using Hawkeye.VisionBuilder.Workflow.Links;
|
||||
using OpenCvSharp;
|
||||
using Serilog;
|
||||
using System.ComponentModel.Design.Serialization;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
@@ -472,4 +473,77 @@ public class WorkflowList
|
||||
return workflowList;
|
||||
}
|
||||
|
||||
public void HotReloadParameters(string fileName)
|
||||
{
|
||||
string jsonString = File.ReadAllText(fileName);
|
||||
var workflowData = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonString);
|
||||
|
||||
if (workflowData == null) return;
|
||||
|
||||
// Update Configuration
|
||||
if (workflowData.ContainsKey("Configuration"))
|
||||
{
|
||||
var configElement = (JsonElement)workflowData["Configuration"];
|
||||
var configData = JsonSerializer.Deserialize<Dictionary<string, object>>(configElement.GetRawText());
|
||||
|
||||
if (configData != null)
|
||||
{
|
||||
var convertedConfigData = ConvertJsonElementsToNatives(configData);
|
||||
|
||||
if (convertedConfigData.ContainsKey("RuntimeCameraType"))
|
||||
Configuration.RuntimeCameraType = Enum.Parse<ECameraType>(convertedConfigData["RuntimeCameraType"].ToString());
|
||||
if (convertedConfigData.ContainsKey("DevelopmentCameraType"))
|
||||
Configuration.DevelopmentCameraType = Enum.Parse<ECameraType>(convertedConfigData["DevelopmentCameraType"].ToString());
|
||||
if (convertedConfigData.ContainsKey("Outputs"))
|
||||
Configuration.Outputs = Enum.Parse<EOutputs>(convertedConfigData["Outputs"].ToString());
|
||||
if (convertedConfigData.ContainsKey("EmulationPath"))
|
||||
Configuration.EmulationPath = convertedConfigData["EmulationPath"].ToString();
|
||||
if (convertedConfigData.ContainsKey("PythonPath"))
|
||||
Configuration.PythonPath = convertedConfigData["PythonPath"].ToString();
|
||||
if (convertedConfigData.ContainsKey("ResultPin"))
|
||||
Configuration.ResultPin = (int)convertedConfigData["ResultPin"];
|
||||
if (convertedConfigData.ContainsKey("SerialPort"))
|
||||
Configuration.SerialPort = convertedConfigData["SerialPort"].ToString();
|
||||
if (convertedConfigData.ContainsKey("Delay"))
|
||||
Configuration.Delay = (int)convertedConfigData["Delay"];
|
||||
}
|
||||
}
|
||||
|
||||
// Update operation parameters by matching Id — do NOT recreate the Operations list
|
||||
if (workflowData.ContainsKey("Operations"))
|
||||
{
|
||||
var operationsElement = (JsonElement)workflowData["Operations"];
|
||||
var operationsArray = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(operationsElement.GetRawText());
|
||||
|
||||
if (operationsArray != null)
|
||||
{
|
||||
foreach (var operationData in operationsArray)
|
||||
{
|
||||
if (!operationData.ContainsKey("Data")) continue;
|
||||
|
||||
var dataElement = (JsonElement)operationData["Data"];
|
||||
var operationDict = JsonSerializer.Deserialize<Dictionary<string, object>>(dataElement.GetRawText());
|
||||
|
||||
if (operationDict == null) continue;
|
||||
|
||||
var convertedDict = ConvertJsonElementsToNatives(operationDict);
|
||||
|
||||
if (!convertedDict.ContainsKey("Id")) continue;
|
||||
|
||||
var id = new Guid(convertedDict["Id"].ToString());
|
||||
var existingOp = Operations.FirstOrDefault(x => x.Id == id);
|
||||
|
||||
if (existingOp != null)
|
||||
{
|
||||
existingOp.Load(convertedDict);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Warning("HotReload: no matching operation for Id {Id}", id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user