Files
lux/EgwCoreLib.Lux.Data/Services/ImageCacheService.cs
T
2025-07-22 19:14:01 +02:00

99 lines
3.4 KiB
C#

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<string>("ServerConf:PubChannel") ?? "";
Log.Info("ImageCache Service Started");
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Recupera img redis SVG x uid richiesta
/// </summary>
/// <param name="imgUid"></param>
public string LoadSvg(string imgUid)
{
// recupero img da cache
string currKey = $"{redisBaseKey}:{imgUid.Replace("/", ":")}";
var rawVal = _redisService.Get(currKey);
return $"{rawVal}";
}
/// <summary>
/// Recupera img redis SVG x id porta richiesta
/// </summary>
/// <param name="imgId"></param>\
public async Task<string> LoadSvgAsync(string imgId)
{
// recupero img da cache
string currKey = $"{redisBaseKey}:{imgId.Replace("/", ":")}";
var rawVal = await _redisService.GetAsync(currKey);
return $"{rawVal}";
}
/// <summary>
/// Salva e invia su channel img redis SVG per il doc richiesto
/// </summary>
/// <param name="imgId"></param>
/// <param name="svgContent"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Salva e invia su channel img redis SVG per il doc richiesto
/// </summary>
/// <param name="imgId"></param>
/// <param name="svgContent"></param>
public async Task<bool> 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
}
}