aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs
diff options
context:
space:
mode:
authorMW2009-02-26 21:30:12 +0000
committerMW2009-02-26 21:30:12 +0000
commite2d30a02446c8b5d1b8be090f4ccc1fc98d019f5 (patch)
tree8be1ecceedead7721711a8554c8ae70c8072bbfc /OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs
parent* This patch reduces the excessive number of threads opened by the Timer even... (diff)
downloadopensim-SC_OLD-e2d30a02446c8b5d1b8be090f4ccc1fc98d019f5.zip
opensim-SC_OLD-e2d30a02446c8b5d1b8be090f4ccc1fc98d019f5.tar.gz
opensim-SC_OLD-e2d30a02446c8b5d1b8be090f4ccc1fc98d019f5.tar.bz2
opensim-SC_OLD-e2d30a02446c8b5d1b8be090f4ccc1fc98d019f5.tar.xz
Moved the Initialisation of the CommunicationsManager to a ApplicationPlugin.
Also in that plugin it registers the IUserService with all the Scenes (as they are created). So now we can start changing over all uses of IUserService, that currently access it from the CommunicationsManager to accessing it from the Scene.RequestModuleInterface call. Once that is done we can move the UserService creation out to its own plugin and remove all references to it from the CommunicationsManager. Then we can take the next CommunicationsManager interface and repeat.
Diffstat (limited to 'OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs')
-rw-r--r--OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs253
1 files changed, 253 insertions, 0 deletions
diff --git a/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs
new file mode 100644
index 0000000..a5a4470
--- /dev/null
+++ b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs
@@ -0,0 +1,253 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Threading;
32using log4net;
33using OpenSim.Framework;
34using OpenSim.Framework.RegionLoader.Filesystem;
35using OpenSim.Framework.RegionLoader.Web;
36using OpenSim.Region.CoreModules.Agent.AssetTransaction;
37using OpenSim.Region.CoreModules.Avatar.InstantMessage;
38using OpenSim.Region.CoreModules.Scripting.DynamicTexture;
39using OpenSim.Region.CoreModules.Scripting.LoadImageURL;
40using OpenSim.Region.CoreModules.Scripting.XMLRPC;
41using OpenSim.Framework.Communications;
42using OpenSim.Framework.Communications.Cache;
43using OpenSim.Region.Communications.Hypergrid;
44using OpenSim.Region.Communications.Local;
45using OpenSim.Region.Communications.OGS1;
46using OpenSim.Framework.Servers;
47using OpenSim.ApplicationPlugins.LoadRegions;
48
49namespace OpenSim.ApplicationPlugins.CreateCommsManager
50{
51 public class CreateCommsManagerPlugin : IApplicationPlugin
52 {
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54
55 #region IApplicationPlugin Members
56
57 // TODO: required by IPlugin, but likely not at all right
58 string m_name = "CreateCommsManagerPlugin";
59 string m_version = "0.0";
60
61 public string Version { get { return m_version; } }
62 public string Name { get { return m_name; } }
63
64 protected OpenSimBase m_openSim;
65
66 protected BaseHttpServer m_httpServer;
67 protected CommunicationsManager m_commsManager;
68 protected GridInfoService m_gridInfoService;
69 protected IHyperlink HGServices = null;
70
71 protected LoadRegionsPlugin m_loadRegionsPlugin;
72
73 public void Initialise()
74 {
75 m_log.Info("[LOADREGIONS]: " + Name + " cannot be default-initialized!");
76 throw new PluginNotInitialisedException(Name);
77 }
78
79 public void Initialise(OpenSimBase openSim)
80 {
81 m_openSim = openSim;
82 m_httpServer = openSim.HttpServer;
83
84 InitialiseCommsManager(openSim);
85 if (m_commsManager != null)
86 {
87 m_openSim.ApplicationRegistry.RegisterInterface<IUserService>(m_commsManager.UserService);
88 }
89 }
90
91 public void PostInitialise()
92 {
93 if (m_openSim.ApplicationRegistry.TryGet<LoadRegionsPlugin>(out m_loadRegionsPlugin))
94 {
95 m_loadRegionsPlugin.OnNewRegionCreated += RegionCreated;
96 }
97 }
98
99 public void Dispose()
100 {
101 }
102
103 #endregion
104
105 private void RegionCreated(IScene scene)
106 {
107 if (m_commsManager != null)
108 {
109 scene.RegisterModuleInterface<IUserService>(m_commsManager.UserService);
110 }
111 }
112
113 private void InitialiseCommsManager(OpenSimBase openSim)
114 {
115 LibraryRootFolder libraryRootFolder = new LibraryRootFolder(m_openSim.ConfigurationSettings.LibrariesXMLFile);
116
117 if ((openSim is OpenSim) || (openSim is OpenSimBackground))
118 {
119 // Standalone mode is determined by !startupConfig.GetBoolean("gridmode", false)
120 if (m_openSim.ConfigurationSettings.Standalone)
121 {
122 InitialiseStandaloneServices(libraryRootFolder);
123 }
124 else
125 {
126 // We are in grid mode
127 InitialiseGridServices(libraryRootFolder);
128 }
129 }
130 else if (openSim is HGOpenSimNode)
131 {
132 HGOpenSimNode hgNode = (HGOpenSimNode)openSim;
133
134 // Standalone mode is determined by !startupConfig.GetBoolean("gridmode", false)
135 if (m_openSim.ConfigurationSettings.Standalone)
136 {
137 InitialiseHGStandaloneServices(libraryRootFolder);
138 }
139 else
140 {
141 // We are in grid mode
142 InitialiseHGGridServices(libraryRootFolder);
143 }
144 hgNode.HGServices = HGServices;
145 }
146
147 openSim.CommunicationsManager = m_commsManager;
148 }
149
150 /// <summary>
151 /// Initialises the backend services for standalone mode, and registers some http handlers
152 /// </summary>
153 /// <param name="libraryRootFolder"></param>
154 protected virtual void InitialiseStandaloneServices(LibraryRootFolder libraryRootFolder)
155 {
156 LocalInventoryService inventoryService = new LocalInventoryService();
157 inventoryService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneInventoryPlugin, m_openSim.ConfigurationSettings.StandaloneInventorySource);
158
159 LocalUserServices userService =
160 new LocalUserServices(
161 m_openSim.NetServersInfo.DefaultHomeLocX, m_openSim.NetServersInfo.DefaultHomeLocY, inventoryService);
162 userService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneUserPlugin, m_openSim.ConfigurationSettings.StandaloneUserSource);
163
164 LocalBackEndServices backendService = new LocalBackEndServices();
165
166 LocalLoginService loginService =
167 new LocalLoginService(
168 userService, m_openSim.ConfigurationSettings.StandaloneWelcomeMessage, inventoryService, backendService, m_openSim.NetServersInfo,
169 m_openSim.ConfigurationSettings.StandaloneAuthenticate, libraryRootFolder);
170
171 m_commsManager
172 = new CommunicationsLocal(
173 m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, userService, userService,
174 inventoryService, backendService, userService,
175 libraryRootFolder, m_openSim.ConfigurationSettings.DumpAssetsToFile);
176
177 // set up XMLRPC handler for client's initial login request message
178 m_httpServer.AddXmlRPCHandler("login_to_simulator", loginService.XmlRpcLoginMethod);
179
180 // provides the web form login
181 m_httpServer.AddHTTPHandler("login", loginService.ProcessHTMLLogin);
182
183 // Provides the LLSD login
184 m_httpServer.SetDefaultLLSDHandler(loginService.LLSDLoginMethod);
185
186 // provide grid info
187 // m_gridInfoService = new GridInfoService(m_config.Source.Configs["Startup"].GetString("inifile", Path.Combine(Util.configDir(), "OpenSim.ini")));
188 m_gridInfoService = new GridInfoService(m_openSim.ConfigSource.Source);
189 m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
190 m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod));
191 }
192
193 protected virtual void InitialiseGridServices(LibraryRootFolder libraryRootFolder)
194 {
195 m_commsManager
196 = new CommunicationsOGS1(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, libraryRootFolder);
197
198 m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler());
199 }
200
201 protected virtual void InitialiseHGStandaloneServices(LibraryRootFolder libraryRootFolder)
202 {
203 // Standalone mode
204
205 HGInventoryService inventoryService = new HGInventoryService(m_openSim.NetServersInfo.InventoryURL, null, false);
206 inventoryService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneInventoryPlugin, m_openSim.ConfigurationSettings.StandaloneInventorySource);
207
208 LocalUserServices userService =
209 new LocalUserServices(
210 m_openSim.NetServersInfo.DefaultHomeLocX, m_openSim.NetServersInfo.DefaultHomeLocY, inventoryService);
211 userService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneUserPlugin, m_openSim.ConfigurationSettings.StandaloneUserSource);
212
213 //LocalBackEndServices backendService = new LocalBackEndServices();
214 HGGridServicesStandalone gridService = new HGGridServicesStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, m_openSim.SceneManager);
215
216 LocalLoginService loginService =
217 new LocalLoginService(
218 userService, m_openSim.ConfigurationSettings.StandaloneWelcomeMessage, inventoryService, gridService.LocalBackend, m_openSim.NetServersInfo,
219 m_openSim.ConfigurationSettings.StandaloneAuthenticate, libraryRootFolder);
220
221
222 m_commsManager = new HGCommunicationsStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache,
223 userService, userService, inventoryService, gridService, userService, libraryRootFolder, m_openSim.ConfigurationSettings.DumpAssetsToFile);
224
225 inventoryService.UserProfileCache = m_commsManager.UserProfileCacheService;
226 HGServices = gridService;
227
228 // set up XMLRPC handler for client's initial login request message
229 m_httpServer.AddXmlRPCHandler("login_to_simulator", loginService.XmlRpcLoginMethod);
230
231 // provides the web form login
232 m_httpServer.AddHTTPHandler("login", loginService.ProcessHTMLLogin);
233
234 // Provides the LLSD login
235 m_httpServer.SetDefaultLLSDHandler(loginService.LLSDLoginMethod);
236
237 // provide grid info
238 // m_gridInfoService = new GridInfoService(m_config.Source.Configs["Startup"].GetString("inifile", Path.Combine(Util.configDir(), "OpenSim.ini")));
239 m_gridInfoService = new GridInfoService(m_openSim.ConfigSource.Source);
240 m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
241 m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod));
242 }
243
244 protected virtual void InitialiseHGGridServices(LibraryRootFolder libraryRootFolder)
245 {
246 m_commsManager = new HGCommunicationsGridMode(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, m_openSim.SceneManager, libraryRootFolder);
247
248 HGServices = ((HGCommunicationsGridMode)m_commsManager).HGServices;
249
250 m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler());
251 }
252 }
253}