Beispiel #1
0
 private void BootTaskRunInstaller()
 {
     if (CoreManager.InstallerCore.Run())
     {
         StandardOut.Notice("Install", StringLocale.GetString("CORE:BOOT_INSTALL_SAVING"));
         SaveConfigInstallation();
     }
 }
Beispiel #2
0
        private void BootTaskLoadConfig()
        {
            string configPath = Environment.GetEnvironmentVariable("BLUEDOT_CONFIG_PATH");

            StandardOut.Notice("Boot", StringLocale.GetString("CORE:BOOT_LOADING_CONFIG_AT") + configPath);
            Config = new XmlConfig(configPath);

            StandardOut.Notice("Boot", StringLocale.GetString("CORE:BOOT_INSTALL_CHECKING"));
            bool mainInstallRequired = PrepareInstall(); // Register the main installation if required.
        }
Beispiel #3
0
        private void BootTaskStartPlugins()
        {
            List <Task> taskList = new List <Task>();

            StandardOut.Notice("Plugin Manager", StringLocale.GetString("CORE:BOOT_PLUGINS_STARTING"));
            foreach (Plugin plugin in PluginManager.GetLoadedPlugins())
            {
                taskList.Add(Task.Factory.StartNew(() => { PluginManager.StartPlugin(plugin); }));
            }
            Task.WaitAll(taskList.ToArray());
            StandardOut.Notice("Plugin Manager", StringLocale.GetString("CORE:BOOT_PLUGINS_STARTED"));
        }
Beispiel #4
0
        private void BootTaskLoadPlugins()
        {
            List <Task> taskList = new List <Task>();

            StandardOut.Notice("Plugin Manager", StringLocale.GetString("CORE:BOOT_PLUGINS_LOADING"));
            foreach (string path in PluginManager.GetAllPotentialPluginPaths())
            {
                taskList.Add(Task.Factory.StartNew(() => { PluginManager.LoadPluginAtPath(path); }));
            }
            Task.WaitAll(taskList.ToArray());
            StandardOut.Notice("Plugin Manager", StringLocale.GetString("CORE:BOOT_PLUGINS_LOADED"));
        }
Beispiel #5
0
 private void BootTaskConnectMySql()
 {
     StandardOut.Notice("MySQL", StringLocale.GetString("CORE:BOOT_MYSQL_PREPARE"));
     MySqlConnectionProvider = new MySqlConnectionProvider
     {
         Host     = Config.ValueAsString("/config/mysql/host"),
         Port     = Config.ValueAsUshort("/config/mysql/port", 3306),
         User     = Config.ValueAsString("/config/mysql/user"),
         Password = Config.ValueAsString("/config/mysql/password"),
         Database = Config.ValueAsString("/config/mysql/database")
     };
     StandardOut.Notice("MySQL", StringLocale.GetString("CORE:BOOT_MYSQL_READY"));
 }
Beispiel #6
0
 public void BootTaskStartWebAdmin()
 {
     StandardOut.Notice("Web Admin", StringLocale.GetString("CORE:BOOT_WEBADMIN_PREPARE"));
     WebAdminManager = new WebAdminManager(Config.ValueAsUshort("/config/webadmin/port", 14480));
     StandardOut.Notice("Web Admin", StringLocale.GetString("CORE:BOOT_WEBADMIN_READY"));
 }
Beispiel #7
0
 public void BootTaskPrepareRooms()
 {
     StandardOut.Notice("Room Distributor", StringLocale.GetString("CORE:BOOT_ROOMDISTRIBUTOR_PREPARE"));
     RoomDistributor = new RoomDistributor();
     StandardOut.Notice("Room Distributor", StringLocale.GetString("CORE:BOOT_ROOMDISTRIBUTOR_READY"));
 }
Beispiel #8
0
 public void BootTaskPrepareHabbos()
 {
     StandardOut.Notice("Habbo Distributor", StringLocale.GetString("CORE:BOOT_HABBODISTRIBUTOR_PREPARE"));
     HabboDistributor = new HabboDistributor();
     StandardOut.Notice("Habbo Distributor", StringLocale.GetString("CORE:BOOT_HABBODISTRIBUTOR_READY"));
 }
Beispiel #9
0
 public void BootTaskPreparePermissions()
 {
     StandardOut.Notice("Permission Distributor", StringLocale.GetString("CORE:BOOT_PERMISSIONS_PREPARE"));
     PermissionDistributor = new PermissionDistributor();
     StandardOut.Notice("Permission Distributor", StringLocale.GetString("CORE:BOOT_PERMISSIONS_READY"));
 }
Beispiel #10
0
 public void BootTaskPrepareFigures()
 {
     StandardOut.Notice("Habbo Figure Factory", StringLocale.GetString("CORE:BOOT_FIGURES_PREPARE"));
     HabboFigureFactory = new HabboFigureFactory();
     StandardOut.Notice("Habbo Figure Factory", StringLocale.GetString("CORE:BOOT_FIGURES_READY"));
 }
Beispiel #11
0
        internal bool Boot(string ConfigPath)
        {
            this.fTextEncoding = Encoding.UTF8;  // TODO: Move this to an external config.

            this.fStandardOut = new StandardOut();

            try
            {
                this.fStandardOut.PrintNotice("Text Encoding => Set to " + fTextEncoding.EncodingName);
                this.fStandardOut.PrintNotice("Standard Out => Ready");

                this.fConfig = new XmlConfig(ConfigPath);

                if (fConfig.WasCreated()) // Did the config file have to be created?
                {
                    // Yes, run the install process.

                    this.fStandardOut.PrintImportant("No config file found! File created!");
                    this.fStandardOut.PrintImportant("Starting installer...");

                    this.fStandardOut.PrintNotice("Standard Out => Disabled (Install)");

                    Dictionary<string, object> InstallerReturn = Install.Core.Run();
                    MonoAware.System.Console.Clear();

                    this.fStandardOut.PrintNotice("Standard Out => Enabled (Install)");
                    this.fStandardOut.PrintImportant("Updating configuration file...");

                    XmlDocument Doc = fConfig.GetInternalDocument();
                    XmlNode RootElement = Doc.GetElementsByTagName("config")[0] as XmlNode;

                    XmlElement StandardOutElement = Doc.CreateElement("standardout");
                    XmlElement MySQLElement = Doc.CreateElement("mysql");
                    XmlElement NetworkElement = Doc.CreateElement("network");
                    XmlElement WebAdminElement = Doc.CreateElement("webadmin");

                    XmlElement ValueElement;

                    #region StandardOut
                    #region Importance
                    ValueElement = Doc.CreateElement("importance");
                    ValueElement.InnerText = InstallerReturn["standardout.importance"].ToString();
                    StandardOutElement.AppendChild(ValueElement);
                    #endregion
                    #endregion
                    #region MySQL
                    #region Host
                    ValueElement = Doc.CreateElement("host");
                    ValueElement.InnerText = InstallerReturn["database.host"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region Port
                    ValueElement = Doc.CreateElement("port");
                    ValueElement.InnerText = InstallerReturn["database.port"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region User
                    ValueElement = Doc.CreateElement("user");
                    ValueElement.InnerText = InstallerReturn["database.username"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region Password
                    ValueElement = Doc.CreateElement("password");
                    ValueElement.InnerText = InstallerReturn["database.password"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region Database
                    ValueElement = Doc.CreateElement("database");
                    ValueElement.InnerText = InstallerReturn["database.database"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region MinPoolSize
                    ValueElement = Doc.CreateElement("minpoolsize");
                    ValueElement.InnerText = InstallerReturn["database.minpool"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #region MaxPoolSize
                    ValueElement = Doc.CreateElement("maxpoolsize");
                    ValueElement.InnerText = InstallerReturn["database.maxpool"].ToString();
                    MySQLElement.AppendChild(ValueElement);
                    #endregion
                    #endregion
                    #region Network
                    #region Host
                    ValueElement = Doc.CreateElement("host");
                    ValueElement.InnerText = InstallerReturn["network.game.host"].ToString();
                    NetworkElement.AppendChild(ValueElement);
                    #endregion
                    #region Port
                    ValueElement = Doc.CreateElement("port");
                    ValueElement.InnerText = InstallerReturn["network.game.port"].ToString();
                    NetworkElement.AppendChild(ValueElement);
                    #endregion
                    #region MaxConnections
                    ValueElement = Doc.CreateElement("maxconnections");
                    ValueElement.InnerText = InstallerReturn["network.game.maxconnections"].ToString();
                    NetworkElement.AppendChild(ValueElement);
                    #endregion
                    #endregion
                    #region WebAdmin
                    #region Port
                    ValueElement = Doc.CreateElement("port");
                    ValueElement.InnerText = InstallerReturn["network.webadmin.port"].ToString();
                    WebAdminElement.AppendChild(ValueElement);
                    #endregion
                    #endregion

                    RootElement.AppendChild(StandardOutElement);
                    RootElement.AppendChild(MySQLElement);
                    RootElement.AppendChild(NetworkElement);
                    RootElement.AppendChild(WebAdminElement);
                    this.fConfig.Save();

                    this.fStandardOut.PrintImportant("Configuration file saved!");

                    this.fStandardOut.PrintImportant("Resuming IHI Boot (Installer)");
                    this.fStandardOut.PrintImportant("Press any key...");
                    Console.ReadKey(true);
                }

                this.fStandardOut.PrintNotice("Config File => Loaded");

                this.fStandardOut.SetImportance((StandardOutImportance)fConfig.ValueAsByte("/config/standardout/importance", (byte)StandardOutImportance.Debug));

                this.fStandardOut.PrintNotice("MySQL => Preparing database connection settings...");

                try
                {
                    MySqlConnectionStringBuilder CS = new MySqlConnectionStringBuilder();
                    CS.Server = fConfig.ValueAsString("/config/mysql/host");
                    CS.Port = fConfig.ValueAsUint("/config/mysql/port", 3306);
                    CS.UserID = fConfig.ValueAsString("/config/mysql/user");
                    CS.Password = fConfig.ValueAsString("/config/mysql/password");
                    CS.Database = fConfig.ValueAsString("/config/mysql/database");
                    CS.Pooling = true;
                    CS.MinimumPoolSize = fConfig.ValueAsUint("/config/mysql/minpoolsize", 1);
                    CS.MaximumPoolSize = fConfig.ValueAsUint("/config/mysql/maxpoolsize", 25);

                    PrepareSessionFactory(CS.ConnectionString);

                    this.fStandardOut.PrintNotice("MySQL => Testing connection...");

                    using (ISession DB = GetDatabaseSession())
                    {
                        if (!DB.IsConnected)
                            throw new Exception("Unknown cause");
                    }
                }
                catch (Exception ex)
                {
                    this.fStandardOut.PrintError("MySQL => Connection failed!");
                    this.fStandardOut.PrintException(ex);
                    return false;
                }
                this.fStandardOut.PrintNotice("MySQL => Connected!");

                this.fStandardOut.PrintNotice("Habbo Distributor => Constructing...");
                this.fHabboDistributor = new HabboDistributor();
                this.fStandardOut.PrintNotice("Habbo Distributor => Ready");

                this.fStandardOut.PrintNotice("Habbo Figure Factory => Constructing...");
                this.fHabboFigureFactory = new HabboFigureFactory();
                this.fStandardOut.PrintNotice("Habbo Figure Factory => Ready");

                // TODO: Download Requirements

                this.fStandardOut.PrintNotice("Permission Manager => Constructing...");
                this.fPermissionManager = new PermissionManager();
                this.fStandardOut.PrintNotice("Permission Manager => Ready");

                // TODO: Cache Navigator
                // TODO: Cache Furni
                // TODO: Write Dynamic Client Files
                // TODO: Authenticate with IHINet

                this.fStandardOut.PrintNotice("Connection Manager => Starting...");
                this.fConnectionManager = new IonTcpConnectionManager(fConfig.ValueAsString("/config/network/host"), fConfig.ValueAsInt("/config/network/port", 14478), fConfig.ValueAsInt("/config/network/maxconnections", 2));
                this.fConnectionManager.GetListener().Start();
                this.fStandardOut.PrintNotice("Connection Manager => Ready!");

                this.fStandardOut.PrintNotice("Web Admin => Starting...");
                this.fWebAdminManager = new WebAdminManager(fConfig.ValueAsUshort("/config/webadmin/port", 14480));
                this.fStandardOut.PrintNotice("Web Admin => Ready!");

                this.fStandardOut.PrintNotice("Plugin Loader => Starting...");
                this.fPluginManager = new PluginManager();

                foreach (string Path in this.fPluginManager.GetAllPluginPaths())
                {
                    Plugin P = this.fPluginManager.LoadPluginAtPath(Path);

                    if (P == null)
                        continue;

                    if (P.GetName() == "PluginManager")
                        this.fPluginManager.StartPlugin(P); // TODO: Remove this - debugging only
                }

                this.fStandardOut.PrintNotice("Plugin Loader => Started!");

                this.fStandardOut.PrintImportant("IHI is now functional!");

                return true;
            }
            catch (Exception e)
            {
                this.fStandardOut.PrintException(e);
                return false;
            }
        }
Beispiel #12
0
        internal BootResult Boot(string configPath)
        {
            try
            {
                _textEncoding = Encoding.UTF8; // TODO: Move this to an external config.

                #region Standard Out

                _standardOut = new StandardOut();
                _standardOut.PrintNotice("Text Encoding => Set to " + _textEncoding.EncodingName);
                _standardOut.PrintNotice("Standard Out => Ready");

                #endregion

                _config = new XmlConfig(configPath);

                bool mainInstallRequired = PreInstall(); // Register the main installation if required.

                #region Load Plugins

                _standardOut.PrintNotice("Plugin Manager => Loading plugins...");
                _pluginManager = new PluginManager();

                XmlNodeList pluginNodes = GetConfig().GetInternalDocument().SelectNodes("/config/plugins/plugin");
                foreach (XmlNode pluginNode in pluginNodes)
                {
                    GetPluginManager().LoadPluginAtPath(
                        Path.Combine(
                            Directory.GetCurrentDirectory(),
                            "plugins",
                            pluginNode.Attributes["filename"].InnerText));
                }
                _standardOut.PrintNotice("Plugin Manager => Plugins loaded!");

                #endregion

                CoreManager.InstallerCore.Run();

                if (mainInstallRequired)
                {
                    SaveConfigInstallation();
                }

                #region Config

                _standardOut.PrintNotice("Config File => Loaded");
                _standardOut.SetImportance(
                    (StandardOutImportance)
                    _config.ValueAsByte("/config/standardout/importance", (byte)StandardOutImportance.Debug));

                #endregion

                #region Database

                _standardOut.PrintNotice("MySQL => Preparing database connection settings...");

                try
                {
                    MySqlConnectionStringBuilder connectionString = new MySqlConnectionStringBuilder
                    {
                        Server =
                            _config.ValueAsString(
                                "/config/mysql/host"),
                        Port =
                            _config.ValueAsUint(
                                "/config/mysql/port", 3306),
                        UserID =
                            _config.ValueAsString(
                                "/config/mysql/user"),
                        Password =
                            _config.ValueAsString(
                                "/config/mysql/password"),
                        Database =
                            _config.ValueAsString(
                                "/config/mysql/database"),
                        Pooling         = true,
                        MinimumPoolSize =
                            _config.ValueAsUint(
                                "/config/mysql/minpoolsize", 1),
                        MaximumPoolSize =
                            _config.ValueAsUint(
                                "/config/mysql/maxpoolsize", 25)
                    };

                    PrepareSessionFactory(connectionString.ConnectionString);

                    _standardOut.PrintNotice("MySQL => Testing connection...");

                    using (ISession db = GetDatabaseSession())
                    {
                        if (!db.IsConnected)
                        {
                            throw new Exception("Unknown cause");
                        }
                    }
                }
                catch (Exception ex)
                {
                    _standardOut.PrintError("MySQL => Connection failed!");
                    throw;
                }
                _standardOut.PrintNotice("MySQL => Connected!");

                #endregion

                #region Distributors

                _standardOut.PrintNotice("Habbo Distributor => Constructing...");
                _habboDistributor = new HabboDistributor();
                _standardOut.PrintNotice("Habbo Distributor => Ready");

                #endregion

                #region Figure Factory

                _standardOut.PrintNotice("Habbo Figure Factory => Constructing...");
                _habboFigureFactory = new HabboFigureFactory();
                _standardOut.PrintNotice("Habbo Figure Factory => Ready");

                #endregion

                // TODO: Download Requirements

                #region Permissions

                _standardOut.PrintNotice("Permission Manager => Constructing...");
                _permissionManager = new PermissionManager();
                _standardOut.PrintNotice("Permission Manager => Ready");

                #endregion

                // TODO: Write Dynamic Client Files
                // TODO: Authenticate with IHINet

                #region Network

                _standardOut.PrintNotice("Connection Manager => Starting...");
                _connectionManager = new IonTcpConnectionManager(_config.ValueAsString("/config/network/host"),
                                                                 _config.ValueAsInt("/config/network/port", 14478));
                _connectionManager.GetListener().Start();
                _standardOut.PrintNotice("Connection Manager => Ready!");

                _standardOut.PrintNotice("Web Admin => Starting...");
                _webAdminManager = new WebAdminManager(_config.ValueAsUshort("/config/webadmin/port", 14480));
                _standardOut.PrintNotice("Web Admin => Ready!");

                #endregion

                #region Start Plugins

                PluginManager pluginManager = GetPluginManager();
                _standardOut.PrintNotice("Plugin Manager => Starting plugins...");

                foreach (Plugin plugin in pluginManager.GetLoadedPlugins())
                {
                    pluginManager.StartPlugin(plugin);
                }
                _standardOut.PrintNotice("Plugin Manager => Plugins started!");

                #endregion

                _standardOut.PrintImportant("IHI is now functional!");

                return(BootResult.AllClear);
            }
            catch (Exception e)
            {
                _standardOut.PrintException(e);


                if (e is MappingException)
                {
                    return(BootResult.MySQLMappingFailure);
                }

                return(BootResult.UnknownFailure);
            }
        }