More refactoring of the Grid, User and Messaging servers.

GenericGridServerConcept
MW 2009-02-25 18:33:15 +00:00
parent 50dcd66896
commit 4db232763f
15 changed files with 395 additions and 228 deletions

View File

@ -114,17 +114,5 @@ namespace OpenSim.Framework.Communications
/// </summary> /// </summary>
/// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param> /// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param>
List<FriendListItem> GetUserFriendList(UUID friendlistowner); List<FriendListItem> GetUserFriendList(UUID friendlistowner);
/// <summary>
/// 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<UUID> GetAttachments(UUID user);
} }
} }

View File

@ -1,38 +1,38 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the * * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 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 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System; using System;
using OpenSim.Data; using OpenSim.Data;
namespace OpenSim.Grid.Framework namespace OpenSim.Grid.Framework
{ {
public interface IMessageRegionService public interface IMessageRegionLookup
{ {
int ClearRegionCache(); int ClearRegionCache();
RegionProfileData GetRegionInfo(ulong regionhandle); RegionProfileData GetRegionInfo(ulong regionhandle);
} }
} }

View File

@ -1,40 +1,40 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the * * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 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 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
namespace OpenSim.Grid.Framework namespace OpenSim.Grid.Framework
{ {
public interface IGridMessagingMapper public interface IMessagingServerDiscovery
{ {
List<MessageServerInfo> GetMessageServersList(); List<MessageServerInfo> GetMessageServersList();
void RegisterMessageServer(MessageServerInfo m); void RegisterMessageServer(MessageServerInfo m);
void DeRegisterMessageServer(MessageServerInfo m); void DeRegisterMessageServer(MessageServerInfo m);
} }
} }

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -38,7 +38,7 @@ using OpenSim.Grid.Framework;
namespace OpenSim.Grid.GridServer.Modules namespace OpenSim.Grid.GridServer.Modules
{ {
public class GridMessagingModule : IGridMessagingMapper public class GridMessagingModule : IMessagingServerDiscovery
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -68,7 +68,7 @@ namespace OpenSim.Grid.GridServer.Modules
m_gridCore = gridCore; m_gridCore = gridCore;
m_config = config; m_config = config;
m_gridCore.RegisterInterface<IGridMessagingMapper>(this); m_gridCore.RegisterInterface<IMessagingServerDiscovery>(this);
RegisterHandlers(); RegisterHandlers();
} }

View File

@ -51,7 +51,7 @@ namespace OpenSim.Grid.GridServer.Modules
protected GridConfig m_config; protected GridConfig m_config;
protected IGridMessagingMapper m_messagingServerMapper; protected IMessagingServerDiscovery m_messagingServerMapper;
/// <value> /// <value>
/// Used to notify old regions as to which OpenSim version to upgrade to /// Used to notify old regions as to which OpenSim version to upgrade to
/// </value> /// </value>
@ -80,8 +80,8 @@ namespace OpenSim.Grid.GridServer.Modules
public void PostInitialise() public void PostInitialise()
{ {
IGridMessagingMapper messagingModule; IMessagingServerDiscovery messagingModule;
if (m_gridCore.TryGet<IGridMessagingMapper>(out messagingModule)) if (m_gridCore.TryGet<IMessagingServerDiscovery>(out messagingModule))
{ {
m_messagingServerMapper = messagingModule; m_messagingServerMapper = messagingModule;
} }

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -42,7 +42,7 @@ using Timer = System.Timers.Timer;
namespace OpenSim.Grid.MessagingServer.Modules namespace OpenSim.Grid.MessagingServer.Modules
{ {
public class MessageRegionModule : IMessageRegionService public class MessageRegionModule : IMessageRegionLookup
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -63,7 +63,7 @@ namespace OpenSim.Grid.MessagingServer.Modules
public void Initialise() public void Initialise()
{ {
m_messageCore.RegisterInterface<IMessageRegionService>(this); m_messageCore.RegisterInterface<IMessageRegionLookup>(this);
} }
public void PostInitialise() public void PostInitialise()
@ -210,4 +210,4 @@ namespace OpenSim.Grid.MessagingServer.Modules
} }
} }
} }

View File

@ -52,7 +52,7 @@ namespace OpenSim.Grid.MessagingServer.Modules
private IUGAIMCore m_messageCore; private IUGAIMCore m_messageCore;
private IMessageUserServerService m_userServerModule; private IMessageUserServerService m_userServerModule;
private IMessageRegionService m_regionModule; private IMessageRegionLookup m_regionModule;
// a dictionary of all current presences this server knows about // a dictionary of all current presences this server knows about
private Dictionary<UUID, UserPresenceData> m_presences = new Dictionary<UUID,UserPresenceData>(); private Dictionary<UUID, UserPresenceData> m_presences = new Dictionary<UUID,UserPresenceData>();
@ -82,8 +82,8 @@ namespace OpenSim.Grid.MessagingServer.Modules
m_userServerModule = messageUserServer; m_userServerModule = messageUserServer;
} }
IMessageRegionService messageRegion; IMessageRegionLookup messageRegion;
if (m_messageCore.TryGet<IMessageRegionService>(out messageRegion)) if (m_messageCore.TryGet<IMessageRegionLookup>(out messageRegion))
{ {
m_regionModule = messageRegion; m_regionModule = messageRegion;
} }

View File

@ -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()
{
}
}
}

View File

@ -35,6 +35,7 @@ using Nwc.XmlRpc;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules namespace OpenSim.Grid.UserServer.Modules
{ {
@ -78,6 +79,8 @@ namespace OpenSim.Grid.UserServer.Modules
Thread m_NotifyThread; Thread m_NotifyThread;
private IUGAIMCore m_core;
public event AgentLocationDelegate OnAgentLocation; public event AgentLocationDelegate OnAgentLocation;
public event AgentLeavingDelegate OnAgentLeaving; public event AgentLeavingDelegate OnAgentLeaving;
public event RegionStartupDelegate OnRegionStartup; public event RegionStartupDelegate OnRegionStartup;
@ -86,18 +89,18 @@ namespace OpenSim.Grid.UserServer.Modules
public MessageServersConnector() public MessageServersConnector()
{ {
MessageServers = new Dictionary<string, MessageServerInfo>(); MessageServers = new Dictionary<string, MessageServerInfo>();
}
public void Initialise(IUGAIMCore core)
{
m_core = core;
m_core.RegisterInterface<MessageServersConnector>(this);
m_NotifyThread = new Thread(new ThreadStart(NotifyQueueRunner)); m_NotifyThread = new Thread(new ThreadStart(NotifyQueueRunner));
m_NotifyThread.Start(); m_NotifyThread.Start();
} }
public void Initialise()
{
}
public void PostInitialise() public void PostInitialise()
{ {
} }
public void RegisterHandlers(BaseHttpServer httpServer) public void RegisterHandlers(BaseHttpServer httpServer)

View File

@ -35,6 +35,7 @@ using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Communications; using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules namespace OpenSim.Grid.UserServer.Modules
{ {
@ -59,7 +60,7 @@ namespace OpenSim.Grid.UserServer.Modules
m_userDataBaseService = userDataBaseService; m_userDataBaseService = userDataBaseService;
} }
public void Initialise() public void Initialise(IUGAIMCore core)
{ {
} }

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -35,6 +35,7 @@ using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Communications; using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules namespace OpenSim.Grid.UserServer.Modules
{ {
@ -50,7 +51,7 @@ namespace OpenSim.Grid.UserServer.Modules
m_userDataBaseService = userDataBaseService; m_userDataBaseService = userDataBaseService;
} }
public void Initialise() public void Initialise(IUGAIMCore core)
{ {
} }

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -35,6 +35,7 @@ using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Communications; using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules namespace OpenSim.Grid.UserServer.Modules
{ {
@ -51,7 +52,7 @@ namespace OpenSim.Grid.UserServer.Modules
m_userDataBaseService = userDataBaseService; m_userDataBaseService = userDataBaseService;
} }
public void Initialise() public void Initialise(IUGAIMCore core)
{ {
} }
@ -170,4 +171,4 @@ namespace OpenSim.Grid.UserServer.Modules
return FriendListItemListtoXmlRPCResponse(returndata); return FriendListItemListtoXmlRPCResponse(returndata);
} }
} }
} }

View File

@ -62,10 +62,12 @@ namespace OpenSim.Grid.UserServer
protected UserServerFriendsModule m_friendsModule; protected UserServerFriendsModule m_friendsModule;
public UserLoginService m_loginService; public UserLoginService m_loginService;
public GridInfoService m_gridInfoService;
public MessageServersConnector m_messagesService; public MessageServersConnector m_messagesService;
protected GridInfoServiceModule m_gridInfoService;
protected UserServerCommandModule m_consoleCommandModule; protected UserServerCommandModule m_consoleCommandModule;
protected UserServerEventDispatchModule m_eventDispatcher;
public static void Main(string[] args) public static void Main(string[] args)
{ {
@ -97,62 +99,40 @@ namespace OpenSim.Grid.UserServer
protected override void StartupSpecific() protected override void StartupSpecific()
{ {
IInterServiceInventoryServices inventoryService = SetupRegisterCoreComponents(); IInterServiceInventoryServices inventoryService = StartupCoreComponents();
m_stats = StatsManager.StartCollectingUserStats(); 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 //setup services/modules
StartupUserServerModules(); StartupUserServerModules();
StartOtherComponents(inventoryService); StartOtherComponents(inventoryService);
m_consoleCommandModule = new UserServerCommandModule(m_loginService);
m_consoleCommandModule.Initialise(this);
//register event handlers
RegisterEventHandlers();
//PostInitialise the modules //PostInitialise the modules
m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here PostInitialiseModules();
m_userDataBaseService.PostInitialise();
//register http handlers and start http server //register http handlers and start http server
m_log.Info("[STARTUP]: Starting HTTP process"); m_log.Info("[STARTUP]: Starting HTTP process");
RegisterHttpHandlers(); RegisterHttpHandlers();
m_httpServer.Start(); m_httpServer.Start();
base.StartupSpecific(); base.StartupSpecific();
} }
private void StartOtherComponents(IInterServiceInventoryServices inventoryService) protected virtual IInterServiceInventoryServices StartupCoreComponents()
{
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()
{ {
Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml")));
IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl);
m_httpServer = new BaseHttpServer(Cfg.HttpPort); m_httpServer = new BaseHttpServer(Cfg.HttpPort);
RegisterInterface<ConsoleBase>(m_console); RegisterInterface<ConsoleBase>(m_console);
RegisterInterface<UserConfig>(Cfg); RegisterInterface<UserConfig>(Cfg);
IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl);
// IRegionProfileService regionProfileService = new RegionProfileServiceProxy();
RegisterInterface<IInterServiceInventoryServices>(inventoryService); RegisterInterface<IInterServiceInventoryServices>(inventoryService);
// RegisterInterface<IRegionProfileService>(regionProfileService);
return inventoryService; return inventoryService;
} }
@ -163,9 +143,43 @@ namespace OpenSim.Grid.UserServer
/// <param name="inventoryService"></param> /// <param name="inventoryService"></param>
protected virtual void StartupUserServerModules() 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 = new UserManager(m_userDataBaseService);
m_userManager.Initialise(this);
m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService); m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService);
m_avatarAppearanceModule.Initialise(this);
m_friendsModule = new UserServerFriendsModule(m_userDataBaseService); 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<UserLoginService>(m_loginService); //TODO: should be done in the login service
m_eventDispatcher = new UserServerEventDispatchModule(m_userManager, m_messagesService, m_loginService);
m_eventDispatcher.Initialise(this);
} }
/// <summary> /// <summary>
@ -178,34 +192,32 @@ namespace OpenSim.Grid.UserServer
m_userDataBaseService, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg, new RegionProfileServiceProxy()); 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_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here
m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; m_userDataBaseService.PostInitialise();
m_messagesService.PostInitialise();
m_messagesService.OnAgentLocation += HandleAgentLocation; m_eventDispatcher.PostInitialise(); //it will register event handlers in here
m_messagesService.OnAgentLeaving += HandleAgentLeaving; m_gridInfoService.PostInitialise();
m_messagesService.OnRegionStartup += HandleRegionStartup; m_userManager.PostInitialise();
m_messagesService.OnRegionShutdown += HandleRegionShutdown; m_avatarAppearanceModule.PostInitialise();
m_friendsModule.PostInitialise();
} }
protected virtual void RegisterHttpHandlers() protected virtual void RegisterHttpHandlers()
{ {
m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true); m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true);
m_userManager.RegisterHandlers(m_httpServer); m_userManager.RegisterHandlers(m_httpServer);
m_friendsModule.RegisterHandlers(m_httpServer); m_friendsModule.RegisterHandlers(m_httpServer);
m_avatarAppearanceModule.RegisterHandlers(m_httpServer); m_avatarAppearanceModule.RegisterHandlers(m_httpServer);
m_messagesService.RegisterHandlers(m_httpServer); m_messagesService.RegisterHandlers(m_httpServer);
m_gridInfoService.RegisterHandlers(m_httpServer);
m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info",
m_gridInfoService.RestGetGridInfoMethod));
m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
} }
public override void ShutdownSpecific() public override void ShutdownSpecific()
{ {
m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation; m_eventDispatcher.Close();
} }
#region IUGAIMCore #region IUGAIMCore
@ -247,74 +259,11 @@ namespace OpenSim.Grid.UserServer
{ {
return m_httpServer; return m_httpServer;
} }
#endregion
#region Console Command Handlers
protected override void ShowHelp(string[] helpArgs)
{
base.ShowHelp(helpArgs);
}
#endregion #endregion
public void TestResponse(List<InventoryFolderBase> resp) public void TestResponse(List<InventoryFolderBase> resp)
{ {
m_console.Notice("response got"); 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
} }
} }

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -59,9 +59,8 @@ namespace OpenSim.Grid.UserServer
protected IUGAIMCore m_core; protected IUGAIMCore m_core;
public UserServerCommandModule( UserLoginService loginService) public UserServerCommandModule()
{ {
m_loginService = loginService;
} }
public void Initialise(IUGAIMCore core) public void Initialise(IUGAIMCore core)
@ -83,8 +82,15 @@ namespace OpenSim.Grid.UserServer
m_userDataBaseService = userDBservice; m_userDataBaseService = userDBservice;
} }
UserLoginService loginService;
if (m_core.TryGet<UserLoginService>(out loginService))
{
m_loginService = loginService;
}
ConsoleBase console; ConsoleBase console;
if ((m_core.TryGet<ConsoleBase>(out console)) && (m_cfg != null) && (m_userDataBaseService != null)) if ((m_core.TryGet<ConsoleBase>(out console)) && (m_cfg != null)
&& (m_userDataBaseService != null) && (m_loginService != null))
{ {
RegisterConsoleCommands(console); RegisterConsoleCommands(console);
} }

View File

@ -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
}
}