123 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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
 | |
| {
 | |
| 
 | |
| #nullable enable
 | |
| 
 | |
|     public static (string, Results) SendData(string url, long sequence, string directory, object payload, int timeoutSeconds = 120)
 | |
|     {
 | |
|         Results? wsResults = null;
 | |
|         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;
 | |
|                 wsResults = JsonSerializer.Deserialize(resultsJson, ResultsSourceGenerationContext.Default.Results);
 | |
|                 if (wsResults is null)
 | |
|                     throw new NullReferenceException(nameof(wsResults));
 | |
|                 string checkDirectory = Path.Combine(directory, $"-{wsResults.HeaderId}");
 | |
|                 if (!Directory.Exists(checkDirectory))
 | |
|                     _ = Directory.CreateDirectory(checkDirectory);
 | |
|                 File.WriteAllText(Path.Combine(checkDirectory, $"{sequence}.json"), json);
 | |
|             }
 | |
|             if (wsResults.Success is null || !wsResults.Success.Value)
 | |
|                 wsResults.Errors?.Add(wsResults.ToString());
 | |
|         }
 | |
|         catch (Exception e)
 | |
|         { wsResults ??= Results.Get(resultsJson, e); }
 | |
|         return new(resultsJson, wsResults);
 | |
|     }
 | |
| 
 | |
|     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<Attachment>? headerAttachments = null, List<Attachment>? dataAttachments = null)
 | |
|     {
 | |
|         string directory;
 | |
|         try
 | |
|         {
 | |
|             string? directoryName;
 | |
|             if (headerAttachments is not null)
 | |
|             {
 | |
|                 foreach (Attachment attachment in headerAttachments)
 | |
|                 {
 | |
|                     directoryName = Path.GetDirectoryName(attachment.HeaderIdDirectory);
 | |
|                     if (string.IsNullOrEmpty(directoryName))
 | |
|                         continue;
 | |
|                     directory = Path.Combine(directoryName, 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)
 | |
|                 {
 | |
|                     directoryName = Path.GetDirectoryName(attachment.HeaderIdDirectory.Replace("Header", "Data"));
 | |
|                     if (string.IsNullOrEmpty(directoryName))
 | |
|                         continue;
 | |
|                     directory = Path.Combine(directoryName, 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());
 | |
|         }
 | |
|     }
 | |
| 
 | |
| } |