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);
        }
コード例 #2
0
        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);
        }