private void ReceiverWorker()
{
using (var context = NetMQContext.Create())
using (var subscriber = context.CreateSubscriberSocket())
{
try
{
subscriber.Options.ReceiveBuffer = 1024 * 10;
subscriber.Bind(_address);
subscriber.Subscribe(_topic);
if (Protocol == "tcp")
{
//_publisherSocket.Connect(_address);
}
if (Protocol == "pgm") //Multicast
subscriber.Connect(_address);
var prevMsgId = new Guid();
while (!_disposed) //Forever loop until Dispose() is called.
{
var topic = subscriber.ReceiveFrameString();
var payload = subscriber.ReceiveFrameBytes();
Message message = null;
try { message = payload.FromSerializedBytes<Message>(); } catch { }
if (message == null)
try { message = payload.GetString().FromJson<Message>(); } catch { }
if (message == null) continue;
if (message.Id.Equals(prevMsgId)) continue; // Avoid ZeroMQ duplicates
if (MessageArrived == null) continue;
prevMsgId = message.Id;
MessageArrived(message);
}
subscriber.Dispose();
}
catch (Exception e)
{
Core.Settings.Current.Log.Add(e);
}
}
}