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);