private async Task RunClientAsync(IDuplexPipe pipe, LightweightRpcEndPoint endPoint, IPrincipal?user)
        {
            var client = new ClientPipeline(pipe, this, endPoint, user, this.MaxRequestSize, this.MaxResponseSize, this.KeepSizeLimitedConnectionAlive);

            try
            {
                try
                {
                    this.AddClient(client);

                    await client.RunAsync().ContextFree();
                }
                finally
                {
                    await client.DisposeAsync().ContextFree();
                }
            }
            finally
            {
                // Late removal of client (after dispose and wait) to avoid that shut down returns
                // before all clients have ended. Make sure that a client is not accidentally used
                // after dispose.
                this.RemoveClient(client);
            }
        }
        public void Client_SendMessage_ServerShouldFireMessageReceivedEvent()
        {
            // Prepare
            _server = new ServerPipeline();
            _client = new ClientPipeline(_server.ServerId);

            string message   = null;
            var    autoEvent = new AutoResetEvent(false);

            _server.MessageReceivedEvent += (sender, args) =>
            {
                message = args.Message;
                autoEvent.Set();
            };

            _server.Start();
            _client.Start();

            // Act
            _client.SendMessage("Client's message");

            // Verify
            autoEvent.WaitOne();

            Assert.AreEqual("Client's message", message);
        }
 private FaceClient(Uri baseUrl, string key, PipelineOptions options)
 {
     _options   = options;
     _baseUrl   = baseUrl;
     _keyHeader = new Header(s_keyHeaderName, key);
     _client    = ClientPipeline.Create(options, SdkName, SdkVersion);
 }
        public void Client_Disconnect_ServerShouldFireClientDisconnectedEvent()
        {
            // Prepare
            var isDisconnected = false;

            _server = new ServerPipeline();

            _server.ClientDisconnectedEvent += (sender, args) =>
            {
                isDisconnected = true;
            };

            _server.Start();
            Assert.IsFalse(isDisconnected);

            _client = new ClientPipeline(_server.ServerId);
            _client.Start();

            // Act
            _client.Stop();
            _client = null;
            Thread.Sleep(100);

            // Verify
            Assert.IsTrue(isDisconnected);
        }
        private void AddClient(ClientPipeline client)
        {
            if (this.IsStopped)
            {
                throw new ObjectDisposedException(this.ToString());
            }

            this.clients.TryAdd(client, client);
        }
        public void TearDown()
        {
            if (_client != null)
            {
                _client.Stop();
                _client = null;
            }

            if (_server != null)
            {
                _server.Stop();
                _server = null;
            }
        }
Example #7
0
        public FileUri(string file, PipelineOptions options = default)
        {
            if (options == default)
            {
                _options = new PipelineOptions();
            }
            else
            {
                _options = options;
            }

            Pipeline = ClientPipeline.Create(_options, SdkName, SdkVersion);
            _baseUri = new Uri(file);
        }
Example #8
0
        public void Basics()
        {
            var options = new PipelineOptions();

            options.Transport     = new MockTransport(500, 1);
            options.RetryPolicy   = new CustomRetryPolicy();
            options.LoggingPolicy = new TestLoggingPolicy();
            options.Logger        = new MockLogger();

            var pipeline = ClientPipeline.Create(options, "test", "1.0.0");

            using (var context = pipeline.CreateContext(options, cancellation: default))
            {
                context.SetRequestLine(ServiceMethod.Get, new Uri("https://contoso.a.io"));
                pipeline.ProcessAsync(context).Wait();

                Assert.AreEqual(1, context.Response.Status);
                var result = options.LoggingPolicy.ToString();
                Assert.AreEqual("REQUEST: Get https://contoso.a.io/\nRESPONSE: 500\nREQUEST: Get https://contoso.a.io/\nRESPONSE: 1\n", result);
            }
        }
 private void RemoveClient(ClientPipeline client)
 {
     this.clients.TryRemove(client, out _);
 }
Example #10
0
 public ConfigurationClient(string connectionString, PipelineOptions options)
 {
     _options = options;
     Pipeline = ClientPipeline.Create(_options, SdkName, SdkVersion);
     ParseConnectionString(connectionString, out _baseUri, out _credential, out _secret);
 }