From ae58cf42242433c786162b53a2724962f4a8380b Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 25 Sep 2012 20:03:49 -0700 Subject: TOS module. WARNING: migration in GridUser table. --- .../GridUser/ActivityDetector.cs | 13 +++++- .../GridUser/RemoteGridUserServiceConnector.cs | 46 ++++++++++++++++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs index b0edce7..dd8a8ef 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs @@ -68,8 +68,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser // m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName); if (sp.PresenceType != PresenceType.Npc) + { + string userid = sp.Scene.UserManagementModule.GetUserUUI(sp.UUID); m_GridUserService.SetLastPosition( - sp.UUID.ToString(), UUID.Zero, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat); + userid, UUID.Zero, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat); + } } public void OnNewClient(IClientAPI client) @@ -83,8 +86,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser return; // m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName); + string userId = client.AgentId.ToString(); + if (client.Scene is Scene) + { + Scene s = (Scene)client.Scene; + userId = s.UserManagementModule.GetUserUUI(client.AgentId); + } m_GridUserService.LoggedOut( - client.AgentId.ToString(), client.SessionId, client.Scene.RegionInfo.RegionID, + userId, client.SessionId, client.Scene.RegionInfo.RegionID, client.SceneAgent.AbsolutePosition, client.SceneAgent.Lookat); } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs index badb552..04acf67 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs @@ -44,6 +44,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private const int KEEPTIME = 30; // 30 secs + private ExpiringCache m_Infos = new ExpiringCache(); + #region ISharedRegionModule private bool m_Enabled = false; @@ -128,23 +131,60 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat) { + if (m_Infos.Contains(userID)) + m_Infos.Remove(userID); + return m_RemoteConnector.LoggedOut(userID, sessionID, region, position, lookat); } public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) { - return m_RemoteConnector.SetHome(userID, regionID, position, lookAt); + if (m_RemoteConnector.SetHome(userID, regionID, position, lookAt)) + { + // Update the cache too + GridUserInfo info = null; + if (m_Infos.TryGetValue(userID, out info)) + { + info.HomeRegionID = regionID; + info.HomePosition = position; + info.HomeLookAt = lookAt; + } + return true; + } + + return false; } public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt) { - return m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt); + if (m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt)) + { + // Update the cache too + GridUserInfo info = null; + if (m_Infos.TryGetValue(userID, out info)) + { + info.LastRegionID = regionID; + info.LastPosition = position; + info.LastLookAt = lookAt; + } + return true; + } + + return false; } public GridUserInfo GetGridUserInfo(string userID) { - return m_RemoteConnector.GetGridUserInfo(userID); + GridUserInfo info = null; + if (m_Infos.TryGetValue(userID, out info)) + return info; + + info = m_RemoteConnector.GetGridUserInfo(userID); + + m_Infos.AddOrUpdate(userID, info, KEEPTIME); + + return info; } public GridUserInfo[] GetGridUserInfo(string[] userID) -- cgit v1.1