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(); }
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); }