using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Text; using System.Text.Json; namespace Adaptation.Shared.Metrology; public partial class WS { public static (string, Results) SendData(string url, long sequence, string directory, object payload, int timeoutSeconds = 120) { Results results = new(); string resultsJson = string.Empty; try { string json = JsonSerializer.Serialize(payload, payload.GetType()); if (string.IsNullOrEmpty(url) || !url.Contains(":") || !url.Contains(".")) throw new Exception("Invalid URL"); using (HttpClient httpClient = new()) { httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0); HttpRequestMessage httpRequestMessage = new() { RequestUri = new Uri(url), Method = HttpMethod.Post, Content = new StringContent(json, Encoding.UTF8, "application/json") }; HttpResponseMessage httpResponseMessage = httpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead).Result; resultsJson = httpResponseMessage.Content.ReadAsStringAsync().Result; results = JsonSerializer.Deserialize(resultsJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); string checkDirectory = Path.Combine(directory, $"-{results.HeaderID}"); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); File.WriteAllText(Path.Combine(checkDirectory, $"{sequence}.json"), json); } if (!results.Success) results.Errors.Add(results.ToString()); } catch (Exception e) { Exception exception = e; StringBuilder stringBuilder = new(); while (exception is not null) { _ = stringBuilder.AppendLine(exception.Message); exception = exception.InnerException; } results.Errors ??= new List(); results.Errors.Add(resultsJson); results.Errors.Add(stringBuilder.ToString()); } return new(resultsJson, results); } public static void AttachFile(string url, Attachment attachment, int timeoutSeconds = 60) { using HttpClient httpClient = new(); string json = JsonSerializer.Serialize(attachment); httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0); StringContent httpContent = new(json, Encoding.UTF8, "application/json"); HttpResponseMessage httpResponseMessage = httpClient.PostAsync($"{url}/attachment", httpContent).Result; if (!httpResponseMessage.IsSuccessStatusCode) { string resultBody = httpResponseMessage.Content.ReadAsStringAsync().Result; throw new Exception($"Attachment failed: {resultBody}"); } } public static void AttachFiles(string url, List headerAttachments = null, List dataAttachments = null) { string directory; try { if (headerAttachments is not null) { foreach (Attachment attachment in headerAttachments) { directory = Path.Combine(Path.GetDirectoryName(attachment.HeaderIdDirectory), attachment.AttachmentId) ?? throw new Exception(); if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); File.Copy(attachment.SourceFileName, Path.Combine(directory, attachment.DestinationFileName), overwrite: true); } } if (dataAttachments is not null) { foreach (Attachment attachment in dataAttachments) { directory = Path.Combine(Path.GetDirectoryName(attachment.HeaderIdDirectory.Replace("Header", "Data")), attachment.AttachmentId) ?? throw new Exception(); if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); File.Copy(attachment.SourceFileName, Path.Combine(directory, attachment.DestinationFileName), overwrite: true); } } if (headerAttachments is not null) { foreach (Attachment attachment in headerAttachments) AttachFile(url, attachment); } if (dataAttachments is not null) { foreach (Attachment attachment in dataAttachments) AttachFile(url, attachment); } //MessageBox.Show(r.ToString()); } catch (Exception e) { Exception exception = e; StringBuilder stringBuilder = new(); while (exception is not null) { _ = stringBuilder.AppendLine(exception.Message); exception = exception.InnerException; } //MessageBox.Show(msgs.ToString(), "Exception", //MessageBoxButtons.OK, //MessageBoxIcon.Error); throw new Exception(stringBuilder.ToString()); } } }