diff --git a/CryptoExchange.Net/Sockets/MessageRouter.cs b/CryptoExchange.Net/Sockets/MessageRouter.cs index 053a506..b52145f 100644 --- a/CryptoExchange.Net/Sockets/MessageRouter.cs +++ b/CryptoExchange.Net/Sockets/MessageRouter.cs @@ -2,6 +2,7 @@ using CryptoExchange.Net.Objects; using CryptoExchange.Net.Objects.Sockets; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; @@ -91,6 +92,28 @@ namespace CryptoExchange.Net.Sockets return new MessageRouter(routes.ToArray()); } + /// + /// Create message matcher + /// + public static MessageRouter CreateWithOptionalTopicFilters(IEnumerable typeIdentifiers, IEnumerable? topicFilters, Func handler) + { + var routes = new List(); + foreach (var typeIdentifier in typeIdentifiers) + { + if (topicFilters?.Count() > 0) + { + foreach (var filter in topicFilters) + routes.Add(new MessageRoute(typeIdentifier, filter, handler)); + } + else + { + routes.Add(new MessageRoute(typeIdentifier, null, handler)); + } + } + + return new MessageRouter(routes.ToArray()); + } + /// /// Create message matcher /// diff --git a/CryptoExchange.Net/Sockets/SocketConnection.cs b/CryptoExchange.Net/Sockets/SocketConnection.cs index 7d64ba7..62bcb80 100644 --- a/CryptoExchange.Net/Sockets/SocketConnection.cs +++ b/CryptoExchange.Net/Sockets/SocketConnection.cs @@ -635,10 +635,10 @@ namespace CryptoExchange.Net.Sockets var subscription = _listeners[i]; foreach (var route in subscription.MessageRouter.Routes) { - if (route.DeserializationType != deserializationType) + if (route.TypeIdentifier != typeIdentifier) continue; - if (topicFilter == null || route.TopicFilter == null || route.TopicFilter.Contains(topicFilter)) + if (topicFilter == null || route.TopicFilter == null || route.TopicFilter.Equals(topicFilter, StringComparison.Ordinal)) { processed = true; subscription.Handle(this, receiveTime, originalData, result, route);