public int Update(Peer peer, BindingKey subscription, UpdateAction action) { if (IsLeaf(subscription)) { var update = UpdateList(peer, action); _peerCountIncludingChildren += update; return(update); } var nextPart = subscription.GetPartToken(_nextPartIndex); if (subscription.IsSharp(_nextPartIndex) || nextPart == null) { return(UpdateChildNode(GetOrCreateSharpNode(), peer, subscription, action, null, _removeSharpNode)); } if (subscription.IsStar(_nextPartIndex)) { return(UpdateChildNode(GetOrCreateStarNode(), peer, subscription, action, null, _removeStarNode)); } var childNode = GetOrAddChildNode(nextPart); return(UpdateChildNode(childNode, peer, subscription, action, nextPart, _removeNode !)); }
public bool Matches(BindingKey routingKey) { if (BindingKey.IsEmpty) return true; for (var i = 0; i < routingKey.PartCount; i++) { var evaluatedPart = BindingKey.GetPartToken(i); if (evaluatedPart == "#") return true; if (evaluatedPart != "*" && routingKey.GetPartToken(i) != evaluatedPart) return false; } return routingKey.PartCount == BindingKey.PartCount; }
public void Accept(PeerCollector peerCollector, BindingKey routingKey) { if (IsLeaf(routingKey)) { peerCollector.Offer(_peers); return; } _sharpNode?.AddAllPeers(peerCollector); _starNode?.Accept(peerCollector, routingKey); var nextPart = routingKey.GetPartToken(_nextPartIndex); if (nextPart == null || _childNodes == null) { return; } if (_childNodes.TryGetValue(nextPart, out var childNode)) { childNode.Accept(peerCollector, routingKey); } }
public bool Matches(BindingKey routingKey) { if (BindingKey.IsEmpty) { return(true); } for (var i = 0; i < routingKey.PartCount; i++) { var evaluatedPart = BindingKey.GetPartToken(i); if (evaluatedPart == "#") { return(true); } if (evaluatedPart != "*" && routingKey.GetPartToken(i) != evaluatedPart) { return(false); } } return(routingKey.PartCount == BindingKey.PartCount); }