예제 #1
0
        public ServerSettings(Cli.RunServerOptions options, bool useService)
        {
            Port       = options.Port;
            UseIpv6    = !options.NoIpv6 && Socket.OSSupportsIPv6;
            UseService = useService;

            if (options.NoNatTraversal)
            {
                Nat = new NatResult(false, null);
            }
            else
            {
                var result = NatTraversal.ForwardPortAsync(!options.NoUpnp, !options.NoPmp, options.Port).Result;
                Nat = new NatResult(true, result);
            }

            PrintLog();
        }
예제 #2
0
        public void Close()
        {
            if (!_server.IsStarted)
            {
                throw new RoomNotOpenException();
            }

            if (ServerSettings.Nat.Traverse)
            {
                NatTraversal.ClearAsync(ServerSettings.Nat.ForwardingResult.PublicPort).GetAwaiter();
            }

            if (ServerSettings.UseService)
            {
                _service.Stop();
            }

            Log.Verbose("Stopping server...");
            _server.Stop();
            Log.Information("Server stopped.");
        }