75 lines
2.0 KiB
C#
75 lines
2.0 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// Canale associato al gestore pipeline messaggi
|
|
/// </summary>
|
|
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();
|
|
}
|
|
|
|
/// <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;
|
|
}
|
|
}
|
|
|
|
public class PubSubEventArgs : EventArgs
|
|
{
|
|
public string newMessage { get; set; } = "";
|
|
|
|
public PubSubEventArgs(string messaggio)
|
|
{
|
|
this.newMessage = messaggio;
|
|
}
|
|
}
|
|
}
|