1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-08 00:16:27 +00:00
This commit is contained in:
JKorf 2023-12-04 21:31:52 +01:00
parent b640690a0f
commit 12d5783625
3 changed files with 64 additions and 54 deletions

View File

@ -87,67 +87,72 @@ namespace CryptoExchange.Net.Converters
return idInstance; return idInstance;
} }
} }
else
{
// Message not identified
// TODO return
}
} }
PostInspectResult? inspectResult = null; PostInspectResult? inspectResult = null;
object? usedParser = null; object? usedParser = null;
if (token.Type == JTokenType.Object) //if (token.Type == JTokenType.Object)
{ //{
foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectCallback>()) // foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectCallback>())
{ // {
bool allFieldsPresent = true; // bool allFieldsPresent = true;
foreach (var field in callback.TypeFields) // foreach (var field in callback.TypeFields)
{ // {
var value = accessor.GetStringValue(field.Key); // var value = accessor.GetStringValue(field.Key);
if (value == null) // if (value == null)
{ // {
if (field.Required) // if (field.Required)
{ // {
allFieldsPresent = false; // allFieldsPresent = false;
break; // break;
} // }
} // }
} // }
if (allFieldsPresent) // if (allFieldsPresent)
{ // {
inspectResult = callback.Callback(accessor, processors); // inspectResult = callback.Callback(accessor, processors);
usedParser = callback; // usedParser = callback;
if (inspectResult.Type != null) // if (inspectResult.Type != null)
break; // break;
} // }
} // }
} //}
else //else
{ //{
foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectArrayCallback>()) // foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectArrayCallback>())
{ // {
var typeIdArrayDict = new Dictionary<int, string>(); // var typeIdArrayDict = new Dictionary<int, string>();
bool allFieldsPresent = true; // bool allFieldsPresent = true;
var maxIndex = callback.TypeFields.Max(); // var maxIndex = callback.TypeFields.Max();
if (((JArray)token).Count <= maxIndex) // if (((JArray)token).Count <= maxIndex)
continue; // continue;
foreach (var field in callback.TypeFields) // foreach (var field in callback.TypeFields)
{ // {
var value = token[field]; // var value = token[field];
if (value == null) // if (value == null)
{ // {
allFieldsPresent = false; // allFieldsPresent = false;
break; // break;
} // }
typeIdArrayDict[field] = value.ToString(); // typeIdArrayDict[field] = value.ToString();
} // }
if (allFieldsPresent) // if (allFieldsPresent)
{ // {
inspectResult = callback.Callback(typeIdArrayDict, processors); // inspectResult = callback.Callback(typeIdArrayDict, processors);
usedParser = callback; // usedParser = callback;
break; // break;
} // }
} // }
} //}
if (usedParser == null) if (usedParser == null)
{ {

View File

@ -15,7 +15,7 @@ namespace CryptoExchange.Net.Objects.Sockets
public Func<WebSocketMessageType, Stream, Stream>? PreProcessCallback { get; set; } public Func<WebSocketMessageType, Stream, Stream>? PreProcessCallback { get; set; }
public List<PreInspectCallback> PreInspectCallbacks { get; set; } = new List<PreInspectCallback>(); public List<PreInspectCallback> PreInspectCallbacks { get; set; } = new List<PreInspectCallback>();
public Func<IMessageAccessor, string?> GetIdentity { get; set; } public Func<IMessageAccessor, string?> GetIdentity { get; set; }
public List<object> PostInspectCallbacks { get; set; } = new List<object>(); //public List<object> PostInspectCallbacks { get; set; } = new List<object>();
public Func<JToken, Type, BaseParsedMessage> ObjectInitializer { get; set; } = SocketConverter.InstantiateMessageObject; public Func<JToken, Type, BaseParsedMessage> ObjectInitializer { get; set; } = SocketConverter.InstantiateMessageObject;
} }

View File

@ -308,6 +308,7 @@ namespace CryptoExchange.Net.Sockets
/// Handle a message /// Handle a message
/// </summary> /// </summary>
/// <param name="stream"></param> /// <param name="stream"></param>
/// <param name="type"></param>
/// <returns></returns> /// <returns></returns>
protected virtual async Task HandleStreamMessage(WebSocketMessageType type, Stream stream) protected virtual async Task HandleStreamMessage(WebSocketMessageType type, Stream stream)
{ {
@ -439,6 +440,10 @@ namespace CryptoExchange.Net.Sockets
_socket.Dispose(); _socket.Dispose();
} }
/// <summary>
/// Whether or not a new subscription can be added to this connection
/// </summary>
/// <returns></returns>
public bool CanAddSubscription() => Status == SocketStatus.None || Status == SocketStatus.Connected; public bool CanAddSubscription() => Status == SocketStatus.None || Status == SocketStatus.Connected;
/// <summary> /// <summary>