Пример #1
0
        public async Task WaitMessage()
        {
            CancellationToken token = _cts.Token;

            while (true)
            {
                var tcs = new TaskCompletionSource <SabberResponse>();

                _tcs = tcs;

                Console.WriteLine("Client " + Name + " is waiting a message.");

                try
                {
                    await tcs.Task;
                }
                catch (OperationCanceledException)
                {
                    Console.WriteLine($"Client {Name} is disconnected.");
                    break;
                }

                if (tcs.Task.IsCanceled)
                {
                    Console.WriteLine($"Client {Name} is disconnected.");
                    break;
                }

                Console.WriteLine("Waiting ends.");

                SabberResponse response = tcs.Task.Result;

                Console.WriteLine($"Client {Name} gets a response {response.Message}.");
#pragma warning disable CS4014
                _responseStream.WriteAsync(response);
#pragma warning restore CS4014
                Console.WriteLine("Message \"" + response.Message + "\" is sent to " + Name);
            }
        }
        static async Task ConnectAsync(string target, string clientName)
        {
            var channel = new Channel(target, ChannelCredentials.Insecure);
            await channel.ConnectAsync();

            Console.WriteLine(clientName + " Connected.");

            var client = new Greeter.GreeterClient(channel);

            using (var server = client.Bidirectional(
                       headers: new Metadata {
                new Metadata.Entry("name", clientName)
            }))
            {
                var responseReaderTask = Task.Run(async() =>
                {
                    while (await server.ResponseStream.MoveNext(CancellationToken.None))
                    {
                        SabberResponse response = server.ResponseStream.Current;

                        Console.WriteLine("Response received: " + response.Message);;
                    }
                });

                await server.RequestStream.WriteAsync(new SabberRequest
                {
                    Type = SabberRequest.Types.Type.Test1
                });

                await server.RequestStream.CompleteAsync();

                await responseReaderTask;

                Console.WriteLine("Client " + clientName + " is disconnected.");
            }
        }