public void RefreshNode(Node node) { lock (_nodeBucketLock) { var item = new NodeBucketItem(node); var bucketItem = _items.FirstOrDefault(x => x.Equals(item)); bucketItem?.OnContactReceived(); } }
public void RemoveNode(Node node) { lock (_nodeBucketLock) { var item = new NodeBucketItem(node); if (_items.Contains(item)) { _items.Remove(item); } } }
public void RefreshNode(Node node) { lock (_nodeBucketLock) { NodeBucketItem item = new NodeBucketItem(node, DateTime.UtcNow); var bucketItem = _items.Find(item); if (bucketItem != null) { bucketItem.Value.OnContactReceived(); _items.Remove(item); _items.AddFirst(item); } } }
public void ReplaceNode(Node nodeToRemove, Node nodeToAdd) { lock (_nodeBucketLock) { var item = new NodeBucketItem(nodeToRemove); if (_items.Contains(item)) { _items.Remove(item); } item = new NodeBucketItem(nodeToAdd); if (!_items.Contains(item)) { _items.Add(item); } } }
public void ReplaceNode(Node nodeToRemove, Node nodeToAdd) { lock (_nodeBucketLock) { NodeBucketItem item = new NodeBucketItem(nodeToRemove, DateTime.Now); if (_items.Contains(item)) { _items.Remove(item); AddNode(nodeToAdd); } else { throw new InvalidOperationException( "Cannot replace non-existing node in the node table bucket"); } } }
public NodeAddResult AddNode(Node node) { lock (_nodeBucketLock) { if (_items.Count < BucketSize) { var item = new NodeBucketItem(node); if (!_items.Contains(item)) { _items.Add(item); } return(NodeAddResult.Added()); } var evictionCandidate = GetEvictionCandidate(); return(NodeAddResult.Full(evictionCandidate)); } }
public NodeAddResult AddNode(Node node) { lock (_nodeBucketLock) { if (_items.Count < BucketSize) { NodeBucketItem item = new NodeBucketItem(node, DateTime.UtcNow); if (!_items.Contains(item)) { _items.AddFirst(item); } return(NodeAddResult.Added()); } NodeBucketItem evictionCandidate = GetEvictionCandidate(); return(NodeAddResult.Full(evictionCandidate)); } }