From 4db232763f578048c3339e6a60fe801cc3853b3d Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 25 Feb 2009 18:33:15 +0000 Subject: [PATCH] More refactoring of the Grid, User and Messaging servers. --- .../Framework/Communications/IUserService.cs | 12 -- ...gionService.cs => IMessageRegionLookup.cs} | 76 ++++---- ...Mapper.cs => IMessagingServerDiscovery.cs} | 80 ++++----- .../GridServer.Modules/GridMessagingModule.cs | 6 +- .../GridServer.Modules/GridXmlRpcModule.cs | 6 +- .../MessageRegionModule.cs | 8 +- .../MessagingServer.Modules/MessageService.cs | 6 +- .../GridInfoServiceModule.cs | 77 ++++++++ .../MessageServersConnector.cs | 15 +- .../Grid/UserServer.Modules/UserManager.cs | 3 +- .../UserServerAvatarAppearanceModule.cs | 5 +- .../UserServerFriendsModule.cs | 7 +- OpenSim/Grid/UserServer/Main.cs | 167 ++++++------------ .../UserServer/UserServerCommandModule.cs | 14 +- .../UserServerEventDispatchModule.cs | 141 +++++++++++++++ 15 files changed, 395 insertions(+), 228 deletions(-) rename OpenSim/Grid/Framework/{IMessageRegionService.cs => IMessageRegionLookup.cs} (95%) rename OpenSim/Grid/Framework/{IGridMessagingMapper.cs => IMessagingServerDiscovery.cs} (95%) create mode 100644 OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs create mode 100644 OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs diff --git a/OpenSim/Framework/Communications/IUserService.cs b/OpenSim/Framework/Communications/IUserService.cs index 206fb1ed1b..08460245d7 100644 --- a/OpenSim/Framework/Communications/IUserService.cs +++ b/OpenSim/Framework/Communications/IUserService.cs @@ -114,17 +114,5 @@ namespace OpenSim.Framework.Communications /// /// The agent that we're retreiving the friends Data. List GetUserFriendList(UUID friendlistowner); - - /// - /// Get's the User Appearance - // AvatarAppearance GetUserAppearance(UUID user); - - // void UpdateUserAppearance(UUID user, AvatarAppearance appearance); - - // void AddAttachment(UUID user, UUID attach); - - // void RemoveAttachment(UUID user, UUID attach); - - // List GetAttachments(UUID user); } } diff --git a/OpenSim/Grid/Framework/IMessageRegionService.cs b/OpenSim/Grid/Framework/IMessageRegionLookup.cs similarity index 95% rename from OpenSim/Grid/Framework/IMessageRegionService.cs rename to OpenSim/Grid/Framework/IMessageRegionLookup.cs index 8c1d15a809..5e49a40240 100644 --- a/OpenSim/Grid/Framework/IMessageRegionService.cs +++ b/OpenSim/Grid/Framework/IMessageRegionLookup.cs @@ -1,38 +1,38 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using OpenSim.Data; - -namespace OpenSim.Grid.Framework -{ - public interface IMessageRegionService - { - int ClearRegionCache(); - RegionProfileData GetRegionInfo(ulong regionhandle); - } -} +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using OpenSim.Data; + +namespace OpenSim.Grid.Framework +{ + public interface IMessageRegionLookup + { + int ClearRegionCache(); + RegionProfileData GetRegionInfo(ulong regionhandle); + } +} diff --git a/OpenSim/Grid/Framework/IGridMessagingMapper.cs b/OpenSim/Grid/Framework/IMessagingServerDiscovery.cs similarity index 95% rename from OpenSim/Grid/Framework/IGridMessagingMapper.cs rename to OpenSim/Grid/Framework/IMessagingServerDiscovery.cs index 3a21431374..7995aba69a 100644 --- a/OpenSim/Grid/Framework/IGridMessagingMapper.cs +++ b/OpenSim/Grid/Framework/IMessagingServerDiscovery.cs @@ -1,40 +1,40 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; -using OpenSim.Framework.Servers; - -namespace OpenSim.Grid.Framework -{ - public interface IGridMessagingMapper - { - List GetMessageServersList(); - void RegisterMessageServer(MessageServerInfo m); - void DeRegisterMessageServer(MessageServerInfo m); - } -} +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using OpenSim.Framework.Servers; + +namespace OpenSim.Grid.Framework +{ + public interface IMessagingServerDiscovery + { + List GetMessageServersList(); + void RegisterMessageServer(MessageServerInfo m); + void DeRegisterMessageServer(MessageServerInfo m); + } +} diff --git a/OpenSim/Grid/GridServer.Modules/GridMessagingModule.cs b/OpenSim/Grid/GridServer.Modules/GridMessagingModule.cs index ee38310c68..1d2c5292e7 100644 --- a/OpenSim/Grid/GridServer.Modules/GridMessagingModule.cs +++ b/OpenSim/Grid/GridServer.Modules/GridMessagingModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -38,7 +38,7 @@ using OpenSim.Grid.Framework; namespace OpenSim.Grid.GridServer.Modules { - public class GridMessagingModule : IGridMessagingMapper + public class GridMessagingModule : IMessagingServerDiscovery { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -68,7 +68,7 @@ namespace OpenSim.Grid.GridServer.Modules m_gridCore = gridCore; m_config = config; - m_gridCore.RegisterInterface(this); + m_gridCore.RegisterInterface(this); RegisterHandlers(); } diff --git a/OpenSim/Grid/GridServer.Modules/GridXmlRpcModule.cs b/OpenSim/Grid/GridServer.Modules/GridXmlRpcModule.cs index 292ce0dcd5..62101e56a9 100644 --- a/OpenSim/Grid/GridServer.Modules/GridXmlRpcModule.cs +++ b/OpenSim/Grid/GridServer.Modules/GridXmlRpcModule.cs @@ -51,7 +51,7 @@ namespace OpenSim.Grid.GridServer.Modules protected GridConfig m_config; - protected IGridMessagingMapper m_messagingServerMapper; + protected IMessagingServerDiscovery m_messagingServerMapper; /// /// Used to notify old regions as to which OpenSim version to upgrade to /// @@ -80,8 +80,8 @@ namespace OpenSim.Grid.GridServer.Modules public void PostInitialise() { - IGridMessagingMapper messagingModule; - if (m_gridCore.TryGet(out messagingModule)) + IMessagingServerDiscovery messagingModule; + if (m_gridCore.TryGet(out messagingModule)) { m_messagingServerMapper = messagingModule; } diff --git a/OpenSim/Grid/MessagingServer.Modules/MessageRegionModule.cs b/OpenSim/Grid/MessagingServer.Modules/MessageRegionModule.cs index 7b3edfb278..7002a2e862 100644 --- a/OpenSim/Grid/MessagingServer.Modules/MessageRegionModule.cs +++ b/OpenSim/Grid/MessagingServer.Modules/MessageRegionModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -42,7 +42,7 @@ using Timer = System.Timers.Timer; namespace OpenSim.Grid.MessagingServer.Modules { - public class MessageRegionModule : IMessageRegionService + public class MessageRegionModule : IMessageRegionLookup { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -63,7 +63,7 @@ namespace OpenSim.Grid.MessagingServer.Modules public void Initialise() { - m_messageCore.RegisterInterface(this); + m_messageCore.RegisterInterface(this); } public void PostInitialise() @@ -210,4 +210,4 @@ namespace OpenSim.Grid.MessagingServer.Modules } } -} +} \ No newline at end of file diff --git a/OpenSim/Grid/MessagingServer.Modules/MessageService.cs b/OpenSim/Grid/MessagingServer.Modules/MessageService.cs index c76f332276..e79e5b4742 100644 --- a/OpenSim/Grid/MessagingServer.Modules/MessageService.cs +++ b/OpenSim/Grid/MessagingServer.Modules/MessageService.cs @@ -52,7 +52,7 @@ namespace OpenSim.Grid.MessagingServer.Modules private IUGAIMCore m_messageCore; private IMessageUserServerService m_userServerModule; - private IMessageRegionService m_regionModule; + private IMessageRegionLookup m_regionModule; // a dictionary of all current presences this server knows about private Dictionary m_presences = new Dictionary(); @@ -82,8 +82,8 @@ namespace OpenSim.Grid.MessagingServer.Modules m_userServerModule = messageUserServer; } - IMessageRegionService messageRegion; - if (m_messageCore.TryGet(out messageRegion)) + IMessageRegionLookup messageRegion; + if (m_messageCore.TryGet(out messageRegion)) { m_regionModule = messageRegion; } diff --git a/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs b/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs new file mode 100644 index 0000000000..a6fdee0545 --- /dev/null +++ b/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs @@ -0,0 +1,77 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using log4net; +using log4net.Config; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Framework.Communications; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Servers; +using OpenSim.Grid.Communications.OGS1; +using OpenSim.Grid.Framework; + +namespace OpenSim.Grid.UserServer.Modules +{ + public class GridInfoServiceModule + { + protected IUGAIMCore m_core; + protected GridInfoService m_gridInfoService; + protected BaseHttpServer m_httpServer; + + public GridInfoServiceModule() + { + } + + public void Initialise(IUGAIMCore core) + { + m_core = core; + m_gridInfoService = new GridInfoService(); + } + + public void PostInitialise() + { + + } + + public void RegisterHandlers(BaseHttpServer httpServer) + { + m_httpServer = httpServer; + m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", + m_gridInfoService.RestGetGridInfoMethod)); + m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod); + } + + public void Close() + { + } + } +} diff --git a/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs b/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs index 59e98058b6..5b245ee79e 100644 --- a/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs +++ b/OpenSim/Grid/UserServer.Modules/MessageServersConnector.cs @@ -35,6 +35,7 @@ using Nwc.XmlRpc; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Servers; +using OpenSim.Grid.Framework; namespace OpenSim.Grid.UserServer.Modules { @@ -78,6 +79,8 @@ namespace OpenSim.Grid.UserServer.Modules Thread m_NotifyThread; + private IUGAIMCore m_core; + public event AgentLocationDelegate OnAgentLocation; public event AgentLeavingDelegate OnAgentLeaving; public event RegionStartupDelegate OnRegionStartup; @@ -86,18 +89,18 @@ namespace OpenSim.Grid.UserServer.Modules public MessageServersConnector() { MessageServers = new Dictionary(); + } + + public void Initialise(IUGAIMCore core) + { + m_core = core; + m_core.RegisterInterface(this); m_NotifyThread = new Thread(new ThreadStart(NotifyQueueRunner)); m_NotifyThread.Start(); } - public void Initialise() - { - - } - public void PostInitialise() { - } public void RegisterHandlers(BaseHttpServer httpServer) diff --git a/OpenSim/Grid/UserServer.Modules/UserManager.cs b/OpenSim/Grid/UserServer.Modules/UserManager.cs index 1f4b07d8be..34daff2596 100644 --- a/OpenSim/Grid/UserServer.Modules/UserManager.cs +++ b/OpenSim/Grid/UserServer.Modules/UserManager.cs @@ -35,6 +35,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Servers; +using OpenSim.Grid.Framework; namespace OpenSim.Grid.UserServer.Modules { @@ -59,7 +60,7 @@ namespace OpenSim.Grid.UserServer.Modules m_userDataBaseService = userDataBaseService; } - public void Initialise() + public void Initialise(IUGAIMCore core) { } diff --git a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs index a1497b40ea..e68752d7cd 100644 --- a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs +++ b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -35,6 +35,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Servers; +using OpenSim.Grid.Framework; namespace OpenSim.Grid.UserServer.Modules { @@ -50,7 +51,7 @@ namespace OpenSim.Grid.UserServer.Modules m_userDataBaseService = userDataBaseService; } - public void Initialise() + public void Initialise(IUGAIMCore core) { } diff --git a/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs b/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs index 9711a4b81a..6c1daead16 100644 --- a/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs +++ b/OpenSim/Grid/UserServer.Modules/UserServerFriendsModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -35,6 +35,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Servers; +using OpenSim.Grid.Framework; namespace OpenSim.Grid.UserServer.Modules { @@ -51,7 +52,7 @@ namespace OpenSim.Grid.UserServer.Modules m_userDataBaseService = userDataBaseService; } - public void Initialise() + public void Initialise(IUGAIMCore core) { } @@ -170,4 +171,4 @@ namespace OpenSim.Grid.UserServer.Modules return FriendListItemListtoXmlRPCResponse(returndata); } } -} +} \ No newline at end of file diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index e174b2d6c8..63d788d286 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs @@ -62,10 +62,12 @@ namespace OpenSim.Grid.UserServer protected UserServerFriendsModule m_friendsModule; public UserLoginService m_loginService; - public GridInfoService m_gridInfoService; public MessageServersConnector m_messagesService; + protected GridInfoServiceModule m_gridInfoService; + protected UserServerCommandModule m_consoleCommandModule; + protected UserServerEventDispatchModule m_eventDispatcher; public static void Main(string[] args) { @@ -97,62 +99,40 @@ namespace OpenSim.Grid.UserServer protected override void StartupSpecific() { - IInterServiceInventoryServices inventoryService = SetupRegisterCoreComponents(); + IInterServiceInventoryServices inventoryService = StartupCoreComponents(); m_stats = StatsManager.StartCollectingUserStats(); - m_log.Info("[STARTUP]: Establishing data connection"); - //setup database access service - m_userDataBaseService = new UserDataBaseService(); - m_userDataBaseService.Initialise(this); - //setup services/modules StartupUserServerModules(); StartOtherComponents(inventoryService); - m_consoleCommandModule = new UserServerCommandModule(m_loginService); - m_consoleCommandModule.Initialise(this); - - //register event handlers - RegisterEventHandlers(); - //PostInitialise the modules - m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here - m_userDataBaseService.PostInitialise(); + PostInitialiseModules(); //register http handlers and start http server m_log.Info("[STARTUP]: Starting HTTP process"); RegisterHttpHandlers(); m_httpServer.Start(); - + base.StartupSpecific(); } - private void StartOtherComponents(IInterServiceInventoryServices inventoryService) - { - m_gridInfoService = new GridInfoService(); - - StartupLoginService(inventoryService); - // - // Get the minimum defaultLevel to access to the grid - // - m_loginService.setloginlevel((int)Cfg.DefaultUserLevel); - - m_messagesService = new MessageServersConnector(); - } - - private IInterServiceInventoryServices SetupRegisterCoreComponents() + protected virtual IInterServiceInventoryServices StartupCoreComponents() { Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); - IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl); - m_httpServer = new BaseHttpServer(Cfg.HttpPort); RegisterInterface(m_console); RegisterInterface(Cfg); + + IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl); + // IRegionProfileService regionProfileService = new RegionProfileServiceProxy(); + RegisterInterface(inventoryService); + // RegisterInterface(regionProfileService); return inventoryService; } @@ -163,9 +143,43 @@ namespace OpenSim.Grid.UserServer /// protected virtual void StartupUserServerModules() { + m_log.Info("[STARTUP]: Establishing data connection"); + //setup database access service, for now this has to be created before the other modules. + m_userDataBaseService = new UserDataBaseService(); + m_userDataBaseService.Initialise(this); + + //TODO: change these modules so they fetch the databaseService class in the PostInitialise method m_userManager = new UserManager(m_userDataBaseService); + m_userManager.Initialise(this); + m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService); + m_avatarAppearanceModule.Initialise(this); + m_friendsModule = new UserServerFriendsModule(m_userDataBaseService); + m_friendsModule.Initialise(this); + + m_consoleCommandModule = new UserServerCommandModule(); + m_consoleCommandModule.Initialise(this); + + m_messagesService = new MessageServersConnector(); + m_messagesService.Initialise(this); + + m_gridInfoService = new GridInfoServiceModule(); + m_gridInfoService.Initialise(this); + } + + protected virtual void StartOtherComponents(IInterServiceInventoryServices inventoryService) + { + StartupLoginService(inventoryService); + // + // Get the minimum defaultLevel to access to the grid + // + m_loginService.setloginlevel((int)Cfg.DefaultUserLevel); + + RegisterInterface(m_loginService); //TODO: should be done in the login service + + m_eventDispatcher = new UserServerEventDispatchModule(m_userManager, m_messagesService, m_loginService); + m_eventDispatcher.Initialise(this); } /// @@ -178,34 +192,32 @@ namespace OpenSim.Grid.UserServer m_userDataBaseService, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg, new RegionProfileServiceProxy()); } - protected virtual void RegisterEventHandlers() + protected virtual void PostInitialiseModules() { - m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation; - m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; - - m_messagesService.OnAgentLocation += HandleAgentLocation; - m_messagesService.OnAgentLeaving += HandleAgentLeaving; - m_messagesService.OnRegionStartup += HandleRegionStartup; - m_messagesService.OnRegionShutdown += HandleRegionShutdown; + m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here + m_userDataBaseService.PostInitialise(); + m_messagesService.PostInitialise(); + m_eventDispatcher.PostInitialise(); //it will register event handlers in here + m_gridInfoService.PostInitialise(); + m_userManager.PostInitialise(); + m_avatarAppearanceModule.PostInitialise(); + m_friendsModule.PostInitialise(); } protected virtual void RegisterHttpHandlers() { m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true); - + m_userManager.RegisterHandlers(m_httpServer); m_friendsModule.RegisterHandlers(m_httpServer); m_avatarAppearanceModule.RegisterHandlers(m_httpServer); m_messagesService.RegisterHandlers(m_httpServer); - - m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", - m_gridInfoService.RestGetGridInfoMethod)); - m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod); + m_gridInfoService.RegisterHandlers(m_httpServer); } public override void ShutdownSpecific() { - m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation; + m_eventDispatcher.Close(); } #region IUGAIMCore @@ -247,74 +259,11 @@ namespace OpenSim.Grid.UserServer { return m_httpServer; } - - - #endregion - - #region Console Command Handlers - - protected override void ShowHelp(string[] helpArgs) - { - base.ShowHelp(helpArgs); - } #endregion public void TestResponse(List resp) { m_console.Notice("response got"); } - - #region Event Handlers - public void NotifyMessageServersUserLoggOff(UUID agentID) - { - m_messagesService.TellMessageServersAboutUserLogoff(agentID); - } - - public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID, - ulong regionhandle, float positionX, float positionY, - float positionZ, string firstname, string lastname) - { - m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX, - positionY, positionZ, firstname, lastname); - } - - public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle) - { - m_userManager.HandleAgentLocation(agentID, regionID, regionHandle); - } - - public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle) - { - m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle); - } - - public void HandleRegionStartup(UUID regionID) - { - // This might seem strange, that we send this back to the - // server it came from. But there is method to the madness. - // There can be multiple user servers on the same database, - // and each can have multiple messaging servers. So, we send - // it to all known user servers, who send it to all known - // message servers. That way, we should be able to finally - // update presence to all regions and thereby all friends - // - m_userManager.HandleRegionStartup(regionID); - m_messagesService.TellMessageServersAboutRegionShutdown(regionID); - } - - public void HandleRegionShutdown(UUID regionID) - { - // This might seem strange, that we send this back to the - // server it came from. But there is method to the madness. - // There can be multiple user servers on the same database, - // and each can have multiple messaging servers. So, we send - // it to all known user servers, who send it to all known - // message servers. That way, we should be able to finally - // update presence to all regions and thereby all friends - // - m_userManager.HandleRegionShutdown(regionID); - m_messagesService.TellMessageServersAboutRegionShutdown(regionID); - } - #endregion } } diff --git a/OpenSim/Grid/UserServer/UserServerCommandModule.cs b/OpenSim/Grid/UserServer/UserServerCommandModule.cs index f35cfec6db..a6f8af29d4 100644 --- a/OpenSim/Grid/UserServer/UserServerCommandModule.cs +++ b/OpenSim/Grid/UserServer/UserServerCommandModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -59,9 +59,8 @@ namespace OpenSim.Grid.UserServer protected IUGAIMCore m_core; - public UserServerCommandModule( UserLoginService loginService) + public UserServerCommandModule() { - m_loginService = loginService; } public void Initialise(IUGAIMCore core) @@ -83,8 +82,15 @@ namespace OpenSim.Grid.UserServer m_userDataBaseService = userDBservice; } + UserLoginService loginService; + if (m_core.TryGet(out loginService)) + { + m_loginService = loginService; + } + ConsoleBase console; - if ((m_core.TryGet(out console)) && (m_cfg != null) && (m_userDataBaseService != null)) + if ((m_core.TryGet(out console)) && (m_cfg != null) + && (m_userDataBaseService != null) && (m_loginService != null)) { RegisterConsoleCommands(console); } diff --git a/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs b/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs new file mode 100644 index 0000000000..e23a7d19b8 --- /dev/null +++ b/OpenSim/Grid/UserServer/UserServerEventDispatchModule.cs @@ -0,0 +1,141 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using log4net; +using log4net.Config; +using OpenMetaverse; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Framework.Communications; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Console; +using OpenSim.Framework.Servers; +using OpenSim.Framework.Statistics; +using OpenSim.Grid.Communications.OGS1; +using OpenSim.Grid.Framework; +using OpenSim.Grid.UserServer.Modules; + +namespace OpenSim.Grid.UserServer +{ + //Do we actually need these event dispatchers? + //shouldn't the other modules just directly register event handlers to each other? + public class UserServerEventDispatchModule + { + protected UserManager m_userManager; + protected MessageServersConnector m_messagesService; + protected UserLoginService m_loginService; + + public UserServerEventDispatchModule(UserManager userManager, MessageServersConnector messagesService, UserLoginService loginService) + { + m_userManager = userManager; + m_messagesService = messagesService; + m_loginService = loginService; + } + + public void Initialise(IUGAIMCore core) + { + } + + public void PostInitialise() + { + m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation; + m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; + + m_messagesService.OnAgentLocation += HandleAgentLocation; + m_messagesService.OnAgentLeaving += HandleAgentLeaving; + m_messagesService.OnRegionStartup += HandleRegionStartup; + m_messagesService.OnRegionShutdown += HandleRegionShutdown; + } + + public void RegisterHandlers(BaseHttpServer httpServer) + { + + } + + public void Close() + { + m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation; + } + + #region Event Handlers + public void NotifyMessageServersUserLoggOff(UUID agentID) + { + m_messagesService.TellMessageServersAboutUserLogoff(agentID); + } + + public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID, + ulong regionhandle, float positionX, float positionY, + float positionZ, string firstname, string lastname) + { + m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX, + positionY, positionZ, firstname, lastname); + } + + public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle) + { + m_userManager.HandleAgentLocation(agentID, regionID, regionHandle); + } + + public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle) + { + m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle); + } + + public void HandleRegionStartup(UUID regionID) + { + // This might seem strange, that we send this back to the + // server it came from. But there is method to the madness. + // There can be multiple user servers on the same database, + // and each can have multiple messaging servers. So, we send + // it to all known user servers, who send it to all known + // message servers. That way, we should be able to finally + // update presence to all regions and thereby all friends + // + m_userManager.HandleRegionStartup(regionID); + m_messagesService.TellMessageServersAboutRegionShutdown(regionID); + } + + public void HandleRegionShutdown(UUID regionID) + { + // This might seem strange, that we send this back to the + // server it came from. But there is method to the madness. + // There can be multiple user servers on the same database, + // and each can have multiple messaging servers. So, we send + // it to all known user servers, who send it to all known + // message servers. That way, we should be able to finally + // update presence to all regions and thereby all friends + // + m_userManager.HandleRegionShutdown(regionID); + m_messagesService.TellMessageServersAboutRegionShutdown(regionID); + } + #endregion + } +}