59 lines
1.8 KiB
C#
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;
|
|
}
|
|
} |