Files
HawkeyeVision/Hawkeye.VisionBuilder.Workflow/DataTransfer/PythonModelProxyHTTP.cs
2025-08-28 16:30:29 +02:00

59 lines
1.8 KiB
C#

using Serilog;
namespace Hawkeye.VisionBuilder.Workflow.DataTransfer;
public class PythonModelProxyHTTP
{
private static bool _isInitialized = false;
private static DockerScriptRunner _pythonScriptRunner;
private static CSharpDataTransferHTTP _cSharpDataTransferHTTP;
static object _lock = new object();
public static void Initialize()
{
lock (_lock)
{
if (_isInitialized) return;
_isInitialized = true;
var workDirAbsPath = Path.GetFullPath(@"..\Data\Models");
_pythonScriptRunner = new DockerScriptRunner(workDirAbsPath);
_pythonScriptRunner.Start();
// Wait for the server to start by checking if port 8000 is open
while (true)
{
try
{
HttpClient http = new HttpClient();
// check if 404 occurs on localhost:8000
var response = http.GetAsync("http://127.0.0.1:8000/").Result;
if (response.StatusCode == System.Net.HttpStatusCode.NotFound ||
response.StatusCode == System.Net.HttpStatusCode.OK)
{
break; // Port is open
}
}
catch
{
Log.Debug("Waiting for port to open");
// Ignore exceptions and retry
}
Thread.Sleep(1000); // Wait before retrying
}
Thread.Sleep(2000);
_cSharpDataTransferHTTP = new CSharpDataTransferHTTP();
}
}
public static CSharpDataTransferHTTP GetInterface()
{
if (!_isInitialized) Initialize();
return _cSharpDataTransferHTTP;
}
}