private static async Task <int> Serve(string addressString, string portString) { if (!int.TryParse(portString, out var port)) { throw new ArgumentException(nameof(port)); } EndPoint endPoint; if (IPAddress.TryParse(addressString, out var ipAddress)) { endPoint = new IPEndPoint(ipAddress, port); } else { endPoint = new DnsEndPoint(addressString, port); } var builder = new HostBuilder(); builder.AddDebugging(LogEventLevel.Verbose); builder.AddPeers(); // .AddPeerListener<PeerHandler>(); builder.AddState() .AddStateListener <StateHandler>() .UpdateClients(); builder.ListenTo(options => { options.LocalEndPoint = endPoint; }); var host = builder.Build(); host.OnConnected += (client) => { host.ServiceProvider.GetRequiredService <ILogger>().Information("Client connected"); return(Task.CompletedTask); }; await host.StartAsync(); return(0); }