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); }
private Task <NvimResponse> SendAndReceive(NvimRequest request) { request.MessageId = _messageIdCounter++; var pendingRequest = new PendingRequest(); _pendingRequests[request.MessageId] = pendingRequest; _messageQueue.Add(request); return(pendingRequest.GetResponse()); }
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; })); }