public static void Main(string[] args)
        {
            var cancelationTokenSource = new CancellationTokenSource();
            var logger = new ConsoleLogger();
            var cache  = new SnapshotCache(true, logger);

            var watcher = new SnapshotFileWatcher(s => cache.SetSnapshot("envoy1", s));

            Console.WriteLine("Configuration loaded from files");

            watcher.Start();
            Console.WriteLine("File watcher started");

            var    services = new Services(cache, logger, cancelationTokenSource.Token);
            Server server   = new Server
            {
                Services =
                {
                    ClusterDiscoveryService.BindService(services.ClusterService),
                    EndpointDiscoveryService.BindService(services.EndpointService),
                    ListenerDiscoveryService.BindService(services.ListenerService),
                    RouteDiscoveryService.BindService(services.RouteService),
                    AggregatedDiscoveryService.BindService(services.AggregatedService)
                },
                Ports = { new ServerPort("0.0.0.0", Port, ServerCredentials.Insecure) }
            };

            server.Start();

            Console.WriteLine($"Server listening on port {Port.ToString()}");
            Console.WriteLine("Press any key to stop the server...");
            Console.ReadKey();

            cancelationTokenSource.Cancel();
            server.ShutdownAsync().Wait();
        }
 /// <summary>
 /// Optional override to create listeners (e.g., TCP, HTTP) for this service replica to handle client or user requests.
 /// </summary>
 /// <returns>A collection of listeners.</returns>
 protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners()
 {
     return(new[]
     {
         new ServiceInstanceListener(serviceContext =>
                                     new GrpcCommunicationListener(new[] { (Func <CancellationToken, ServerServiceDefinition>)(ct => AggregatedDiscoveryService.BindService(new Services(cache, logger, ct).AggregatedService)) }, serviceContext))
     });
 }