using static Community.CsharpSqlite.Sqlite3; namespace Hawkeye.VisionBuilder.Workflow.DataTransfer; public class CSharpDataTransferHTTP { private readonly PythonModelAPI _api; private readonly HttpClient _client; private readonly CancellationTokenSource _pingCts = new(); private readonly Thread _pingThread; public CSharpDataTransferHTTP() { var handler = new SocketsHttpHandler { PooledConnectionIdleTimeout = TimeSpan.FromSeconds(10), MaxConnectionsPerServer = 100 }; _client = new HttpClient(handler) { // i've added this DefaultRequestHeaders = { ExpectContinue = false } }; _api = new PythonModelAPI("http://localhost:8000",_client); _pingThread = new Thread(PingLoop) { IsBackground = true }; _pingThread.Start(); } private void PingLoop() { while (!_pingCts.Token.IsCancellationRequested) { try { _client.GetAsync("http://localhost:8000/").Wait(); } catch { // Ignore errors, optionally log } Thread.Sleep(3000); // Ping every 3 seconds } } public void LoadModel(string path, string modelName) { _api.LoadModelAsync(new LoadModelIn() { Name = modelName, Path = Path.GetFileName(path) }).Wait(); } public void ActivateModel(string modelName) { _api.ActivateModelAsync(new ActivateModelIn(){Name = modelName}).Wait(); } public int[] GetAcceptSize() { var response = _api.GetAcceptSizeAsync().Result; return response.Accept_size.ToArray(); } public int[] GetOutputSize() { var response = _api.GetOutputSizeAsync().Result; return response.Accept_size.ToArray(); } public byte[] PredictRaw(byte[] byteArray) { var response = _api.PredictRawAsync(new FileParameter(new MemoryStream(byteArray))).Result; var stream = response.Stream; // read the stream to byte array using var memoryStream = new MemoryStream(); stream.CopyTo(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); var responseBytes = memoryStream.ToArray(); return responseBytes; } public byte[] Predict(byte[] byteArray) { var response = _api.PredictAsync(new FileParameter(new MemoryStream(byteArray))).Result; var stream = response.Stream; // read the stream to byte array using var memoryStream = new MemoryStream(); stream.CopyTo(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); var responseBytes = memoryStream.ToArray(); return responseBytes; } }