aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-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}