Nyan.Modules.Log.ZeroMQ.Channel.ReceiverWorker C# (CSharp) 메소드

ReceiverWorker() 개인적인 메소드

private ReceiverWorker ( ) : void
리턴 void
        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);
                }
            }
        }