aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/ModuleLoader.cs
diff options
context:
space:
mode:
authorMW2007-08-28 14:21:17 +0000
committerMW2007-08-28 14:21:17 +0000
commit8e3b2392d129d727bfd00a2d9faa08d9e5be92de (patch)
tree7e6b89ee495af1d5ea76c58fc0796a3bb38ecc5d /OpenSim/Region/Environment/ModuleLoader.cs
parentEnsure that UserProfileData doesn't pass down null values. (diff)
downloadopensim-SC_OLD-8e3b2392d129d727bfd00a2d9faa08d9e5be92de.zip
opensim-SC_OLD-8e3b2392d129d727bfd00a2d9faa08d9e5be92de.tar.gz
opensim-SC_OLD-8e3b2392d129d727bfd00a2d9faa08d9e5be92de.tar.bz2
opensim-SC_OLD-8e3b2392d129d727bfd00a2d9faa08d9e5be92de.tar.xz
Start of trying to make Region/Scene more modular.
Added preliminary IRegionModule interface. Also have a work in progress way of Modules registering optional API methods (kind of like Apache optional functions). But there must be a cleaner/nicer way in c# of doing these than the current way. Added three work in progress modules: ChatModule (simple handles in world chat, but by moving this to a module, we could support other types of chat modules, ie like a irc - opensim bridge module. ) , AvatarProfilesModule and XferModule. Moved most of the code from Scene.ModifyTerrain() into the BasicTerrain library, as the start of trying to make that more modular. Stopped Child agents showing up as part of the "show users" command.
Diffstat (limited to 'OpenSim/Region/Environment/ModuleLoader.cs')
-rw-r--r--OpenSim/Region/Environment/ModuleLoader.cs93
1 files changed, 93 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs
new file mode 100644
index 0000000..8e42d90
--- /dev/null
+++ b/OpenSim/Region/Environment/ModuleLoader.cs
@@ -0,0 +1,93 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4using System.Text;
5using OpenSim.Region.Environment.Scenes;
6using OpenSim.Region.Environment.Interfaces;
7using OpenSim.Region.Environment.Modules;
8
9namespace OpenSim.Region.Environment
10{
11 public class ModuleLoader
12 {
13
14 public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
15
16 public ModuleLoader()
17 {
18
19 }
20
21 /// <summary>
22 /// Really just a test method for loading a set of currently internal modules
23 /// </summary>
24 /// <param name="scene"></param>
25 public void LoadInternalModules(Scene scene)
26 {
27 //Testing IRegionModule ideas
28 XferModule xferManager = new XferModule();
29 xferManager.Initialise(scene);
30 scene.AddModule(xferManager.GetName(), xferManager);
31
32 ChatModule chatModule = new ChatModule();
33 chatModule.Initialise(scene);
34 scene.AddModule(chatModule.GetName(), chatModule);
35
36 AvatarProfilesModule avatarProfiles = new AvatarProfilesModule();
37 avatarProfiles.Initialise(scene);
38 scene.AddModule(avatarProfiles.GetName(), avatarProfiles);
39
40 // Post Initialise Modules
41 xferManager.PostInitialise();
42 // chatModule.PostInitialise(); //for now leave this disabled as it would start up a partially working irc bot
43 avatarProfiles.PostInitialise();
44 }
45
46 public void LoadModule(string dllName, string moduleName, Scene scene)
47 {
48 Assembly pluginAssembly = null;
49 if (LoadedAssemblys.ContainsKey(dllName))
50 {
51 pluginAssembly = LoadedAssemblys[dllName];
52 }
53 else
54 {
55 pluginAssembly = Assembly.LoadFrom(dllName);
56 this.LoadedAssemblys.Add(dllName, pluginAssembly);
57 }
58
59 IRegionModule module = null;
60 foreach (Type pluginType in pluginAssembly.GetTypes())
61 {
62 if (pluginType.IsPublic)
63 {
64 if (!pluginType.IsAbstract)
65 {
66 Type typeInterface = pluginType.GetInterface("IRegionModule", true);
67
68 if (typeInterface != null)
69 {
70 module = (IRegionModule)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
71 break;
72 }
73 typeInterface = null;
74 }
75 }
76 }
77 pluginAssembly = null;
78
79 if (module.GetName() == moduleName)
80 {
81 module.Initialise(scene);
82 scene.AddModule(moduleName, module);
83 module.PostInitialise(); //shouldn't be done here
84 }
85
86 }
87
88 public void ClearCache()
89 {
90 this.LoadedAssemblys.Clear();
91 }
92 }
93}