Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += LogUnhandledException;

            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            Thread.CurrentThread.Name           = "Entry";

            Config = args.Length > 0 ?
                     ServerConfig.ReadFile(args[0]) :
                     ServerConfig.ReadFile("server.json");

            Environment.SetEnvironmentVariable("ServerLogFolder", Config.serverSettings.logFolder);
            GlobalContext.Properties["ServerName"] = Config.serverInfo.name;
            GlobalContext.Properties["ServerType"] = Config.serverInfo.type.ToString();

            XmlConfigurator.ConfigureAndWatch(new FileInfo(Config.serverSettings.log4netConfig));

            using (Resources = new Resources(Config.serverSettings.resourceFolder))
                using (Database = new Database(
                           Config.dbInfo.host,
                           Config.dbInfo.port,
                           Config.dbInfo.auth,
                           Config.dbInfo.index,
                           Resources))
                {
                    RequestHandlers.Initialize(Resources);

                    Config.serverInfo.instanceId = Guid.NewGuid().ToString();
                    ISManager = new ISManager(Database, Config);
                    ISManager.Run();
                    ChatManager   = new ChatManager(ISManager);
                    ISControl     = new ISControl(ISManager);
                    LegendSweeper = new LegendSweeper(Database);
                    LegendSweeper.Run();

                    Console.CancelKeyPress += delegate
                    {
                        Shutdown.Set();
                    };

                    var port = Config.serverInfo.port;
                    using (var server = new HttpServer($"http://{Config.serverInfo.bindAddress}:{port}/"))
                    {
                        foreach (var uri in RequestHandlers.Get.Keys)
                        {
                            server.GET(uri).Subscribe(Response);
                        }

                        foreach (var uri in RequestHandlers.Post.Keys)
                        {
                            server.POST(uri).Subscribe(Response);
                        }

                        Log.Info("Listening at port " + port + "...");
                        Shutdown.WaitOne();
                    }

                    Log.Info("Terminating...");
                    ISManager.Dispose();
                }
        }