static async Task Main(string[] args) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); _client = new Chat.ChatClient(channel); var userName = await SignInAsync(); var roomId = await ChooseRoomAsync(); var cancel = new CancellationTokenSource(); var listenTask = Task.Run(() => ListenAsync(roomId, userName, cancel.Token)); Console.WriteLine("Enter /q to quit."); while (true) { Console.Write("> "); var line = Console.ReadLine(); if (line?.Trim() == "/q") { break; } if (!string.IsNullOrWhiteSpace(line)) { await _client.SayAsync(new SayRequest { RoomId = roomId, UserName = userName, Message = line }); } } cancel.Cancel(); await listenTask; }
static async Task Main(string[] args) { var clientCertificate = new X509Certificate2("client.pfx", "secretsquirrel"); var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => { Console.WriteLine(certificate2.Issuer); Console.WriteLine(clientCertificate.Issuer); return(certificate2.Issuer == clientCertificate.Issuer); } }; handler.ClientCertificates.Add(clientCertificate); var http = new HttpClient(handler); var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { HttpClient = http }); _client = new Chat.ChatClient(channel); var token = await SignInAsync(); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var roomId = await ChooseRoomAsync(); var cancel = new CancellationTokenSource(); var listenTask = Task.Run(() => ListenAsync(roomId, cancel.Token)); Console.WriteLine("Enter /q to quit."); while (true) { Console.Write("> "); var line = Console.ReadLine(); if (line?.Trim() == "/q") { break; } if (!string.IsNullOrWhiteSpace(line)) { await _client.SayAsync(new SayRequest { RoomId = roomId, Message = line }); } } cancel.Cancel(); await listenTask; }