using System; using System.Collections.Generic; using System.Threading.Tasks; using IOB_UT_NEXT.Config; using IOB_UT_NEXT.Services.Cache; using IOB_UT_NEXT.Services.Networking; using NLog; namespace IOB_UT_NEXT.Services.Networking { /// /// Orchestratore delle comunicazioni. /// Coordina HttpService e RedisIobCache per eseguire workflow di business. /// Riduce la profondità dello stack in Generic.cs. /// public class CommunicationService { #region Public Constructors public CommunicationService(IobConfTree config, RedisIobCache redisMan) { _config = config; _redisMan = redisMan; } #endregion Public Constructors #region Public Methods /// /// Esegue una chiamata HTTP e salva il risultato direttamente su Redis (Workflow orchestrato). /// public async Task CallAndSaveToRedisAsync(string url, string redisKey) { try { string result = await HttpService.CallUrlAsync(url); if (!string.IsNullOrEmpty(result)) { _redisMan.setRSV(redisKey, result); } return result; } catch (Exception ex) { logger.Error(ex, $"Error in CallAndSaveToRedisAsync: URL={url}, Key={redisKey}"); throw; } } /// /// Recupera dati da una URL e li deserializza (Workflow orchestrato). /// public async Task GetAndDeserializeAsync(string url) { string raw = await HttpService.CallUrlAsync(url); return IOB_UT_NEXT.Services.Data.DataSerializer.Deserialize(raw); } /// /// Esegue una chiamata POST e salva il payload/risposta (Workflow orchestrato). /// public async Task PostAndStoreAsync(string url, string payload, string redisKey) { try { string response = await Task.Run(() => HttpService.CallUrlPost(url, payload)); if (!string.IsNullOrEmpty(response)) { _redisMan.setRSV(redisKey, response); } return response; } catch (Exception ex) { logger.Error(ex, $"Error in PostAndStoreAsync: URL={url}, Key={redisKey}"); throw; } } #endregion Public Methods #region Private Fields private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private readonly IobConfTree _config; private readonly RedisIobCache _redisMan; #endregion Private Fields } }