public bool TryParseMessage(ref ReadOnlySequence <byte> 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 <int>(); switch (type) { case ServerlessProtocolConstants.InvocationMessageType: message = SafeParseMessage <InvocationMessage>(jObject); break; case ServerlessProtocolConstants.OpenConnectionMessageType: message = SafeParseMessage <OpenConnectionMessage>(jObject); break; case ServerlessProtocolConstants.CloseConnectionMessageType: message = SafeParseMessage <CloseConnectionMessage>(jObject); break; default: message = null; break; } return(message != null); } message = null; return(false); }
public bool TryParseMessage(ref ReadOnlySequence <byte> input, out ServerlessMessage message) { var array = input.ToArray(); var startOffset = 0; _ = MessagePackBinary.ReadArrayHeader(array, startOffset, out var readSize); startOffset += readSize; var messageType = MessagePackHelper.ReadInt32(array, ref startOffset, "messageType"); switch (messageType) { case ServerlessProtocolConstants.InvocationMessageType: message = ConvertInvocationMessage(array, ref startOffset); break; default: // TODO:OpenConnectionMessage and CloseConnectionMessage only will be sent in JSON format. It can be added later. message = null; break; } return(message != null); }