using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Amazon.S3.Model; namespace ServerCore; // HANDOVER: HttpClient SDK Wrapper 클래스 이다. public sealed class SharedHttpClient : Singleton { private readonly HttpClient m_http_client = new(); public SharedHttpClient() { } //============================================================================================= // 일반적인 HTTP 요청 처리 (GET, POST, PUT, DELETE 등 모든 메서드 지원) //============================================================================================= public async Task sendAsync(HttpRequestMessage requestMessage, CancellationToken cancellationToken = default) { var err_msg = string.Empty; try { return await m_http_client.SendAsync(requestMessage, cancellationToken); } catch (HttpRequestException e) { err_msg = $"HttpRequestException !!!, Network error or invalid response, Failed to perform in sendAsync() : exception:{e} - {requestMessage.RequestUri}"; Log.getLogger().error(err_msg); } catch (TaskCanceledException e) { if (cancellationToken.IsCancellationRequested) { err_msg = $"TaskCanceledException !!!, Request was canceled by caller, Failed to perform in sendAsync() : exception:{e} - {requestMessage.RequestUri}"; Log.getLogger().error(err_msg); } else { err_msg = $"TaskCanceledException !!!, Request timed out, Failed to perform in sendAsync() : exception:{e} - {requestMessage.RequestUri}"; Log.getLogger().error(err_msg); } } catch (TimeoutException e) { err_msg = $"TimeoutException !!!, The request exceeded the timeout limit, Failed to perform in sendAsync() : exception:{e} - {requestMessage.RequestUri}"; Log.getLogger().error(err_msg); } catch (Exception e) { err_msg = $"Exception !!!, Unhandled exception during HTTP request, Failed to perform in sendAsync() : exception:{e} - {requestMessage.RequestUri}"; Log.getLogger().error(err_msg); } return null; } public async Task getAsync(string url, CancellationToken cancellationToken = default) { var err_msg = string.Empty; try { // GET Http Method return await m_http_client.GetAsync(url, cancellationToken); } catch (HttpRequestException e) { err_msg = $"HttpRequestException !!!, Network error or invalid response, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } catch (TaskCanceledException e) { if (cancellationToken.IsCancellationRequested) { err_msg = $"TaskCanceledException !!!, Request was canceled by caller, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } else { err_msg = $"TaskCanceledException !!!, Request timed out, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } } catch (TimeoutException e) { err_msg = $"TimeoutException !!!, The request exceeded the timeout limit, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } catch (Exception e) { err_msg = $"Exception !!!, Unhandled exception during HTTP GET request, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } return null; } public async Task postAsync(string url, HttpContent content, CancellationToken cancellationToken = default) { var err_msg = string.Empty; try { // POST Http Method return await m_http_client.PostAsync(url, content, cancellationToken); } catch (HttpRequestException e) { err_msg = $"HttpRequestException !!!, Network error or invalid response, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } catch (TaskCanceledException e) { if (cancellationToken.IsCancellationRequested) { err_msg = $"TaskCanceledException !!!, Request was canceled by caller, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } else { err_msg = $"TaskCanceledException !!!, Request timed out, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } } catch (TimeoutException e) { err_msg = $"TimeoutException !!!, The request exceeded the timeout limit, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } catch (Exception e) { err_msg = $"Exception !!!, Unhandled exception during HTTP GET request, Failed to perfom in getAsync() : exception:{e} - {url}"; Log.getLogger().error(err_msg); } return null; } }