コード例 #1
0
        public void TestMessageDeserialization()
        {
            var process = Process.Start(
                new NvimProcessStartInfo(StartOption.Embed | StartOption.Headless));

            var context = new SerializationContext();

            context.Serializers.Register(new NvimMessageSerializer(context));
            var serializer = MessagePackSerializer.Get <NvimMessage>(context);

            const string testString = "hello world";
            var          request    = new NvimRequest
            {
                MessageId = 42,
                Method    = "nvim_eval",
                Arguments = new MessagePackObject(new MessagePackObject[] { $"'{testString}'" })
            };

            serializer.Pack(process.StandardInput.BaseStream, request);

            var response = (NvimResponse)serializer.Unpack(process.StandardOutput.BaseStream);

            Assert.IsTrue(response.MessageId == request.MessageId &&
                          response.Error == MessagePackObject.Nil &&
                          response.Result == testString);
        }
コード例 #2
0
ファイル: NvimAPI.cs プロジェクト: neovim/nvim.net
        private Task <NvimResponse> SendAndReceive(NvimRequest request)
        {
            request.MessageId = _messageIdCounter++;
            var pendingRequest = new PendingRequest();

            _pendingRequests[request.MessageId] = pendingRequest;
            _messageQueue.Add(request);
            return(pendingRequest.GetResponse());
        }
コード例 #3
0
ファイル: NvimAPI.cs プロジェクト: neovim/nvim.net
        private Task <TResult> SendAndReceive <TResult>(NvimRequest request)
        {
            return(SendAndReceive(request)
                   .ContinueWith(task =>
            {
                var response = task.Result;
                var result = ConvertFromMessagePackObject(response.Result);
                if (typeof(TResult).IsArray)
                {
                    var objectArray = (object[])result;
                    var resultArray = Array.CreateInstance(
                        typeof(TResult).GetElementType(),
                        objectArray.Length);
                    Array.Copy(objectArray, resultArray, resultArray.Length);
                    return (TResult)(object)resultArray;
                }

                return (TResult)result;
            }));
        }