diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs index badb552..f7e6eb8 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs | |||
@@ -36,14 +36,19 @@ using OpenSim.Services.Connectors; | |||
36 | 36 | ||
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using log4net; | 38 | using log4net; |
39 | using Mono.Addins; | ||
39 | using Nini.Config; | 40 | using Nini.Config; |
40 | 41 | ||
41 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser | 42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser |
42 | { | 43 | { |
44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RemoteGridUserServicesConnector")] | ||
43 | public class RemoteGridUserServicesConnector : ISharedRegionModule, IGridUserService | 45 | public class RemoteGridUserServicesConnector : ISharedRegionModule, IGridUserService |
44 | { | 46 | { |
45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
46 | 48 | ||
49 | private const int KEEPTIME = 30; // 30 secs | ||
50 | private ExpiringCache<string, GridUserInfo> m_Infos = new ExpiringCache<string, GridUserInfo>(); | ||
51 | |||
47 | #region ISharedRegionModule | 52 | #region ISharedRegionModule |
48 | 53 | ||
49 | private bool m_Enabled = false; | 54 | private bool m_Enabled = false; |
@@ -128,23 +133,60 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser | |||
128 | 133 | ||
129 | public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat) | 134 | public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat) |
130 | { | 135 | { |
136 | if (m_Infos.Contains(userID)) | ||
137 | m_Infos.Remove(userID); | ||
138 | |||
131 | return m_RemoteConnector.LoggedOut(userID, sessionID, region, position, lookat); | 139 | return m_RemoteConnector.LoggedOut(userID, sessionID, region, position, lookat); |
132 | } | 140 | } |
133 | 141 | ||
134 | 142 | ||
135 | public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) | 143 | public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) |
136 | { | 144 | { |
137 | return m_RemoteConnector.SetHome(userID, regionID, position, lookAt); | 145 | if (m_RemoteConnector.SetHome(userID, regionID, position, lookAt)) |
146 | { | ||
147 | // Update the cache too | ||
148 | GridUserInfo info = null; | ||
149 | if (m_Infos.TryGetValue(userID, out info)) | ||
150 | { | ||
151 | info.HomeRegionID = regionID; | ||
152 | info.HomePosition = position; | ||
153 | info.HomeLookAt = lookAt; | ||
154 | } | ||
155 | return true; | ||
156 | } | ||
157 | |||
158 | return false; | ||
138 | } | 159 | } |
139 | 160 | ||
140 | public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt) | 161 | public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt) |
141 | { | 162 | { |
142 | return m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt); | 163 | if (m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt)) |
164 | { | ||
165 | // Update the cache too | ||
166 | GridUserInfo info = null; | ||
167 | if (m_Infos.TryGetValue(userID, out info)) | ||
168 | { | ||
169 | info.LastRegionID = regionID; | ||
170 | info.LastPosition = position; | ||
171 | info.LastLookAt = lookAt; | ||
172 | } | ||
173 | return true; | ||
174 | } | ||
175 | |||
176 | return false; | ||
143 | } | 177 | } |
144 | 178 | ||
145 | public GridUserInfo GetGridUserInfo(string userID) | 179 | public GridUserInfo GetGridUserInfo(string userID) |
146 | { | 180 | { |
147 | return m_RemoteConnector.GetGridUserInfo(userID); | 181 | GridUserInfo info = null; |
182 | if (m_Infos.TryGetValue(userID, out info)) | ||
183 | return info; | ||
184 | |||
185 | info = m_RemoteConnector.GetGridUserInfo(userID); | ||
186 | |||
187 | m_Infos.AddOrUpdate(userID, info, KEEPTIME); | ||
188 | |||
189 | return info; | ||
148 | } | 190 | } |
149 | 191 | ||
150 | public GridUserInfo[] GetGridUserInfo(string[] userID) | 192 | public GridUserInfo[] GetGridUserInfo(string[] userID) |