using Microsoft.Extensions.Configuration; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MP.MONO.Data { public class MessagePipe { private IConnectionMultiplexer redis; /// /// Canale associato al gestore pipeline messaggi /// private string _channel { get; set; } = ""; public event EventHandler EA_NewMessage = delegate { }; public MessagePipe(IConnectionMultiplexer redisConn, string channelName) { _channel = channelName; redis = redisConn; // aggiungo sottoscrittore setupSubscriber(); } private void setupSubscriber() { ISubscriber sub = redis.GetSubscriber(); //Subscribe to the channel named messages sub.Subscribe(_channel, (channel, message) => { //Output received message Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {message}"); PubSubEventArgs mea = new PubSubEventArgs(message); // se qualcuno ascolta sollevo evento nuovo valore... if (EA_NewMessage != null) { EA_NewMessage(this, mea); } }); Console.WriteLine($"subscribed {_channel}"); //Console.ReadKey(); } /// /// Invio messaggio sul canale /// /// /// public bool sendMessage(string newMess) { bool answ = false; ISubscriber sub = redis.GetSubscriber(); sub.Publish(_channel, newMess); return answ; } } public class PubSubEventArgs : EventArgs { public string newMessage { get; set; } = ""; public PubSubEventArgs(string messaggio) { this.newMessage = messaggio; } } }