Files
mapo-mono/MP.MONO.Data/MessagePipe.cs
T
2022-03-08 15:27:23 +01:00

99 lines
2.4 KiB
C#

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
/// <summary>
/// Canale associato al gestore pipeline messaggi
/// </summary>
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
/// <summary>
/// Invio messaggio sul canale
/// </summary>
/// <param name="newMess"></param>
/// <returns></returns>
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
}
}