Пример #1
0
        public PendingReceive Receive(SelectiveConsumer <T> consumer)
        {
            if (ReceiveWaitingMessage(consumer))
            {
                return(null);
            }

            var pending = new PendingReceiveImpl <T>(consumer, x => _receivers.Remove(x));

            _receivers.Add(pending);

            return(pending);
        }
Пример #2
0
        public PendingReceive Receive(SelectiveConsumer <T> consumer, TimeSpan timeout, Action timeoutCallback)
        {
            if (ReceiveWaitingMessage(consumer))
            {
                return(null);
            }

            var pending = new PendingReceiveImpl <T>(consumer, timeoutCallback, x => _receivers.Remove(x));

            pending.ScheduleTimeout(x => _scheduler.Schedule(timeout, _fiber, x.Timeout));

            _receivers.Add(pending);

            return(pending);
        }
Пример #3
0
        bool DeliverToWaitingReceiver(T message)
        {
            for (int i = 0; i < _receivers.Count; i++)
            {
                PendingReceiveImpl <T> receiver = _receivers[i];

                Consumer <T> consumer = receiver.Accept(message);
                if (consumer == null)
                {
                    continue;
                }

                consumer(message);

                return(true);
            }

            return(false);
        }