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)); } }