From 2b1d10fe02390c2b74c6b5288e127bc915e02397 Mon Sep 17 00:00:00 2001 From: Jkorf Date: Wed, 3 Dec 2025 16:27:10 +0100 Subject: [PATCH] wip --- CryptoExchange.Net/Sockets/MessageRouter.cs | 23 +++++++++++++++++++ .../Sockets/SocketConnection.cs | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) 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);