From c931a60cb761ec9b6c38630c6c3f0d2de433104c Mon Sep 17 00:00:00 2001 From: JKorf Date: Tue, 12 Dec 2023 21:38:40 +0100 Subject: [PATCH] wip --- .../Converters/SocketConverter.cs | 25 +++++++++++-------- .../Sockets/SocketConnection.cs | 2 +- .../Sockets/SocketListenerManager.cs | 13 +++++----- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/CryptoExchange.Net/Converters/SocketConverter.cs b/CryptoExchange.Net/Converters/SocketConverter.cs index d7e6fa3..93d4202 100644 --- a/CryptoExchange.Net/Converters/SocketConverter.cs +++ b/CryptoExchange.Net/Converters/SocketConverter.cs @@ -23,7 +23,7 @@ namespace CryptoExchange.Net.Converters public abstract MessageInterpreterPipeline InterpreterPipeline { get; } /// - public BaseParsedMessage? ReadJson(WebSocketMessageType websocketMessageType, Stream stream, Dictionary processors, bool outputOriginalData) + public BaseParsedMessage? ReadJson(WebSocketMessageType websocketMessageType, Stream stream, SocketListenerManager listenerManager, bool outputOriginalData) { // Start reading the data // Once we reach the properties that identify the message we save those in a dict @@ -73,19 +73,22 @@ namespace CryptoExchange.Net.Converters var identity = InterpreterPipeline.GetIdentity(accessor); if (identity != null) { - if (processors.TryGetValue(identity, out var type)) + var result = listenerManager.IdToType(identity); + if (result == null) { - var idInstance = InterpreterPipeline.ObjectInitializer(token, type); - if (outputOriginalData) - { - stream.Position = 0; - idInstance.OriginalData = sr.ReadToEnd(); - } - idInstance.Identifier = identity; - idInstance.Parsed = true; - return idInstance; } + + var idInstance = InterpreterPipeline.ObjectInitializer(token, result!); + if (outputOriginalData) + { + stream.Position = 0; + idInstance.OriginalData = sr.ReadToEnd(); + } + + idInstance.Identifier = identity; + idInstance.Parsed = true; + return idInstance; } else { diff --git a/CryptoExchange.Net/Sockets/SocketConnection.cs b/CryptoExchange.Net/Sockets/SocketConnection.cs index f876b12..fde3f31 100644 --- a/CryptoExchange.Net/Sockets/SocketConnection.cs +++ b/CryptoExchange.Net/Sockets/SocketConnection.cs @@ -312,7 +312,7 @@ namespace CryptoExchange.Net.Sockets /// protected virtual async Task HandleStreamMessage(WebSocketMessageType type, Stream stream) { - var result = ApiClient.StreamConverter.ReadJson(type, stream, _listenerManager.GetMapping(), ApiClient.ApiOptions.OutputOriginalData ?? ApiClient.ClientOptions.OutputOriginalData); + var result = ApiClient.StreamConverter.ReadJson(type, stream, _listenerManager, ApiClient.ApiOptions.OutputOriginalData ?? ApiClient.ClientOptions.OutputOriginalData); if(result == null) { // Not able to parse at all diff --git a/CryptoExchange.Net/Sockets/SocketListenerManager.cs b/CryptoExchange.Net/Sockets/SocketListenerManager.cs index 9f4c77f..888cda6 100644 --- a/CryptoExchange.Net/Sockets/SocketListenerManager.cs +++ b/CryptoExchange.Net/Sockets/SocketListenerManager.cs @@ -5,13 +5,11 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Net.Sockets; -using System.Text; using System.Threading.Tasks; namespace CryptoExchange.Net.Sockets { - internal class SocketListenerManager + public class SocketListenerManager { private ILogger _logger; private int _socketId; @@ -29,10 +27,13 @@ namespace CryptoExchange.Net.Sockets _socketId = socketId; } - public Dictionary GetMapping() + public Type? IdToType(string id) { - lock (this) - return _typeMap; + lock (_lock) + { + _typeMap.TryGetValue(id, out var type); + return type; + } } public List GetListenIds()