From 4db232763f578048c3339e6a60fe801cc3853b3d Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 25 Feb 2009 18:33:15 +0000 Subject: More refactoring of the Grid, User and Messaging servers. --- OpenSim/Grid/UserServer/Main.cs | 167 ++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 109 deletions(-) (limited to 'OpenSim/Grid/UserServer/Main.cs') 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 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(); + base.StartupSpecific(); } - 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 } } -- cgit v1.1