Beispiel #1
0
        private IReadOnlyList <byte[]> Receive()
        {
            var res     = new List <byte[]>();
            var hasMore = true;

            while (hasMore)
            {
                res.Add(_socket.Recv());
                hasMore = _socket.HasMoreToRecv();
            }

            return(res);
        }
Beispiel #2
0
        private void OnRecvWorker()
        {
            var polling = new Polling(PollingEvents.RecvReady, this._socket);

            polling.RecvReady += socket =>
            {
                var topic          = _socket.RecvString();
                var messageInBytes = _socket.Recv();
                var message        = _deserializer(messageInBytes);

                this.OnReceived(topic, message);
            };

            try
            {
                while (_started)
                {
                    polling.Poll(1000);
                }
            }
            catch (ZmqException e)
            {
                if (LogAdapter.LogEnabled)
                {
                    LogAdapter.LogDebug(this.GetType().FullName, "BaseSubscriber exception. Disposing. Details: " + e.ToString());
                }

                this.Dispose();
            }
        }
Beispiel #3
0
        public void Start()
        {
            _reply.Bind(_endpoint);

            var t = new Thread((_) =>
            {
                try
                {
                    while (true)
                    {
                        var data = _reply.Recv();

                        if (data != null)
                        {
                            OnRequestReceived(data, _reply);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogAdapter.LogError("Listener", e.ToString());
                }
            })
            {
                IsBackground = true
            };

            t.Start();
        }
Beispiel #4
0
        private Tuple <T, bool> SendReqAndWaitReply(IZmqSocket socket)
        {
            SendRequest(socket);

            var polling = new Polling(PollingEvents.RecvReady, socket);

            if (polling.Poll(this.Timeout))
            {
                var data = socket.Recv();
                var ret  = GetReply(data, socket, false);
                return(Tuple.Create(ret, false));
            }
            else
            {
                // timeout
                var ret = GetReply(null, socket, true);
                return(Tuple.Create(ret, true));
            }
        }
Beispiel #5
0
        private void EventsWorker()
        {
            try
            {
                while (!_disposed)
                {
                    var binary = _pairSocket.Recv();

                    if (binary == null || binary.Length == 0)
                    {
                        continue;
                    }

                    var ev  = (MonitorEvents)BitConverter.ToUInt16(binary, 0);
                    int val = 0;

                    if (binary.Length > sizeof(UInt16))
                    {
                        val = BitConverter.ToInt32(binary, sizeof(UInt16));
                    }

                    ZmqError error   = null;
                    var      address = "";

                    switch (ev)
                    {
                    case MonitorEvents.BindFailed:
                    case MonitorEvents.AcceptFailed:
                    case MonitorEvents.CloseFailed:
                        address = _pairSocket.RecvString();
                        error   = new ZmqError(val);
                        break;

                    case MonitorEvents.MonitorStopped:
                        break;

                    default:
                        address = _pairSocket.RecvString();
                        break;
                    }

                    FireEvent(ev, address, error);
                }
            }
            catch (ZmqException ex)
            {
                if (ex.ZmqErrorCode != ZmqErrorCode.ETERM)
                {
                    if (LogAdapter.LogEnabled)
                    {
                        LogAdapter.LogError("Monitor", ex.ToString());
                    }
                }
            }
            catch (Exception e)
            {
                if (LogAdapter.LogEnabled)
                {
                    LogAdapter.LogError("Monitor", e.ToString());
                }
            }
            finally
            {
                this.Dispose();
            }
        }
        public static byte[] Recv(this IZmqSocket source, RecvFlags flags)
        {
            bool doNotWait = (flags & RecvFlags.DoNotWait) != 0;

            return(source.Recv(doNotWait));
        }