using Newtonsoft.Json;
using StackExchange.Redis;
namespace BlazorCanvas.Server.Components.Data;
// https://developer.redis.com/develop/dotnet/streams/stream-basics/
public class RedisService: IRedisService {
private IConnectionMultiplexer _cache;
private ChannelMessageQueue _channel;
public RedisService(IConnectionMultiplexer cache) {
_cache = cache;
_channel = _cache.GetSubscriber().Subscribe(RedisChannel.Literal("lol"));
}
///
/// Version Pub/Sub
///
public async Task Subscribe(CancellationToken cToken) {
var mess = await _channel.ReadAsync(cToken);
var comm = JsonConvert.DeserializeObject(mess.Message);
if (comm is not null)
return comm;
else return null;
}
///
/// Version Pub/Sub
///
///
public async void Publish(CanvasCommand command) {
CanvasCommand cm = new(command);
await _cache.GetSubscriber().PublishAsync(_channel.Channel, JsonConvert.SerializeObject(cm));
}
}