Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        internal static async Task RunReqRep(SocketConfiguration configuration)
        {
            using var rqRep = new RqRep(configuration);

            SetupResponder(rqRep);

            System.Console.WriteLine("try request");
            await RequestAndWriteResultAsync(rqRep);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
 ///<inheritdoc/>
 internal Socket(SocketConfiguration config)
 {
     _rqRep       = new RqRep(config);
     _pubSub      = new PubSub(config);
     _sendReceive = new SendReceive(config);
 }
Esempio n. 10
0
 private async Task DoMultipleRequestAsync(RqRep sut, int input, List <(int, int)> input_output_Tuples)