diff --git a/src/Microsoft.Azure.SignalR.Serverless.Protocols/JsonServerlessProtocol.cs b/src/Microsoft.Azure.SignalR.Serverless.Protocols/JsonServerlessProtocol.cs index 6b78a0b..7021d32 100644 --- a/src/Microsoft.Azure.SignalR.Serverless.Protocols/JsonServerlessProtocol.cs +++ b/src/Microsoft.Azure.SignalR.Serverless.Protocols/JsonServerlessProtocol.cs @@ -4,7 +4,6 @@ using System; using System.Buffers; using System.IO; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -18,42 +17,26 @@ public class JsonServerlessProtocol : IServerlessProtocol public bool TryParseMessage(ref ReadOnlySequence input, out ServerlessMessage message) { - var textReader = new JsonTextReader(new StreamReader(new ReadOnlySequenceStream(input))); - var jObject = JObject.Load(textReader); - if (jObject.TryGetValue(TypePropertyName, StringComparison.OrdinalIgnoreCase, out var token)) - { - var type = token.Value(); - switch (type) - { - case ServerlessProtocolConstants.InvocationMessageType: - message = SafeParseMessage(jObject); - break; - case ServerlessProtocolConstants.OpenConnectionMessageType: - message = SafeParseMessage(jObject); - break; - case ServerlessProtocolConstants.CloseConnectionMessageType: - message = SafeParseMessage(jObject); - break; - default: - message = null; - break; - } - return message != null; - } message = null; - return false; - } + using var inputStream = new ReadOnlySequenceStream(input); + using var streamReader = new StreamReader(inputStream); + using var textReader = new JsonTextReader(streamReader); - private ServerlessMessage SafeParseMessage(JObject jObject) where T : ServerlessMessage - { try { - return jObject.ToObject(); - } - catch - { - return null; + var jObject = JObject.Load(textReader); + if (jObject.TryGetValue(TypePropertyName, StringComparison.OrdinalIgnoreCase, out var token) + && token.Type == JTokenType.Integer) + message = token.Value() switch + { + ServerlessProtocolConstants.InvocationMessageType => jObject.ToObject(), + ServerlessProtocolConstants.OpenConnectionMessageType => jObject.ToObject(), + ServerlessProtocolConstants.CloseConnectionMessageType => jObject.ToObject(), + _ => null, + }; } + catch { } + return message != null; } } } \ No newline at end of file