aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid/UserServer
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs77
-rw-r--r--OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs13
-rw-r--r--OpenSim/Grid/UserServer.Modules/UserManager.cs3
-rw-r--r--OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs5
-rw-r--r--OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs7
-rw-r--r--OpenSim/Grid/UserServer/Main.cs167
-rw-r--r--OpenSim/Grid/UserServer/UserServerCommandModule.cs14
-rw-r--r--OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs141
8 files changed, 303 insertions, 124 deletions
diff --git a/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs b/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs
new file mode 100644
index 0000000..a6fdee0
--- /dev/null
+++ b/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs
@@ -0,0 +1,77 @@
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.IO;
31using System.Reflection;
32using log4net;
33using log4net.Config;
34using OpenMetaverse;
35using OpenSim.Framework;
36using OpenSim.Framework.Communications;
37using OpenSim.Framework.Communications.Cache;
38using OpenSim.Framework.Servers;
39using OpenSim.Grid.Communications.OGS1;
40using OpenSim.Grid.Framework;
41
42namespace OpenSim.Grid.UserServer.Modules
43{
44 public class GridInfoServiceModule
45 {
46 protected IUGAIMCore m_core;
47 protected GridInfoService m_gridInfoService;
48 protected BaseHttpServer m_httpServer;
49
50 public GridInfoServiceModule()
51 {
52 }
53
54 public void Initialise(IUGAIMCore core)
55 {
56 m_core = core;
57 m_gridInfoService = new GridInfoService();
58 }
59
60 public void PostInitialise()
61 {
62
63 }
64
65 public void RegisterHandlers(BaseHttpServer httpServer)
66 {
67 m_httpServer = httpServer;
68 m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info",
69 m_gridInfoService.RestGetGridInfoMethod));
70 m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
71 }
72
73 public void Close()
74 {
75 }
76 }
77}
diff --git a/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs b/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs
index 59e9805..5b245ee 100644
--- a/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs
+++ b/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs
@@ -35,6 +35,7 @@ using Nwc.XmlRpc;
35using OpenMetaverse; 35using OpenMetaverse;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Framework.Servers; 37using OpenSim.Framework.Servers;
38using OpenSim.Grid.Framework;
38 39
39namespace OpenSim.Grid.UserServer.Modules 40namespace OpenSim.Grid.UserServer.Modules
40{ 41{
@@ -78,6 +79,8 @@ namespace OpenSim.Grid.UserServer.Modules
78 79
79 Thread m_NotifyThread; 80 Thread m_NotifyThread;
80 81
82 private IUGAIMCore m_core;
83
81 public event AgentLocationDelegate OnAgentLocation; 84 public event AgentLocationDelegate OnAgentLocation;
82 public event AgentLeavingDelegate OnAgentLeaving; 85 public event AgentLeavingDelegate OnAgentLeaving;
83 public event RegionStartupDelegate OnRegionStartup; 86 public event RegionStartupDelegate OnRegionStartup;
@@ -86,18 +89,18 @@ namespace OpenSim.Grid.UserServer.Modules
86 public MessageServersConnector() 89 public MessageServersConnector()
87 { 90 {
88 MessageServers = new Dictionary<string, MessageServerInfo>(); 91 MessageServers = new Dictionary<string, MessageServerInfo>();
89 m_NotifyThread = new Thread(new ThreadStart(NotifyQueueRunner));
90 m_NotifyThread.Start();
91 } 92 }
92 93
93 public void Initialise() 94 public void Initialise(IUGAIMCore core)
94 { 95 {
95 96 m_core = core;
97 m_core.RegisterInterface<MessageServersConnector>(this);
98 m_NotifyThread = new Thread(new ThreadStart(NotifyQueueRunner));
99 m_NotifyThread.Start();
96 } 100 }
97 101
98 public void PostInitialise() 102 public void PostInitialise()
99 { 103 {
100
101 } 104 }
102 105
103 public void RegisterHandlers(BaseHttpServer httpServer) 106 public void RegisterHandlers(BaseHttpServer httpServer)
diff --git a/OpenSim/Grid/UserServer.Modules/UserManager.cs b/OpenSim/Grid/UserServer.Modules/UserManager.cs
index 1f4b07d..34daff2 100644
--- a/OpenSim/Grid/UserServer.Modules/UserManager.cs
+++ b/OpenSim/Grid/UserServer.Modules/UserManager.cs
@@ -35,6 +35,7 @@ using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Framework.Communications; 36using OpenSim.Framework.Communications;
37using OpenSim.Framework.Servers; 37using OpenSim.Framework.Servers;
38using OpenSim.Grid.Framework;
38 39
39namespace OpenSim.Grid.UserServer.Modules 40namespace OpenSim.Grid.UserServer.Modules
40{ 41{
@@ -59,7 +60,7 @@ namespace OpenSim.Grid.UserServer.Modules
59 m_userDataBaseService = userDataBaseService; 60 m_userDataBaseService = userDataBaseService;
60 } 61 }
61 62
62 public void Initialise() 63 public void Initialise(IUGAIMCore core)
63 { 64 {
64 65
65 } 66 }
diff --git a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs
index a1497b4..e68752d 100644
--- a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs
+++ b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -35,6 +35,7 @@ using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Framework.Communications; 36using OpenSim.Framework.Communications;
37using OpenSim.Framework.Servers; 37using OpenSim.Framework.Servers;
38using OpenSim.Grid.Framework;
38 39
39namespace OpenSim.Grid.UserServer.Modules 40namespace OpenSim.Grid.UserServer.Modules
40{ 41{
@@ -50,7 +51,7 @@ namespace OpenSim.Grid.UserServer.Modules
50 m_userDataBaseService = userDataBaseService; 51 m_userDataBaseService = userDataBaseService;
51 } 52 }
52 53
53 public void Initialise() 54 public void Initialise(IUGAIMCore core)
54 { 55 {
55 56
56 } 57 }
diff --git a/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs b/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs
index 9711a4b..6c1daea 100644
--- a/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs
+++ b/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -35,6 +35,7 @@ using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Framework.Communications; 36using OpenSim.Framework.Communications;
37using OpenSim.Framework.Servers; 37using OpenSim.Framework.Servers;
38using OpenSim.Grid.Framework;
38 39
39namespace OpenSim.Grid.UserServer.Modules 40namespace OpenSim.Grid.UserServer.Modules
40{ 41{
@@ -51,7 +52,7 @@ namespace OpenSim.Grid.UserServer.Modules
51 m_userDataBaseService = userDataBaseService; 52 m_userDataBaseService = userDataBaseService;
52 } 53 }
53 54
54 public void Initialise() 55 public void Initialise(IUGAIMCore core)
55 { 56 {
56 57
57 } 58 }
@@ -170,4 +171,4 @@ namespace OpenSim.Grid.UserServer.Modules
170 return FriendListItemListtoXmlRPCResponse(returndata); 171 return FriendListItemListtoXmlRPCResponse(returndata);
171 } 172 }
172 } 173 }
173} 174} \ No newline at end of file
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index e174b2d..63d788d 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -62,10 +62,12 @@ namespace OpenSim.Grid.UserServer
62 protected UserServerFriendsModule m_friendsModule; 62 protected UserServerFriendsModule m_friendsModule;
63 63
64 public UserLoginService m_loginService; 64 public UserLoginService m_loginService;
65 public GridInfoService m_gridInfoService;
66 public MessageServersConnector m_messagesService; 65 public MessageServersConnector m_messagesService;
67 66
67 protected GridInfoServiceModule m_gridInfoService;
68
68 protected UserServerCommandModule m_consoleCommandModule; 69 protected UserServerCommandModule m_consoleCommandModule;
70 protected UserServerEventDispatchModule m_eventDispatcher;
69 71
70 public static void Main(string[] args) 72 public static void Main(string[] args)
71 { 73 {
@@ -97,62 +99,40 @@ namespace OpenSim.Grid.UserServer
97 99
98 protected override void StartupSpecific() 100 protected override void StartupSpecific()
99 { 101 {
100 IInterServiceInventoryServices inventoryService = SetupRegisterCoreComponents(); 102 IInterServiceInventoryServices inventoryService = StartupCoreComponents();
101 103
102 m_stats = StatsManager.StartCollectingUserStats(); 104 m_stats = StatsManager.StartCollectingUserStats();
103 105
104 m_log.Info("[STARTUP]: Establishing data connection");
105 //setup database access service
106 m_userDataBaseService = new UserDataBaseService();
107 m_userDataBaseService.Initialise(this);
108
109 //setup services/modules 106 //setup services/modules
110 StartupUserServerModules(); 107 StartupUserServerModules();
111 108
112 StartOtherComponents(inventoryService); 109 StartOtherComponents(inventoryService);
113 110
114 m_consoleCommandModule = new UserServerCommandModule(m_loginService);
115 m_consoleCommandModule.Initialise(this);
116
117 //register event handlers
118 RegisterEventHandlers();
119
120 //PostInitialise the modules 111 //PostInitialise the modules
121 m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here 112 PostInitialiseModules();
122 m_userDataBaseService.PostInitialise();
123 113
124 //register http handlers and start http server 114 //register http handlers and start http server
125 m_log.Info("[STARTUP]: Starting HTTP process"); 115 m_log.Info("[STARTUP]: Starting HTTP process");
126 RegisterHttpHandlers(); 116 RegisterHttpHandlers();
127 m_httpServer.Start(); 117 m_httpServer.Start();
128
129 base.StartupSpecific();
130 }
131
132 private void StartOtherComponents(IInterServiceInventoryServices inventoryService)
133 {
134 m_gridInfoService = new GridInfoService();
135
136 StartupLoginService(inventoryService);
137 //
138 // Get the minimum defaultLevel to access to the grid
139 //
140 m_loginService.setloginlevel((int)Cfg.DefaultUserLevel);
141 118
142 m_messagesService = new MessageServersConnector(); 119 base.StartupSpecific();
143 } 120 }
144 121
145 private IInterServiceInventoryServices SetupRegisterCoreComponents() 122 protected virtual IInterServiceInventoryServices StartupCoreComponents()
146 { 123 {
147 Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); 124 Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml")));
148 125
149 IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl);
150
151 m_httpServer = new BaseHttpServer(Cfg.HttpPort); 126 m_httpServer = new BaseHttpServer(Cfg.HttpPort);
152 127
153 RegisterInterface<ConsoleBase>(m_console); 128 RegisterInterface<ConsoleBase>(m_console);
154 RegisterInterface<UserConfig>(Cfg); 129 RegisterInterface<UserConfig>(Cfg);
130
131 IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl);
132 // IRegionProfileService regionProfileService = new RegionProfileServiceProxy();
133
155 RegisterInterface<IInterServiceInventoryServices>(inventoryService); 134 RegisterInterface<IInterServiceInventoryServices>(inventoryService);
135 // RegisterInterface<IRegionProfileService>(regionProfileService);
156 136
157 return inventoryService; 137 return inventoryService;
158 } 138 }
@@ -163,9 +143,43 @@ namespace OpenSim.Grid.UserServer
163 /// <param name="inventoryService"></param> 143 /// <param name="inventoryService"></param>
164 protected virtual void StartupUserServerModules() 144 protected virtual void StartupUserServerModules()
165 { 145 {
146 m_log.Info("[STARTUP]: Establishing data connection");
147 //setup database access service, for now this has to be created before the other modules.
148 m_userDataBaseService = new UserDataBaseService();
149 m_userDataBaseService.Initialise(this);
150
151 //TODO: change these modules so they fetch the databaseService class in the PostInitialise method
166 m_userManager = new UserManager(m_userDataBaseService); 152 m_userManager = new UserManager(m_userDataBaseService);
153 m_userManager.Initialise(this);
154
167 m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService); 155 m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService);
156 m_avatarAppearanceModule.Initialise(this);
157
168 m_friendsModule = new UserServerFriendsModule(m_userDataBaseService); 158 m_friendsModule = new UserServerFriendsModule(m_userDataBaseService);
159 m_friendsModule.Initialise(this);
160
161 m_consoleCommandModule = new UserServerCommandModule();
162 m_consoleCommandModule.Initialise(this);
163
164 m_messagesService = new MessageServersConnector();
165 m_messagesService.Initialise(this);
166
167 m_gridInfoService = new GridInfoServiceModule();
168 m_gridInfoService.Initialise(this);
169 }
170
171 protected virtual void StartOtherComponents(IInterServiceInventoryServices inventoryService)
172 {
173 StartupLoginService(inventoryService);
174 //
175 // Get the minimum defaultLevel to access to the grid
176 //
177 m_loginService.setloginlevel((int)Cfg.DefaultUserLevel);
178
179 RegisterInterface<UserLoginService>(m_loginService); //TODO: should be done in the login service
180
181 m_eventDispatcher = new UserServerEventDispatchModule(m_userManager, m_messagesService, m_loginService);
182 m_eventDispatcher.Initialise(this);
169 } 183 }
170 184
171 /// <summary> 185 /// <summary>
@@ -178,34 +192,32 @@ namespace OpenSim.Grid.UserServer
178 m_userDataBaseService, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg, new RegionProfileServiceProxy()); 192 m_userDataBaseService, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg, new RegionProfileServiceProxy());
179 } 193 }
180 194
181 protected virtual void RegisterEventHandlers() 195 protected virtual void PostInitialiseModules()
182 { 196 {
183 m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation; 197 m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here
184 m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; 198 m_userDataBaseService.PostInitialise();
185 199 m_messagesService.PostInitialise();
186 m_messagesService.OnAgentLocation += HandleAgentLocation; 200 m_eventDispatcher.PostInitialise(); //it will register event handlers in here
187 m_messagesService.OnAgentLeaving += HandleAgentLeaving; 201 m_gridInfoService.PostInitialise();
188 m_messagesService.OnRegionStartup += HandleRegionStartup; 202 m_userManager.PostInitialise();
189 m_messagesService.OnRegionShutdown += HandleRegionShutdown; 203 m_avatarAppearanceModule.PostInitialise();
204 m_friendsModule.PostInitialise();
190 } 205 }
191 206
192 protected virtual void RegisterHttpHandlers() 207 protected virtual void RegisterHttpHandlers()
193 { 208 {
194 m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true); 209 m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true);
195 210
196 m_userManager.RegisterHandlers(m_httpServer); 211 m_userManager.RegisterHandlers(m_httpServer);
197 m_friendsModule.RegisterHandlers(m_httpServer); 212 m_friendsModule.RegisterHandlers(m_httpServer);
198 m_avatarAppearanceModule.RegisterHandlers(m_httpServer); 213 m_avatarAppearanceModule.RegisterHandlers(m_httpServer);
199 m_messagesService.RegisterHandlers(m_httpServer); 214 m_messagesService.RegisterHandlers(m_httpServer);
200 215 m_gridInfoService.RegisterHandlers(m_httpServer);
201 m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info",
202 m_gridInfoService.RestGetGridInfoMethod));
203 m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
204 } 216 }
205 217
206 public override void ShutdownSpecific() 218 public override void ShutdownSpecific()
207 { 219 {
208 m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation; 220 m_eventDispatcher.Close();
209 } 221 }
210 222
211 #region IUGAIMCore 223 #region IUGAIMCore
@@ -247,74 +259,11 @@ namespace OpenSim.Grid.UserServer
247 { 259 {
248 return m_httpServer; 260 return m_httpServer;
249 } 261 }
250
251
252 #endregion
253
254 #region Console Command Handlers
255
256 protected override void ShowHelp(string[] helpArgs)
257 {
258 base.ShowHelp(helpArgs);
259 }
260 #endregion 262 #endregion
261 263
262 public void TestResponse(List<InventoryFolderBase> resp) 264 public void TestResponse(List<InventoryFolderBase> resp)
263 { 265 {
264 m_console.Notice("response got"); 266 m_console.Notice("response got");
265 } 267 }
266
267 #region Event Handlers
268 public void NotifyMessageServersUserLoggOff(UUID agentID)
269 {
270 m_messagesService.TellMessageServersAboutUserLogoff(agentID);
271 }
272
273 public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID,
274 ulong regionhandle, float positionX, float positionY,
275 float positionZ, string firstname, string lastname)
276 {
277 m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX,
278 positionY, positionZ, firstname, lastname);
279 }
280
281 public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
282 {
283 m_userManager.HandleAgentLocation(agentID, regionID, regionHandle);
284 }
285
286 public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
287 {
288 m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle);
289 }
290
291 public void HandleRegionStartup(UUID regionID)
292 {
293 // This might seem strange, that we send this back to the
294 // server it came from. But there is method to the madness.
295 // There can be multiple user servers on the same database,
296 // and each can have multiple messaging servers. So, we send
297 // it to all known user servers, who send it to all known
298 // message servers. That way, we should be able to finally
299 // update presence to all regions and thereby all friends
300 //
301 m_userManager.HandleRegionStartup(regionID);
302 m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
303 }
304
305 public void HandleRegionShutdown(UUID regionID)
306 {
307 // This might seem strange, that we send this back to the
308 // server it came from. But there is method to the madness.
309 // There can be multiple user servers on the same database,
310 // and each can have multiple messaging servers. So, we send
311 // it to all known user servers, who send it to all known
312 // message servers. That way, we should be able to finally
313 // update presence to all regions and thereby all friends
314 //
315 m_userManager.HandleRegionShutdown(regionID);
316 m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
317 }
318 #endregion
319 } 268 }
320} 269}
diff --git a/OpenSim/Grid/UserServer/UserServerCommandModule.cs b/OpenSim/Grid/UserServer/UserServerCommandModule.cs
index f35cfec..a6f8af2 100644
--- a/OpenSim/Grid/UserServer/UserServerCommandModule.cs
+++ b/OpenSim/Grid/UserServer/UserServerCommandModule.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -59,9 +59,8 @@ namespace OpenSim.Grid.UserServer
59 59
60 protected IUGAIMCore m_core; 60 protected IUGAIMCore m_core;
61 61
62 public UserServerCommandModule( UserLoginService loginService) 62 public UserServerCommandModule()
63 { 63 {
64 m_loginService = loginService;
65 } 64 }
66 65
67 public void Initialise(IUGAIMCore core) 66 public void Initialise(IUGAIMCore core)
@@ -83,8 +82,15 @@ namespace OpenSim.Grid.UserServer
83 m_userDataBaseService = userDBservice; 82 m_userDataBaseService = userDBservice;
84 } 83 }
85 84
85 UserLoginService loginService;
86 if (m_core.TryGet<UserLoginService>(out loginService))
87 {
88 m_loginService = loginService;
89 }
90
86 ConsoleBase console; 91 ConsoleBase console;
87 if ((m_core.TryGet<ConsoleBase>(out console)) && (m_cfg != null) && (m_userDataBaseService != null)) 92 if ((m_core.TryGet<ConsoleBase>(out console)) && (m_cfg != null)
93 && (m_userDataBaseService != null) && (m_loginService != null))
88 { 94 {
89 RegisterConsoleCommands(console); 95 RegisterConsoleCommands(console);
90 } 96 }
diff --git a/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs b/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs
new file mode 100644
index 0000000..e23a7d1
--- /dev/null
+++ b/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs
@@ -0,0 +1,141 @@
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.IO;
31using System.Reflection;
32using log4net;
33using log4net.Config;
34using OpenMetaverse;
35using OpenSim.Data;
36using OpenSim.Framework;
37using OpenSim.Framework.Communications;
38using OpenSim.Framework.Communications.Cache;
39using OpenSim.Framework.Console;
40using OpenSim.Framework.Servers;
41using OpenSim.Framework.Statistics;
42using OpenSim.Grid.Communications.OGS1;
43using OpenSim.Grid.Framework;
44using OpenSim.Grid.UserServer.Modules;
45
46namespace OpenSim.Grid.UserServer
47{
48 //Do we actually need these event dispatchers?
49 //shouldn't the other modules just directly register event handlers to each other?
50 public class UserServerEventDispatchModule
51 {
52 protected UserManager m_userManager;
53 protected MessageServersConnector m_messagesService;
54 protected UserLoginService m_loginService;
55
56 public UserServerEventDispatchModule(UserManager userManager, MessageServersConnector messagesService, UserLoginService loginService)
57 {
58 m_userManager = userManager;
59 m_messagesService = messagesService;
60 m_loginService = loginService;
61 }
62
63 public void Initialise(IUGAIMCore core)
64 {
65 }
66
67 public void PostInitialise()
68 {
69 m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation;
70 m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff;
71
72 m_messagesService.OnAgentLocation += HandleAgentLocation;
73 m_messagesService.OnAgentLeaving += HandleAgentLeaving;
74 m_messagesService.OnRegionStartup += HandleRegionStartup;
75 m_messagesService.OnRegionShutdown += HandleRegionShutdown;
76 }
77
78 public void RegisterHandlers(BaseHttpServer httpServer)
79 {
80
81 }
82
83 public void Close()
84 {
85 m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation;
86 }
87
88 #region Event Handlers
89 public void NotifyMessageServersUserLoggOff(UUID agentID)
90 {
91 m_messagesService.TellMessageServersAboutUserLogoff(agentID);
92 }
93
94 public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID,
95 ulong regionhandle, float positionX, float positionY,
96 float positionZ, string firstname, string lastname)
97 {
98 m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX,
99 positionY, positionZ, firstname, lastname);
100 }
101
102 public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
103 {
104 m_userManager.HandleAgentLocation(agentID, regionID, regionHandle);
105 }
106
107 public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
108 {
109 m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle);
110 }
111
112 public void HandleRegionStartup(UUID regionID)
113 {
114 // This might seem strange, that we send this back to the
115 // server it came from. But there is method to the madness.
116 // There can be multiple user servers on the same database,
117 // and each can have multiple messaging servers. So, we send
118 // it to all known user servers, who send it to all known
119 // message servers. That way, we should be able to finally
120 // update presence to all regions and thereby all friends
121 //
122 m_userManager.HandleRegionStartup(regionID);
123 m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
124 }
125
126 public void HandleRegionShutdown(UUID regionID)
127 {
128 // This might seem strange, that we send this back to the
129 // server it came from. But there is method to the madness.
130 // There can be multiple user servers on the same database,
131 // and each can have multiple messaging servers. So, we send
132 // it to all known user servers, who send it to all known
133 // message servers. That way, we should be able to finally
134 // update presence to all regions and thereby all friends
135 //
136 m_userManager.HandleRegionShutdown(regionID);
137 m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
138 }
139 #endregion
140 }
141}