コード例 #1
0
        private static void Main()
        {
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = new List <JsonConverter> {
                    new IPEndPointConverter()
                }
            };

            Config <Config> .Initialize("game.hjson", "NETSPHEREPIRATES_GAMECONF");

            var jsonlog = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "game.json");
            var logfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "game.log");

            Log.Logger = new LoggerConfiguration()
                         .Destructure.ByTransforming <IPEndPoint>(endPoint => endPoint.ToString())
                         .Destructure.ByTransforming <EndPoint>(endPoint => endPoint.ToString())
                         .WriteTo.File(new JsonFormatter(), jsonlog)
                         .WriteTo.File(logfile)
                         .WriteTo.Console(outputTemplate: "[{Level} {SourceContext}] {Message}{NewLine}{Exception}")
                         .MinimumLevel.Debug()
                         .CreateLogger();

            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
            TaskScheduler.UnobservedTaskException      += OnUnobservedTaskException;

            Log.Information("Initializing...");

            try
            {
                AuthDatabase.Initialize(Config.Instance.Database.Auth);
                GameDatabase.Initialize(Config.Instance.Database.Game);
            }
            catch (DatabaseNotFoundException ex)
            {
                Log.Error("Database {Name} not found", ex.Name);
                Environment.Exit(1);
            }
            catch (DatabaseVersionMismatchException ex)
            {
                Log.Error("Invalid version. Database={CurrentVersion} Required={RequiredVersion}. Run the DatabaseMigrator to update your database.",
                          ex.CurrentVersion, ex.RequiredVersion);
                Environment.Exit(1);
            }

            ItemIdGenerator.Initialize();
            CharacterIdGenerator.Initialize();
            LicenseIdGenerator.Initialize();
            DenyIdGenerator.Initialize();
            Club.Initialize();

            var listenerThreads = new MultithreadEventLoopGroup(Config.Instance.ListenerThreads);
            var workerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads);
            var workerThread    = new SingleThreadEventLoop();

            ChatServer.Initialize(new ProudNet.Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread
            });
            RelayServer.Initialize(new ProudNet.Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread
            });
            GameServer.Initialize(new ProudNet.Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread
            });

            FillShop();

            Log.Information("Starting server...");

            ChatServer.Instance.Listen(Config.Instance.ChatListener);
            RelayServer.Instance.Listen(Config.Instance.RelayListener, IPAddress.Parse(Config.Instance.IP), Config.Instance.RelayUdpPorts);
            GameServer.Instance.Listen(Config.Instance.Listener);

            Log.Information("Ready for connections!");

            if (Config.Instance.NoobMode)
            {
                Log.Warning("!!! NOOB MODE IS ENABLED! EVERY LOGIN SUCCEEDS AND OVERRIDES ACCOUNT LOGIN DETAILS !!!");
            }

            Console.CancelKeyPress += OnCancelKeyPress;
            while (true)
            {
                var input = Console.ReadLine();
                if (input == null)
                {
                    break;
                }

                if (input.Equals("exit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("quit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("stop", StringComparison.InvariantCultureIgnoreCase))
                {
                    break;
                }

                var args = input.GetArgs();
                if (args.Length == 0)
                {
                    continue;
                }

                if (!GameServer.Instance.CommandManager.Execute(null, args))
                {
                    Console.WriteLine("Unknown command");
                }
            }

            Exit();
        }
コード例 #2
0
        private static void Main()
        {
            GlobalVersion = Assembly.GetExecutingAssembly().GetName().Version;
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = new List <JsonConverter> {
                    new IPEndPointConverter()
                }
            };

            var jsonlog = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameServer.json");
            var logfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameServer.log");

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.File(new JsonFormatter(), jsonlog)
                         .WriteTo.File(logfile)
                         .WriteTo.Console(outputTemplate: "[{Level} {SourceContext}] {Message}{NewLine}{Exception}")
                         .MinimumLevel.Verbose()
                         .CreateLogger();
            var Logger = Log.ForContext(Constants.SourceContextPropertyName, "-Initialiazor");

#if !DEBUG
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
#endif
            TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
            Logger.Information("============================================");
            Logger.Information("Initializing GameServer build {ver}...",
                               $"{GlobalVersion.Major}.{GlobalVersion.Major / 2 + GlobalVersion.Minor + GlobalVersion.Build + GlobalVersion.Revision}");
#if NEWIDS
            Logger.Information("Set mode NEWIDS");
#endif
#if LATESTS4
            Logger.Information("Set mode LATESTS4");
#endif
            Logger.Information("============================================");
            Logger.Information("Initializing Database...");

            AuthDatabase.Initialize();
            GameDatabase.Initialize();

            Logger.Information("============================================");
            Logger.Information("Starting Serverinstances and ResourceCache...");

            ItemIdGenerator.Initialize();
            CharacterIdGenerator.Initialize();
            DenyIdGenerator.Initialize();

            var listenerThreads = new MultithreadEventLoopGroup(Config.Instance.ListenerThreads);
            var workerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads);
            var workerThread    = new SingleThreadEventLoop();
            ChatServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread,
#if DEBUG
                Logger = Logger,
#endif
            });
            RelayServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread,
#if DEBUG
                Logger = Logger,
#endif
            });
            GameServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = workerThreads,
                WorkerThread          = workerThread,
#if DEBUG
                Logger = Logger,
#endif
            });

            FillShop();

            ChatServer.Instance.Listen(Config.Instance.ChatListener);
            RelayServer.Instance.Listen(Config.Instance.RelayListener, IPAddress.Parse(Config.Instance.IP),
                                        Config.Instance.RelayUdpPorts);
            GameServer.Instance.Listen(Config.Instance.Listener);

            Logger.Information("Serverinstances successfully started, ready for connections!");
            Logger.Information("============================================\n");

            Console.CancelKeyPress += OnCancelKeyPress;
            while (true)
            {
                var input = Console.ReadLine();
                if (input == null)
                {
                    break;
                }

                if (input.Equals("exit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("quit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("stop", StringComparison.InvariantCultureIgnoreCase))
                {
                    break;
                }

                var args = input.GetArgs();
                if (args.Length == 0)
                {
                    continue;
                }

                Task.Run(() =>
                {
                    if (!GameServer.Instance.CommandManager.Execute(null, args))
                    {
                        Console.WriteLine("Unknown command");
                    }
                });
            }

            Exit();
        }
コード例 #3
0
        private static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
            TaskScheduler.UnobservedTaskException      += OnUnobservedTaskException;
            GlobalVersion = Assembly.GetExecutingAssembly().GetName().Version;
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = new List <JsonConverter> {
                    new IPEndPointConverter()
                }
            };

            var jsonlog = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameServer.json");
            var logfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameServer.log");

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.File(new JsonFormatter(), jsonlog)
                         .WriteTo.File(logfile)
                         .Enrich.With <ContextEnricher>()
                         .Enrich.With <AccUserEnricher>()
                         .WriteTo.Console(
                outputTemplate: "[{Level:u3}] |{SrcContext}| {AccUSpace:u3} | {Message}{NewLine}{Exception}")
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            var Logger = Log.ForContext(Constants.SourceContextPropertyName, "Initialiazor");

            Logger.Information("============================================");
            //Logger.Information("Initializing GameServer build {ver}...",
            //  $"{GlobalVersion.Major}.{GlobalVersion.Major / 2 + GlobalVersion.Minor + GlobalVersion.Build + GlobalVersion.Revision}");
#if NEWIDS
            Logger.Information("Set mode NEWIDS");
#endif
#if LATESTS4
            Logger.Information("Set mode LATESTS4");
#endif
            Logger.Information("============================================");
            Logger.Information("Initializing Database...");

            AuthDatabase.Initialize();
            GameDatabase.Initialize();

            Logger.Information("============================================");
            Logger.Information("Starting Serverinstances and ResourceCache...");

            ItemIdGenerator.Initialize();
            DenyIdGenerator.Initialize();

            var listenerThreads = new MultithreadEventLoopGroup(Config.Instance.ListenerThreads);
            var workerThread    = new SingleThreadEventLoop();
            ChatServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads / 3),
                WorkerThread          = workerThread
            });
            RelayServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads / 3),
                WorkerThread          = workerThread,
            });
            GameServer.Initialize(new Configuration
            {
                SocketListenerThreads = listenerThreads,
                SocketWorkerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads / 3),
                WorkerThread          = workerThread
            });

            FillShop();

            ChatServer.Instance.Listen(Config.Instance.ChatListener);
            RelayServer.Instance.Listen(Config.Instance.RelayListener, IPAddress.Parse(Config.Instance.IP),
                                        Config.Instance.RelayUdpPorts);
            GameServer.Instance.Listen(Config.Instance.Listener);

            Log.Information("Starting Game API");
            s_gameApiEventLoopGroup = new MultithreadEventLoopGroup(2);
            s_gameHost = new ServerBootstrap()
                         .Group(s_gameApiEventLoopGroup)
                         .Channel <TcpServerSocketChannel>()
                         .Handler(new ActionChannelInitializer <IChannel>(ch => { }))
                         .ChildHandler(new ActionChannelInitializer <IChannel>(ch =>
            {
                ch.Pipeline.AddLast(new GameServerHandler());
            }))
                         .BindAsync(Config.Instance.FumbiAPI.EndPoint).GetAwaiter().GetResult();

            if (Config.Instance.ACMode == 2)
            {
                Logger.Information("[BE] Activated");
            }

            if (Config.Instance.ResCheck)
            {
                Logger.Information("[ResCheck] Activated : {0}", Config.Instance.ResHash);
                Logger.Information("[ResCheck_Red] Activated : {0}", Config.Instance.ResHash_red);
                Logger.Information("[ResCheck_Gold] Activated : {0}", Config.Instance.ResHash_gold);
                Logger.Information("[ResCheck_Blue] Activated : {0}", Config.Instance.ResHash_blue);
                Logger.Information("[ResCheck_Violet] Activated : {0}", Config.Instance.ResHash_violet);
            }
            Logger.Information("Waiting For Connections!");
            Logger.Information("============================================");

            Console.CancelKeyPress += OnCancelKeyPress;
            while (true)
            {
                var input = Console.ReadLine();
                if (input == null)
                {
                    break;
                }

                if (input.Equals("exit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("quit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("stop", StringComparison.InvariantCultureIgnoreCase))
                {
                    break;
                }

                var args = input.GetArgs();
                if (args.Length == 0)
                {
                    continue;
                }

                Task.Run(async() =>
                {
                    if (!await GameServer.Instance.CommandManager.Execute(null, args))
                    {
                        CommandManager.Logger.Information("Unknown command");
                    }
                });
            }

            Exit();
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: BioAleks/NetspherePirates
        private static void Main()
        {
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = new List <JsonConverter> {
                    new IPEndPointConverter()
                }
            };

            var jsonlog = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "auth.json");
            var logfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "auth.log");

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.File(new JsonFormatter(), jsonlog)
                         .WriteTo.File(logfile)
                         .WriteTo.Console(outputTemplate: "[{Level} {SourceContext}] {Message}{NewLine}{Exception}")
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
            TaskScheduler.UnobservedTaskException      += OnUnobservedTaskException;

            Log.Information("Initializing...");

            AuthDatabase.Initialize();
            GameDatabase.Initialize();

            ItemIdGenerator.Initialize();
            CharacterIdGenerator.Initialize();
            LicenseIdGenerator.Initialize();
            DenyIdGenerator.Initialize();

            ChatServer.Initialize(new Configuration());
            RelayServer.Initialize(new Configuration());
            GameServer.Initialize(new Configuration());

            FillShop();

            Log.Information("Starting server...");

            var listenerThreads = new MultithreadEventLoopGroup(Config.Instance.ListenerThreads);
            var workerThreads   = new MultithreadEventLoopGroup(Config.Instance.WorkerThreads);

            ChatServer.Instance.Listen(Config.Instance.ChatListener, listenerEventLoopGroup: listenerThreads, workerEventLoopGroup: workerThreads);
            RelayServer.Instance.Listen(Config.Instance.RelayListener, IPAddress.Parse(Config.Instance.IP), Config.Instance.RelayUdpPorts, listenerThreads, workerThreads);
            GameServer.Instance.Listen(Config.Instance.Listener, listenerEventLoopGroup: listenerThreads, workerEventLoopGroup: workerThreads);

            Log.Information("Ready for connections!");

            if (Config.Instance.NoobMode)
            {
                Log.Warning("!!! NOOB MODE IS ENABLED! EVERY LOGIN SUCCEEDS AND OVERRIDES ACCOUNT LOGIN DETAILS !!!");
            }

            Console.CancelKeyPress += OnCancelKeyPress;
            while (true)
            {
                var input = Console.ReadLine();
                if (input == null)
                {
                    break;
                }

                if (input.Equals("exit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("quit", StringComparison.InvariantCultureIgnoreCase) ||
                    input.Equals("stop", StringComparison.InvariantCultureIgnoreCase))
                {
                    break;
                }

                var args = input.GetArgs();
                if (args.Length == 0)
                {
                    continue;
                }

                if (!GameServer.Instance.CommandManager.Execute(null, args))
                {
                    Console.WriteLine("Unknown command");
                }
            }

            Exit();
        }
コード例 #5
0
    /* -----------
     * Server side
     * ----------- */

    public override void OnStartServer()
    {
        ChatServer.Initialize();
        base.OnStartServer();
    }