public async Task Multiple_Threads_Send_To_One_Responder_Works(object configuration) { // Arrange var sut = new RqRep((SocketConfiguration)configuration); sut.Respond <Request, Response>(rq => new Response { ResponseNumber = rq.RequestNumber }); var input_output_Tuples = new List <(int, int)>(); var taskList = new List <Task>() { DoMultipleRequestAsync(sut, 1, input_output_Tuples), DoMultipleRequestAsync(sut, 2, input_output_Tuples), DoMultipleRequestAsync(sut, 3, input_output_Tuples), }; // Act await Task.WhenAll(taskList); // Assert foreach (var(_in, _out) in input_output_Tuples) { Assert.Equal(_in, _out); } sut.Dispose(); }
internal static async Task RunReqRep(SocketConfiguration configuration) { using var rqRep = new RqRep(configuration); SetupResponder(rqRep); System.Console.WriteLine("try request"); await RequestAndWriteResultAsync(rqRep); }
internal static void SetupResponder(RqRep rqRep, CancellationToken token = default) { rqRep.Respond <Request, Response>((rq) => { System.Console.WriteLine(); System.Console.WriteLine("now calling the factory"); System.Console.WriteLine(); var rsp = new Response(); rsp.InsideResponse += " " + rq.FromRequest; return(rsp); }, cancellationToken: token); }
internal static async Task RequestAndWriteResultAsync(RqRep rqRep) { XtResult <Response> result = await rqRep.RequestAsync <Request, Response>(new Request()); System.Console.WriteLine(result); if (result.IsSuccess) { System.Console.WriteLine("SUCCESS!! " + result.GetResult().InsideResponse); } else { System.Console.WriteLine("FAILURE!! " + result.Exception); } }
internal static async Task AsyncServer(SocketConfiguration configuration) { using var socket = new RqRep(configuration); socket.RespondAsync <Request, Response>(async r => { await Task.Delay(100); return(new Response { InsideResponse = "waited asynchronously for 100ms" }); } ); await RequestAndWriteResultAsync(socket); }
public async Task SimpleRequestAndReply_Fails_when_factory_throws_Exception_But_still_gets_an_answer(object configuration) { // Arrange var sut = new RqRep((SocketConfiguration)configuration); sut.Respond <Request, Response>(rq => throw new TimeoutException()); // Act var xtResult = await sut.RequestAsync <Request, Response>(new Request { RequestNumber = 42 }); // Assert Assert.False(xtResult.IsSuccess); Assert.NotNull(xtResult.Exception); sut.Dispose(); }
internal static async Task CancellationTokenOnRunningTask(SocketConfiguration configuration) { var socket = new RqRep(configuration); using var cts = new CancellationTokenSource(); var token = cts.Token; SetupResponder(socket, token: token); cts.Cancel(); // the first one will always come through, no matter what System.Console.WriteLine("try multiple requests"); foreach (var item in Enumerable.Range(0, 3)) { await RequestAndWriteResultAsync(socket); } }
public async Task SimpleRequestAndReply_InProc() { // Arrange var sut = new RqRep(new ConfigurationTestData().GetSocketConfigInProc); sut.Respond <Request, Response>(rq => new Response { ResponseNumber = rq.RequestNumber }); // Act var xtResult = await sut.RequestAsync <Request, Response>(new Request { RequestNumber = 42 }); // Assert Assert.True(xtResult.IsSuccess); Assert.Equal(42, xtResult.GetResult().ResponseNumber); sut.Dispose(); }
///<inheritdoc/> internal Socket(SocketConfiguration config) { _rqRep = new RqRep(config); _pubSub = new PubSub(config); _sendReceive = new SendReceive(config); }
private async Task DoMultipleRequestAsync(RqRep sut, int input, List <(int, int)> input_output_Tuples)