Example #1
0
        public void Send_And_Receive_Continuous_Request_With_Error()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            t2.RequestReceived += (s, e) =>
            {
                ProgressRequest receivedRequest = e.Message.Object as ProgressRequest;

                Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i < receivedRequest.Count; i++)
                    {
                        t2.SendResponse(new ProgressResponse()
                        {
                            Value = i
                        }, e.Message.Token);
                        Thread.Sleep(receivedRequest.Interval);
                    }

                    t2.SendErrorResponse("Test Exception", e.Message.Token);

                    Thread.Sleep(receivedRequest.Interval);

                    t2.SendResponse(new ProgressResponse()
                    {
                        Value = receivedRequest.Count
                    }, e.Message.Token, new ResonanceResponseConfig()
                    {
                        Completed = true
                    });
                });
            };

            int  currentValue = -1;
            bool isCompleted  = false;
            bool hasError     = false;

            var request = new ProgressRequest()
            {
                Count = 100, Interval = TimeSpan.FromMilliseconds(30)
            };
            var subscription = t1.SendContinuousRequest <ProgressRequest, ProgressResponse>(request).Subscribe((response) =>
            {
                //Response

                Assert.IsTrue(response.Value == currentValue + 1);

                currentValue = response.Value;
            }, (ex) =>
            {
                //Error
                hasError = true;

                Assert.AreEqual(ex.Message, "Test Exception");
            }, () =>
            {
                //Completed
                isCompleted = true;
            });

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                subscription.Wait();
            }, "Test Exception");

            Assert.AreEqual(currentValue, request.Count - 1);
            Assert.IsFalse(isCompleted);
            Assert.IsTrue(hasError);

            t1.Dispose(true);
            t2.Dispose(true);
        }