示例#1
0
        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();
        }
示例#2
0
        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();
        }