using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using NLog; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EgwCoreLib.Lux.Data.Services { public class ImageCacheService { #region Public Constructors public ImageCacheService(IConfiguration config, IConfiguration configuration, IRedisService redisService) { _config = config; _redisService = redisService; //pubChannel = _config.GetValue("ServerConf:PubChannel") ?? ""; Log.Info("ImageCache Service Started"); } #endregion Public Constructors #region Public Methods /// /// Recupera img redis SVG x uid richiesta /// /// public string LoadSvg(string imgUid) { // recupero img da cache string currKey = $"{redisBaseKey}:{imgUid.Replace("/", ":")}"; var rawVal = _redisService.Get(currKey); return $"{rawVal}"; } /// /// Recupera img redis SVG x id porta richiesta /// /// \ public async Task LoadSvgAsync(string imgId) { // recupero img da cache string currKey = $"{redisBaseKey}:{imgId.Replace("/", ":")}"; var rawVal = await _redisService.GetAsync(currKey); return $"{rawVal}"; } /// /// Salva e invia su channel img redis SVG per il doc richiesto /// /// /// /// public bool SaveSvg(string imgId, string svgContent) { // salvo img in cache string currKey = $"{redisBaseKey}:{imgId.Replace("/", ":")}"; var done = _redisService.Set(currKey, svgContent); // invio notifica nuova imgsvg sul canale... viene "reimbustata" string notifyChannel = $"svg-gen:{imgId}"; long numSent = _redisService.Publish(notifyChannel, svgContent); return done; } /// /// Salva e invia su channel img redis SVG per il doc richiesto /// /// /// public async Task SaveSvgAsync(string imgId, string svgContent) { // salvo img in cache string currKey = $"{redisBaseKey}:{imgId.Replace("/", ":")}"; var done = await _redisService.SetAsync(currKey, svgContent); // invio notifica nuova svg generata sul canale... viene inviato solo svg con ID nel canale string notifyChannel = $"{pubChannel}:{imgId}"; long numSent = await _redisService.PublishAsync(notifyChannel, svgContent); return done; } #endregion Public Methods #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); private readonly IRedisService _redisService; private readonly string pubChannel = "svg-img"; private IConfiguration _config; private string redisBaseKey = "Lux:Images"; #endregion Private Fields } }