コード例 #1
0
        public void Start()
        {
            GrpcEnvironment.SetLogger(new ConsoleLogger());

            _server = new Grpc.Core.Server();
            _server.Ports.Add("127.0.0.1", 51000, ServerCredentials.Insecure);
            Log.Information("Starting gRPC server: {Host}:{Port}", _server.Ports.Single().Host, _server.Ports.Single().Port);
            _server.Services.Add(DataAccessService.BindService(new DataAccessServiceImpl()));
            _server.Services.Add(PubSubService.BindService(new PubSubServiceImpl()));
            _server.Start();
        }
コード例 #2
0
        public PublishSubscribe(
            IPEndPoint serverEndPoint,
            IObservable <IEnumerable <DnsEndPoint> > seedsEndpointObservable,
            ILoggerFactory loggerFactory,
            ISerializer <byte[]> serializer,
            ChannelCredentials channelCredentials = null)
        {
            _serializer = serializer;

            PublishSubscribeServerRouter publishSubscribeServerRouter = new PublishSubscribeServerRouter(loggerFactory, topic => new DefaultTopicFilter(topic));

            RegisterDisposable(publishSubscribeServerRouter);
            Server server = new Server
            {
                Services = { PubSubService.BindService(publishSubscribeServerRouter) },
                Ports    = { new ServerPort(serverEndPoint.Address.ToString(), serverEndPoint.Port, ServerCredentials.Insecure) }
            };

            server.Start();

            seedsEndpointObservable
            .Select(seedEndPoints => seedEndPoints
                    .Select(dnsEndPoint => new Channel(dnsEndPoint.Host, dnsEndPoint.Port, channelCredentials ?? ChannelCredentials.Insecure))
                    .Select(channel => new PubSubService.PubSubServiceClient(channel)))
            .Subscribe(_clientsSource, CancellationToken);

            ILogger <PublishSubscribe> logger = loggerFactory.CreateLogger <PublishSubscribe>();

            _clientsSource
            .SelectMany(clients => clients.Select(client => client.Publish().RequestStream))
            .CombineLatest(_publishSubject, (streamWriter, message) =>
            {
                try
                {
                    streamWriter.WriteAsync(message).GetAwaiter().GetResult();
                }
                catch (Exception e)
                {
                    logger.LogError(e, "Error while sending message");
                }

                return(Unit.Default);
            })
            .Subscribe(CancellationToken);
        }