protected IClientBuilder AddDefaultSettings(IClientBuilder builder, NetConnectionParameters parameters) { var config = (IConfiguration)Services.GetService(typeof(IConfiguration)); var tcpPort = (parameters.TcpPort > 0) ? parameters.TcpPort : config.GetValue <int>("Network:TcpPort"); var udpPort = (parameters.UdpPort > 0) ? parameters.UdpPort : config.GetValue <int>("Network:UdpPort"); var udpLocalPort = (parameters.UdpLocalPort > 0) ? parameters.UdpLocalPort : config.GetValue <int>("Network:UdpLocalPort"); return(builder .UseIp(parameters.Address) .UseTcp(tcpPort) .UseUdp(udpPort, udpLocalPort) .UseZeroFormatter() .UseConfiguration(config) .ConfigureLogging(logBuilder => { logBuilder.AddConfiguration(config.GetSection("Logging")); logBuilder.AddConsole(); }) .RegisterTypes(serviceCollection => { serviceCollection.AddSingleton(c => this); serviceCollection.AddSingleton(c => this.Chat); this.RegisterTypes(serviceCollection); }) .RegisterPacketHandler <User.Packets.LoginReplyPacket, User.LoginClientHandler>() .RegisterPacketHandler <Chat.Packets.ChatReplyPacket, ChatReceiverHandler <TUser> >()); }
/// <inheritdoc /> public override Task <bool> Start(NetConnectionParameters parameters = default) { var builder = AddDefaultSettings(new ServerBuilder(), parameters); OnServerBuild(builder); this.NetworkerServer = builder.Build(); this.NetworkerServer.ClientDisconnected += ClientDisconnected; this.NetworkerServer.Start(); return(Task.FromResult(true)); }
/// <inheritdoc /> public override Task <bool> Start(NetConnectionParameters parameters) { this.status = NetPeerStatus.Connecting; var builder = AddDefaultSettings(new ClientBuilder(), parameters); OnClientBuild(builder); this.NetworkerClient = builder.Build(); this.NetworkerClient.Connected += ClientConnected; this.NetworkerClient.Disconnected += ClientDisconnected; var connectResult = this.NetworkerClient.Connect(); if (!connectResult.Success) { var errors = string.Join(", ", connectResult.Errors.ToArray()); Logger?.LogWarning(errors); return(Task.FromResult(false)); } NetworkerClient.Send(new LoginPacket(parameters.Username, parameters.Password)); var config = (IConfiguration)Services.GetService(typeof(IConfiguration)); var timeout = config.GetValue <int>("Network:ConnectTimeout"); if (timeout <= 2) { timeout = 2; } int timeoutSeconds = timeout * 2; while (timeoutSeconds > 0 && (status == NetPeerStatus.Connecting || status == NetPeerStatus.Authenticating)) { Thread.Sleep(500); timeoutSeconds -= 1; } return(Task.FromResult(status == NetPeerStatus.Online)); }
protected IServerBuilder AddDefaultSettings(IServerBuilder builder, NetConnectionParameters parameters) { var config = (IConfiguration)Services.GetService(typeof(IConfiguration)); var tcpPort = (parameters.TcpPort > 0) ? parameters.TcpPort : config.GetValue <int>("Network:TcpPort"); var udpPort = (parameters.UdpPort > 0) ? parameters.UdpPort : config.GetValue <int>("Network:UdpPort"); return(builder .UseTcp(tcpPort) .UseUdp(udpPort) .UseZeroFormatter() .UseConfiguration(config) .ConfigureLogging(logBuilder => { logBuilder.AddConfiguration(config.GetSection("Logging")); logBuilder.AddConsole(); }) .RegisterTypes(serviceCollection => { serviceCollection.AddSingleton(c => this); serviceCollection.AddSingleton(c => this.Chat); this.RegisterTypes(serviceCollection); })); }
public abstract Task <bool> Start(NetConnectionParameters parameters = default);