示例#1
0
        public void TryDequeue()
        {
            using (var queue = new NetMQQueue <int>())
            {
                int result;
                Assert.IsFalse(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));

                queue.Enqueue(1);

                Assert.IsTrue(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));
                Assert.AreEqual(1, result);
            }
        }
示例#2
0
        public void TryDequeue()
        {
            using (var queue = new NetMQQueue<int>())
            {
                int result;
                Assert.IsFalse(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));

                queue.Enqueue(1);

                Assert.IsTrue(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));
                Assert.AreEqual(1, result);
            }
        }
示例#3
0
        private async Task ProcessDeltaAsync(CancellationToken cancellationToken)
        {
            while (true)
            {
                PeerSetDelta delta;
                while (!_deltas.TryDequeue(out delta, TimeSpan.FromMilliseconds(100)))
                {
                    await Task.Delay(100, cancellationToken);
                }

                Peer      sender    = delta.Sender;
                PublicKey senderKey = sender.PublicKey;

                if (!_peers.ContainsKey(sender) && _peers.Keys.All(p => senderKey != p.PublicKey))
                {
                    delta = new PeerSetDelta(
                        delta.Sender,
                        delta.Timestamp,
                        delta.AddedPeers.Add(sender),
                        delta.RemovedPeers,
                        delta.ExistingPeers
                        );
                }

                _logger.Debug($"Received the delta[{delta}].");

                using (await _receiveMutex.LockAsync(cancellationToken))
                {
                    DeltaReceived.Reset();
                    _logger.Debug($"Trying to apply the delta[{delta}]...");
                    await ApplyDelta(delta, cancellationToken);

                    LastReceived = delta.Timestamp;
                    LastSeenTimestamps[delta.Sender] = delta.Timestamp;

                    DeltaReceived.Set();
                }

                _logger.Debug($"The delta[{delta}] has been applied.");
            }
        }