static async Task RunAsync(string endpoint, int port, string prefix, ChannelOption[] options) { var channel = new Channel(endpoint, port, ChannelCredentials.Insecure, options); var client = MagicOnionClient.Create <IEchoService>(new DefaultCallInvoker(channel)); var reply = await client.EchoAsync("hogemoge"); Console.WriteLine("Echo: " + reply); // duplex var receiver = new MyHubReceiver(); var hubClient = await StreamingHubClient.ConnectAsync <IMyHub, IMyHubReceiver>(new DefaultCallInvoker(channel), receiver); var roomPlayers = await hubClient.JoinAsync($"room {prefix}", "hoge"); foreach (var player in roomPlayers) { receiver.OnJoin(player); } var i = 0; while (i++ < 100) { await hubClient.SendAsync($"{prefix} {i}"); await Task.Delay(TimeSpan.FromSeconds(60)); } await hubClient.LeaveAsync(); await hubClient.DisposeAsync(); await channel.ShutdownAsync(); }
static async Task RunAsync(string endpoint, string prefix) { var channel = GrpcChannel.ForAddress(endpoint, new GrpcChannelOptions { HttpHandler = new SocketsHttpHandler { PooledConnectionIdleTimeout = Timeout.InfiniteTimeSpan, // grpc.keepalive_time_ms KeepAlivePingDelay = TimeSpan.FromSeconds(10), // grpc.keepalive_timeout_ms KeepAlivePingTimeout = TimeSpan.FromSeconds(10), // grpc.keepalive_permit_without_calls: 1 = Always KeepAlivePingPolicy = HttpKeepAlivePingPolicy.Always, EnableMultipleHttp2Connections = true }, }); var client = MagicOnionClient.Create <IEchoService>(channel); var reply = await client.EchoAsync("hogemoge"); Console.WriteLine("Echo: " + reply); // duplex var receiver = new MyHubReceiver(); var hubClient = await StreamingHubClient.ConnectAsync <IMyHub, IMyHubReceiver>(channel, receiver); var roomPlayers = await hubClient.JoinAsync($"room {prefix}", "hoge"); foreach (var player in roomPlayers) { receiver.OnJoin(player); } var i = 0; while (i++ < 100) { await hubClient.SendAsync($"{prefix} {i}"); await Task.Delay(TimeSpan.FromSeconds(60)); } await hubClient.LeaveAsync(); await hubClient.DisposeAsync(); await channel.ShutdownAsync(); }