public void RefreshNode(Node node) { lock (_nodeBucketLock) { var item = new NodeBucketItem(node); var bucketItem = _items.FirstOrDefault(x => x.Equals(item)); bucketItem?.OnContactReveived(); } }
public void RemoveNode(Node node) { lock (_nodeBucketLock) { var item = new NodeBucketItem(node); if (_items.Contains(item)) { _items.Remove(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 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)); } }