aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs48
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
37using OpenMetaverse; 37using OpenMetaverse;
38using log4net; 38using log4net;
39using Mono.Addins;
39using Nini.Config; 40using Nini.Config;
40 41
41namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser 42namespace 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)