public async Task SerializeDynamicObject_IsSuccess() { var thing = new Thing { Key = "Key", Value = new Thing { Key = "Nested", Value = true } }; using var ms = new MemoryStream(); var serializer = new MessagePackMessageSerializer(); await serializer.SerializeAsync(ms, thing); LogManager.GetCurrentClassLogger().Info($"Data size: {ms.Position}"); ms.Position = 0; var result = await serializer.DeserializeAsync <Thing>(ms); Assert.NotNull(result); Assert.Equal("Key", result.Key); var nested = result.Value as Thing; Assert.NotNull(nested); Assert.Equal("Nested", nested.Key); Assert.Equal(true, nested.Value); }
public async Task SerializeDynamicPrimitive_IsSuccess(object value) { var thing = new Thing { Key = "Key", Value = value }; using var ms = new MemoryStream(); var serializer = new MessagePackMessageSerializer(); await serializer.SerializeAsync(ms, thing); LogManager.GetCurrentClassLogger().Info($"Data size: {ms.Position}"); ms.Position = 0; var result = await serializer.DeserializeAsync <Thing>(ms); Assert.NotNull(result); Assert.Equal("Key", result.Key); Assert.Equal(value, result.Value); }
public async Task RunAsync(Action <string> log) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); List <Task> tasks = new List <Task>(); for (int j = 0; j < ClientCount; j++) { Task clientTask = Task.Run(async() => { IMessageProcessor messageProcessor = new ClientMessageProcessor(); IMessageSerializer messageSerializer = new MessagePackMessageSerializer(); INetworkConnector networkConnector = new TcpNetworkConnector(messageSerializer, messageProcessor, Host, Port); await networkConnector.ConnectAsync(CancellationToken.None); networkConnector.Start(); MessageListener <LoginResponse> loginResponseListener = new MessageListener <LoginResponse>(); loginResponseListener.Subscribe(messageProcessor); for (int i = 0; i < MessageCount; i++) { LoginRequest loginRequest = new LoginRequest(Guid.NewGuid(), "Mario", "password"); await networkConnector.SendMessageAsync(loginRequest, CancellationToken.None); LoginResponse loginResponse = await loginResponseListener.ReceiveMessageAsync(); log.Invoke($"Success: {loginResponse.IsSuccess}, Username: {loginResponse.UserDto.Name}, RequestId: {loginResponse.RequestId}, ResponseId: {loginResponse.Id}"); } loginResponseListener.Unsubscribe(); }); tasks.Add(clientTask); } await Task.WhenAll(tasks).ContinueWith(action => { stopwatch.Stop(); log.Invoke($"Messages per second: {TotalMessages / stopwatch.Elapsed.TotalSeconds:N0}"); }); }