1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 16:06:15 +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;
}
}
else
{
// Message not identified
// TODO return
}
}
PostInspectResult? inspectResult = null;
object? usedParser = null;
if (token.Type == JTokenType.Object)
{
foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectCallback>())
{
bool allFieldsPresent = true;
foreach (var field in callback.TypeFields)
{
var value = accessor.GetStringValue(field.Key);
if (value == null)
{
if (field.Required)
{
allFieldsPresent = false;
break;
}
}
}
//if (token.Type == JTokenType.Object)
//{
// foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectCallback>())
// {
// bool allFieldsPresent = true;
// foreach (var field in callback.TypeFields)
// {
// var value = accessor.GetStringValue(field.Key);
// if (value == null)
// {
// if (field.Required)
// {
// allFieldsPresent = false;
// break;
// }
// }
// }
if (allFieldsPresent)
{
inspectResult = callback.Callback(accessor, processors);
usedParser = callback;
if (inspectResult.Type != null)
break;
}
}
}
else
{
foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectArrayCallback>())
{
var typeIdArrayDict = new Dictionary<int, string>();
bool allFieldsPresent = true;
var maxIndex = callback.TypeFields.Max();
if (((JArray)token).Count <= maxIndex)
continue;
// if (allFieldsPresent)
// {
// inspectResult = callback.Callback(accessor, processors);
// usedParser = callback;
// if (inspectResult.Type != null)
// break;
// }
// }
//}
//else
//{
// foreach (var callback in InterpreterPipeline.PostInspectCallbacks.OfType<PostInspectArrayCallback>())
// {
// var typeIdArrayDict = new Dictionary<int, string>();
// bool allFieldsPresent = true;
// var maxIndex = callback.TypeFields.Max();
// if (((JArray)token).Count <= maxIndex)
// continue;
foreach (var field in callback.TypeFields)
{
var value = token[field];
if (value == null)
{
allFieldsPresent = false;
break;
}
// foreach (var field in callback.TypeFields)
// {
// var value = token[field];
// if (value == null)
// {
// allFieldsPresent = false;
// break;
// }
typeIdArrayDict[field] = value.ToString();
}
// typeIdArrayDict[field] = value.ToString();
// }
if (allFieldsPresent)
{
inspectResult = callback.Callback(typeIdArrayDict, processors);
usedParser = callback;
break;
}
}
}
// if (allFieldsPresent)
// {
// inspectResult = callback.Callback(typeIdArrayDict, processors);
// usedParser = callback;
// break;
// }
// }
//}
if (usedParser == null)
{

View File

@ -15,7 +15,7 @@ namespace CryptoExchange.Net.Objects.Sockets
public Func<WebSocketMessageType, Stream, Stream>? PreProcessCallback { get; set; }
public List<PreInspectCallback> PreInspectCallbacks { get; set; } = new List<PreInspectCallback>();
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;
}

View File

@ -308,6 +308,7 @@ namespace CryptoExchange.Net.Sockets
/// Handle a message
/// </summary>
/// <param name="stream"></param>
/// <param name="type"></param>
/// <returns></returns>
protected virtual async Task HandleStreamMessage(WebSocketMessageType type, Stream stream)
{
@ -439,6 +440,10 @@ namespace CryptoExchange.Net.Sockets
_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;
/// <summary>