Ejemplo n.º 1
0
        /// <summary>
        ///     Load all plugins in assemblies at the given path
        /// </summary>
        /// <param name="assembliesPath"></param>
        public void LoadPluginsFromAssemblies(string assembliesPath)
        {
            List <IPhysicsPlugin> physicsPlugins =
                UniverseModuleLoader.LoadModules <IPhysicsPlugin>(assembliesPath);
            List <IMeshingPlugin> meshingPlugins =
                UniverseModuleLoader.LoadModules <IMeshingPlugin>(assembliesPath);

            meshingPlugins.AddRange(UniverseModuleLoader.LoadModules <IMeshingPlugin>(""));

            foreach (IPhysicsPlugin plug in physicsPlugins)
            {
                try
                {
                    _PhysPlugins.Add(plug.GetName(), plug);
                }
                catch
                {
                }
            }
            foreach (IMeshingPlugin plug in meshingPlugins)
            {
                try
                {
                    _MeshPlugins.Add(plug.GetName(), plug);
                }
                catch
                {
                }
            }
        }
Ejemplo n.º 2
0
        public void LoadLibraries()
        {
            if (!m_enabled)
            {
                return;
            }
            else if (!File.Exists("DefaultInventory/Inventory.ini") &&
                     !File.Exists("DefaultInventory/Inventory.ini.example"))
            {
                MainConsole.Instance.Error(
                    "Could not find DefaultInventory/Inventory.ini or DefaultInventory/Inventory.ini.example");
                return;
            }
            List <IDefaultLibraryLoader> Loaders = UniverseModuleLoader.PickupModules <IDefaultLibraryLoader>();

            try
            {
                if (!File.Exists("DefaultInventory/Inventory.ini"))
                {
                    File.Copy("DefaultInventory/Inventory.ini.example", "DefaultInventory/Inventory.ini");
                }
                IniConfigSource iniSource = new IniConfigSource("DefaultInventory/Inventory.ini",
                                                                IniFileType.AuroraStyle);
                if (iniSource != null)
                {
                    foreach (IDefaultLibraryLoader loader in Loaders)
                    {
                        loader.LoadLibrary(this, iniSource, m_registry);
                    }
                }
            }
            catch
            {
            }
        }
Ejemplo n.º 3
0
        private void SetUpConsole(IConfigSource config, IRegistryCore registry)
        {
            List <ICommandConsole> Plugins = UniverseModuleLoader.PickupModules <ICommandConsole>();

            foreach (ICommandConsole plugin in Plugins)
            {
                plugin.Initialize(config, registry.RequestModuleInterface <ISimulationBase>());
            }

            if (MainConsole.Instance == null)
            {
                Console.WriteLine("[Console]: No Console located");
                return;
            }

            MainConsole.Instance.Threshold = Level.Info;

            MainConsole.Instance.Fatal(String.Format("[Console]: Console log level is {0}",
                                                     MainConsole.Instance.Threshold));

            MainConsole.Instance.Commands.AddCommand("set log level",
                                                     "set log level [level]",
                                                     "Set the console logging level",
                                                     HandleLogLevel, false, true);

            MainConsole.Instance.Commands.AddCommand("get log level",
                                                     "get log level",
                                                     "Returns the current console logging level",
                                                     HandleGetLogLevel, false, true);
        }
Ejemplo n.º 4
0
        void SetUpConsole(IConfigSource config, ISimulationBase simbase)
        {
            List <ICommandConsole> Plugins = UniverseModuleLoader.PickupModules <ICommandConsole> ();

            foreach (ICommandConsole plugin in Plugins)
            {
                plugin.Initialize(config, simbase);
            }

            if (MainConsole.Instance == null)
            {
                Console.WriteLine("[Console]: No Console configured, falling back to 'LocalConsole'");
                new LocalConsole().LocalInitialize(config, simbase);
            }

            MainConsole.Instance.Threshold = Level.Info;

            MainConsole.Instance.Fatal(string.Format("[Console]: Console log level is {0}", MainConsole.Instance.Threshold));

            MainConsole.Instance.Commands.AddCommand(
                "set log level",
                "set log level [level]",
                "Set the console logging level",
                HandleLogLevel, false, true);

            MainConsole.Instance.Commands.AddCommand(
                "get log level",
                "get log level",
                "Returns the current console logging level",
                HandleGetLogLevel, false, true);
        }
Ejemplo n.º 5
0
 private void SetupCompilers()
 {
     converters = UniverseModuleLoader.PickupModules <IScriptConverter>();
     foreach (IScriptConverter convert in converters)
     {
         convert.Initialise(this);
     }
 }
Ejemplo n.º 6
0
 void FindChatPlugins()
 {
     AllChatPlugins = UniverseModuleLoader.PickupModules <IChatPlugin> ();
     foreach (IChatPlugin plugin in AllChatPlugins)
     {
         plugin.Initialize(this);
     }
 }
 public List <ICapsServiceConnector> GetServiceConnectors()
 {
     if (m_connectors.Count == 0)
     {
         m_connectors = UniverseModuleLoader.PickupModules <ICapsServiceConnector>();
     }
     return(m_connectors);
 }
 public virtual void InitializeModules()
 {
     m_applicationPlugins = UniverseModuleLoader.PickupModules <IApplicationPlugin>();
     foreach (IApplicationPlugin plugin in m_applicationPlugins)
     {
         plugin.PreStartup(this);
     }
 }
        public MigrationManager(IDataConnector genericData, string migratorName, bool validateTables)
        {
            this.genericData    = genericData;
            this.migratorName   = migratorName;
            this.validateTables = validateTables;
            List <IMigrator> allMigrators = UniverseModuleLoader.PickupModules <IMigrator>();

            foreach (
                IMigrator m in
                allMigrators.Where(m => m.MigrationName != null).Where(m => m.MigrationName == migratorName))
            {
                migrators.Add((Migrator)m);
            }
        }
        public void Initialise(IConfigSource source, IRegistryCore simBase, List <Type> types)
        {
            IConfig m_config = source.Configs["UniverseData"];

            if (m_config != null)
            {
                StorageProvider  = m_config.GetString("StorageProvider", StorageProvider);
                ConnectionString = m_config.GetString("ConnectionString", ConnectionString);
            }

            IGenericData DataConnector = null;

            if (StorageProvider == "MySQL")
            //Allow for fallback when UniverseData isn't set
            {
                MySQLDataLoader GenericData = new MySQLDataLoader();

                DataConnector = GenericData;
            }
            else if (StorageProvider == "SQLite")
            //Allow for fallback when UniverseData isn't set
            {
                SQLiteLoader GenericData = new SQLiteLoader();

                DataConnector = GenericData;
            }

            foreach (Type t in types)
            {
                List <dynamic> Plugins = UniverseModuleLoader.PickupModules(t);
                foreach (dynamic plugin in Plugins)
                {
                    try
                    {
                        plugin.Initialize(DataConnector.Copy(), source, simBase, ConnectionString);
                    }
                    catch (Exception ex)
                    {
                        if (MainConsole.Instance != null)
                        {
                            MainConsole.Instance.Warn("[DataService]: Exception occurred starting data plugin " +
                                                      plugin.Name + ", " + ex.ToString());
                        }
                    }
                }
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        ///     Create a scene and its initial base structures.
        /// </summary>
        /// <param name="regionInfo"></param>
        /// <param name="configSource"></param>
        /// <returns></returns>
        public IScene CreateScene(ISimulationDataStore dataStore, RegionInfo regionInfo)
        {
            AgentCircuitManager         circuitManager   = new AgentCircuitManager();
            List <IClientNetworkServer> clientServers    = UniverseModuleLoader.PickupModules <IClientNetworkServer>();
            List <IClientNetworkServer> allClientServers = new List <IClientNetworkServer>();

            foreach (IClientNetworkServer clientServer in clientServers)
            {
                clientServer.Initialize((uint)regionInfo.RegionPort, m_configSource, circuitManager);
                allClientServers.Add(clientServer);
            }

            AsyncScene scene = new AsyncScene();

            scene.AddModuleInterfaces(m_simBase.ApplicationRegistry.GetInterfaces());
            scene.Initialize(regionInfo, dataStore, circuitManager, allClientServers);

            return(scene);
        }
Ejemplo n.º 12
0
        public void Start()
        {
            IConfig handlerConfig = m_simBase.ConfigSource.Configs["ApplicationPlugins"];

            if (handlerConfig.GetString("ServicesLoader", "") != Name)
            {
                return;
            }

            List <IService> serviceConnectors = UniverseModuleLoader.PickupModules <IService>();

            foreach (IService connector in serviceConnectors)
            {
                try
                {
                    connector.Initialize(m_simBase.ConfigSource, m_simBase.ApplicationRegistry);
                }
                catch
                {
                }
            }
            foreach (IService connector in serviceConnectors)
            {
                try
                {
                    connector.Start(m_simBase.ConfigSource, m_simBase.ApplicationRegistry);
                }
                catch
                {
                }
            }
            foreach (IService connector in serviceConnectors)
            {
                try
                {
                    connector.FinishedStartup();
                }
                catch
                {
                }
            }
        }
        public virtual void InitializeModules()
        {
            LocalDataService lds = new LocalDataService();

            lds.Initialize(ConfigSource, ApplicationRegistry, m_dataPlugins);

            List <dynamic> modules = new List <dynamic>();

            foreach (Type t in m_servicePlugins)
            {
                var mods = UniverseModuleLoader.PickupModules(t);
                modules.AddRange(mods);
            }

            foreach (dynamic service in modules)
            {
                if (!(service is IService))
                {
                    continue;
                }
                ((IService)service).Initialize(ConfigSource, ApplicationRegistry);
            }
            foreach (dynamic service in modules)
            {
                if (!(service is IService))
                {
                    continue;
                }
                ((IService)service).Start(ConfigSource, ApplicationRegistry);
            }
            foreach (dynamic service in modules)
            {
                if (!(service is IService))
                {
                    continue;
                }
                ((IService)service).FinishedStartup();
            }
        }
Ejemplo n.º 14
0
        private void LoadModulesFromDllFile(string copiedDllFile)
        {
            List <IService>               services       = UniverseModuleLoader.LoadPlugins <IService>(copiedDllFile);
            List <IApplicationPlugin>     appPlugins     = UniverseModuleLoader.LoadPlugins <IApplicationPlugin>(copiedDllFile);
            List <INonSharedRegionModule> nsregionModule =
                UniverseModuleLoader.LoadPlugins <INonSharedRegionModule>(copiedDllFile);

            foreach (IService service in services)
            {
                service.Initialize(m_config, m_registry);
                service.Start(m_config, m_registry);
                service.FinishedStartup();
            }
            foreach (IApplicationPlugin plugin in appPlugins)
            {
                plugin.PreStartup(m_registry.RequestModuleInterface <ISimulationBase>());
                plugin.Initialize(m_registry.RequestModuleInterface <ISimulationBase>());
                plugin.PostInitialize();
                plugin.Start();
                plugin.PostStart();
            }
            IRegionModulesController rmc     = m_registry.RequestModuleInterface <IRegionModulesController>();
            ISceneManager            manager = m_registry.RequestModuleInterface <ISceneManager>();

            if (manager != null)
            {
                foreach (INonSharedRegionModule nsrm in nsregionModule)
                {
                    foreach (IScene scene in manager.Scenes)
                    {
                        nsrm.Initialize(m_config);
                        nsrm.AddRegion(scene);
                        nsrm.RegionLoaded(scene);
                        rmc.AllModules.Add(nsrm);
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public void AddRegion(IScene scene)
        {
            m_scene = scene;
            if (m_enabled)
            {
                //MainConsole.Instance.InfoFormat("[WIND] Enabled with an update rate of {0} frames.", m_frameUpdateRate);

                m_frame = 0;

                // Register all the Wind Model Plug-ins
                foreach (IWindModelPlugin windPlugin in UniverseModuleLoader.PickupModules <IWindModelPlugin>())
                {
                    //MainConsole.Instance.InfoFormat("[WIND] Found Plugin: {0}", windPlugin.Name);
                    m_availableWindPlugins.Add(windPlugin.Name, windPlugin);
                }

                // Check for desired plugin
                if (m_availableWindPlugins.ContainsKey(desiredWindPlugin))
                {
                    m_activeWindPlugin = m_availableWindPlugins [desiredWindPlugin];

                    //MainConsole.Instance.InfoFormat("[WIND] {0} plugin found, initializing.", desiredWindPlugin);

                    if (windConfig != null)
                    {
                        m_activeWindPlugin.Initialize();
                        m_activeWindPlugin.WindConfig(m_scene, windConfig);
                    }
                }


                // if the plug-in wasn't found, default to no wind.
                if (m_activeWindPlugin == null)
                {
                    MainConsole.Instance.ErrorFormat("[WIND] Could not find specified wind plug-in: {0}",
                                                     desiredWindPlugin);
                    MainConsole.Instance.ErrorFormat("[WIND] Defaulting to no wind.");
                }

                if (MainConsole.Instance != null)
                {
                    // Get a list of the parameters for each plugin
                    foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values)
                    {
                        MainConsole.Instance.Commands.AddCommand(
                            String.Format("wind base wind_plugin {0}", windPlugin.Name),
                            String.Format("wind base wind_plugin {0}", windPlugin.Name),
                            String.Format("{0} - {1}", windPlugin.Name, windPlugin.Description),
                            HandleConsoleBaseCommand, true, false);

                        MainConsole.Instance.Commands.AddCommand(
                            String.Format("wind base wind_update_rate"),
                            "wind base wind_update_rate <value>",
                            "Change the wind update rate.",
                            HandleConsoleBaseCommand, true, false);

                        foreach (KeyValuePair <string, string> kvp in windPlugin.WindParams())
                        {
                            MainConsole.Instance.Commands.AddCommand(
                                String.Format("wind {0} {1}", windPlugin.Name, kvp.Key),
                                String.Format("wind {0} {1}", windPlugin.Name, kvp.Key),
                                String.Format("{0} : {1} - {2}", windPlugin.Name, kvp.Key, kvp.Value),
                                HandleConsoleParamCommand, true, false);
                        }
                    }
                }


                // Register event handlers for when Avatars enter the region, and frame ticks
                m_scene.EventManager.OnFrame         += WindUpdate;
                m_scene.EventManager.OnMakeRootAgent += OnAgentEnteredRegion;

                // Register the wind module
                m_scene.RegisterModuleInterface <IWindModule> (this);

                // Generate initial wind values
                GenWindPos();

                // Mark Module Ready for duty
                m_ready = true;
            }
        }
        public void AddRegionToModules(IScene scene)
        {
            Dictionary <Type, INonSharedRegionModule> deferredNonSharedModules =
                new Dictionary <Type, INonSharedRegionModule>();

            // We need this to see if a module has already been loaded and
            // has defined a replaceable interface. It's a generic call,
            // so this can't be used directly. It will be used later
            Type       s  = scene.GetType();
            MethodInfo mi = s.GetMethod("RequestModuleInterface");

            // Scan for, and load, non-shared modules
            List <INonSharedRegionModule> list = new List <INonSharedRegionModule>();
            List <INonSharedRegionModule> m_nonSharedModules = UniverseModuleLoader.PickupModules <INonSharedRegionModule>();

            foreach (INonSharedRegionModule module in m_nonSharedModules)
            {
                Type replaceableInterface = module.ReplaceableInterface;
                if (replaceableInterface != null)
                {
                    MethodInfo mii = mi.MakeGenericMethod(replaceableInterface);

                    if (mii.Invoke(scene, new object[0]) != null)
                    {
                        MainConsole.Instance.DebugFormat("[REGIONMODULE]: Not loading {0} because another module has registered {1}",
                                                         module.Name, replaceableInterface);
                        continue;
                    }

                    deferredNonSharedModules[replaceableInterface] = module;
                    MainConsole.Instance.DebugFormat("[REGIONMODULE]: Deferred load of {0}", module.Name);
                    continue;
                }

                //MainConsole.Instance.DebugFormat("[REGIONMODULE]: Adding scene {0} to non-shared module {1}",
                //                  scene.RegionInfo.RegionName, module.Name);

                // Initialize the module
                module.Initialize(m_simBase.ConfigSource);

                IRegionModuleBaseModules.Add(module);
                list.Add(module);
            }

            // Now add the modules that we found to the scene. If a module
            // wishes to override a replaceable interface, it needs to
            // register it in Initialize, so that the deferred module
            // won't load.
            foreach (INonSharedRegionModule module in list)
            {
                try
                {
                    module.AddRegion(scene);
                }
                catch (Exception ex)
                {
                    MainConsole.Instance.ErrorFormat("[RegionModulesControllerPlugin]: Failed to load module {0}: {1}", module.Name, ex.ToString());
                }
                AddRegionModule(scene, module.Name, module);
            }

            // Same thing for non-shared modules, load them unless overridden
            List <INonSharedRegionModule> deferredlist =
                new List <INonSharedRegionModule>();

            foreach (INonSharedRegionModule module in deferredNonSharedModules.Values)
            {
                // Check interface override
                Type replaceableInterface = module.ReplaceableInterface;
                if (replaceableInterface != null)
                {
                    MethodInfo mii = mi.MakeGenericMethod(replaceableInterface);

                    if (mii.Invoke(scene, new object[0]) != null)
                    {
                        MainConsole.Instance.DebugFormat("[REGIONMODULE]: Not loading {0} because another module has registered {1}",
                                                         module.Name, replaceableInterface);
                        continue;
                    }
                }

                MainConsole.Instance.DebugFormat("[REGIONMODULE]: Adding scene {0} to non-shared module {1} (deferred)",
                                                 scene.RegionInfo.RegionName, module.Name);

                try
                {
                    module.Initialize(m_simBase.ConfigSource);
                }
                catch (Exception ex)
                {
                    MainConsole.Instance.ErrorFormat("[RegionModulesControllerPlugin]: Failed to load module {0}: {1}", module.Name, ex.ToString());
                }

                IRegionModuleBaseModules.Add(module);
                list.Add(module);
                deferredlist.Add(module);
            }

            // Finally, load valid deferred modules
            foreach (INonSharedRegionModule module in deferredlist)
            {
                try
                {
                    module.AddRegion(scene);
                }
                catch (Exception ex)
                {
                    MainConsole.Instance.ErrorFormat("[RegionModulesControllerPlugin]: Failed to load module {0}: {1}", module.Name, ex.ToString());
                }
                AddRegionModule(scene, module.Name, module);
            }

            // This is needed for all module types. Modules will register
            // Interfaces with scene in AddScene, and will also need a means
            // to access interfaces registered by other modules. Without
            // this extra method, a module attempting to use another modules's
            // interface would be successful only depending on load order,
            // which can't be depended upon, or modules would need to resort
            // to ugly kludges to attempt to request interfaces when needed
            // and unnecessary caching logic repeated in all modules.
            // The extra function stub is just that much cleaner
            //
            foreach (INonSharedRegionModule module in list)
            {
                try
                {
                    module.RegionLoaded(scene);
                }
                catch (Exception ex)
                {
                    MainConsole.Instance.ErrorFormat("[RegionModulesControllerPlugin]: Failed to load module {0}: {1}", module.Name, ex.ToString());
                }
            }
        }
Ejemplo n.º 17
0
        public void Initialize(IConfigSource config, IRegistryCore registry)
        {
            IConfig m_config = config.Configs["UniverseData"];

            if (m_config != null)
            {
                StorageProvider  = m_config.GetString("StorageProvider", StorageProvider);
                ConnectionString = m_config.GetString("ConnectionString", ConnectionString);
            }

            IGenericData DataConnector = null;

            if (StorageProvider == "MySQL")
            //Allow for fallback when UniverseData isn't set
            {
                MySQLDataLoader GenericData = new MySQLDataLoader();

                DataConnector = GenericData;
            }

            /*else if (StorageProvider == "MSSQL2008")
             * {
             * MSSQLDataLoader GenericData = new MSSQLDataLoader();
             *
             * DataConnector = GenericData;
             * }
             * else if (StorageProvider == "MSSQL7")
             * {
             * MSSQLDataLoader GenericData = new MSSQLDataLoader();
             *
             * DataConnector = GenericData;
             * }*/
            else if (StorageProvider == "SQLite")
            //Allow for fallback when UniverseData isn't set
            {
                SQLiteLoader GenericData = new SQLiteLoader();

                // set default data directory in case it is needed
                var simBase = registry.RequestModuleInterface <ISimulationBase> ();
                GenericData.DefaultDataPath = simBase.DefaultDataPath;

                DataConnector = GenericData;
            }

            List <IUniverseDataPlugin> Plugins = UniverseModuleLoader.PickupModules <IUniverseDataPlugin>();

            foreach (IUniverseDataPlugin plugin in Plugins)
            {
                try
                {
                    plugin.Initialize(DataConnector == null ? null : DataConnector.Copy(), config, registry,
                                      ConnectionString);
                }
                catch (Exception ex)
                {
                    if (MainConsole.Instance != null)
                    {
                        MainConsole.Instance.Warn("[DataService]: Exception occurred starting data plugin " +
                                                  plugin.Name + ", " + ex);
                    }
                }
            }
        }