using StackExchange.Redis; namespace MP.MONO.Data { public class MessagePipe { #region Private Fields private IConnectionMultiplexer redis; #endregion Private Fields #region Public Constructors public MessagePipe(IConnectionMultiplexer redisConn, string channelName) { _channel = channelName; redis = redisConn; // aggiungo sottoscrittore setupSubscriber(); } #endregion Public Constructors #region Public Events public event EventHandler EA_NewMessage = delegate { }; #endregion Public Events #region Private Properties /// /// Canale associato al gestore pipeline messaggi /// private string _channel { get; set; } = ""; #endregion Private Properties #region Private Methods 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(); } #endregion Private Methods #region Public Methods /// /// Invio messaggio sul canale /// /// /// public bool sendMessage(string newMess) { bool answ = false; ISubscriber sub = redis.GetSubscriber(); sub.Publish(_channel, newMess); return answ; } #endregion Public Methods } public class PubSubEventArgs : EventArgs { #region Public Constructors public PubSubEventArgs(string messaggio) { this.newMessage = messaggio; } #endregion Public Constructors #region Public Properties public string newMessage { get; set; } = ""; #endregion Public Properties } }