aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications/CommunicationsManager.cs
diff options
context:
space:
mode:
authorTeravus Ovares2008-05-29 23:36:37 +0000
committerTeravus Ovares2008-05-29 23:36:37 +0000
commit9cefda83d6d54edc9ed1587bb71e9cb8fb2d17d5 (patch)
treec0ae17b8dac06e2616532fea2ac4e2bfcb59f4b6 /OpenSim/Framework/Communications/CommunicationsManager.cs
parent* Fixes a few taper/top-sheer situations that were previously having issues. (diff)
downloadopensim-SC-9cefda83d6d54edc9ed1587bb71e9cb8fb2d17d5.zip
opensim-SC-9cefda83d6d54edc9ed1587bb71e9cb8fb2d17d5.tar.gz
opensim-SC-9cefda83d6d54edc9ed1587bb71e9cb8fb2d17d5.tar.bz2
opensim-SC-9cefda83d6d54edc9ed1587bb71e9cb8fb2d17d5.tar.xz
* Caches UUIDName requests
* Looks up UUIDNames for script time and colliders in a separate thread. * Hopefully this'll allow you to look at top scripts on a region that has a lot of scripts without crashing your client thread.
Diffstat (limited to 'OpenSim/Framework/Communications/CommunicationsManager.cs')
-rw-r--r--OpenSim/Framework/Communications/CommunicationsManager.cs61
1 files changed, 52 insertions, 9 deletions
diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs
index 37020f6..cc64e6c 100644
--- a/OpenSim/Framework/Communications/CommunicationsManager.cs
+++ b/OpenSim/Framework/Communications/CommunicationsManager.cs
@@ -41,6 +41,7 @@ namespace OpenSim.Framework.Communications
41 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 41 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
42 42
43 protected IUserService m_userService; 43 protected IUserService m_userService;
44 protected Dictionary<LLUUID, string[]> m_nameRequestCache = new Dictionary<LLUUID, string[]>();
44 45
45 public IUserService UserService 46 public IUserService UserService
46 { 47 {
@@ -248,27 +249,69 @@ namespace OpenSim.Framework.Communications
248 } 249 }
249 else 250 else
250 { 251 {
252 string[] names = doUUIDNameRequest(uuid);
253 if (names.Length == 2)
254 {
255 remote_client.SendNameReply(uuid, names[0], names[1]);
256 }
257
258 }
259 }
260
261 private string[] doUUIDNameRequest(LLUUID uuid)
262 {
263 string[] returnstring = new string[0];
264 bool doLookup = false;
265
266
267 lock (m_nameRequestCache)
268 {
269 if (m_nameRequestCache.ContainsKey(uuid))
270 {
271 returnstring = m_nameRequestCache[uuid];
272 }
273 else
274 {
275 // we don't want to lock the dictionary while we're doing the lookup
276 doLookup = true;
277 }
278 }
279
280 if (doLookup) {
251 UserProfileData profileData = m_userService.GetUserProfile(uuid); 281 UserProfileData profileData = m_userService.GetUserProfile(uuid);
252 if (profileData != null) 282 if (profileData != null)
253 { 283 {
284 returnstring = new string[2];
254 LLUUID profileId = profileData.ID; 285 LLUUID profileId = profileData.ID;
255 string firstname = profileData.FirstName; 286 returnstring[0] = profileData.FirstName;
256 string lastname = profileData.SurName; 287 returnstring[1] = profileData.SurName;
257 288 lock (m_nameRequestCache)
258 remote_client.SendNameReply(profileId, firstname, lastname); 289 {
290 if (!m_nameRequestCache.ContainsKey(uuid))
291 m_nameRequestCache.Add(uuid, returnstring);
292 }
259 } 293 }
260 } 294 }
295 return returnstring;
296
261 } 297 }
298
299 public bool UUIDNameCachedTest(LLUUID uuid)
300 {
301 lock (m_nameRequestCache)
302 return m_nameRequestCache.ContainsKey(uuid);
303 }
304
262 public string UUIDNameRequestString(LLUUID uuid) 305 public string UUIDNameRequestString(LLUUID uuid)
263 { 306 {
264 UserProfileData profileData = m_userService.GetUserProfile(uuid); 307 string[] names = doUUIDNameRequest(uuid);
265 if (profileData != null) 308 if (names.Length == 2)
266 { 309 {
267 //LLUUID profileId = profileData.ID; 310 string firstname = names[0];
268 string firstname = profileData.FirstName; 311 string lastname = names[1];
269 string lastname = profileData.SurName;
270 312
271 return firstname + " " + lastname; 313 return firstname + " " + lastname;
314
272 } 315 }
273 return "(hippos)"; 316 return "(hippos)";
274 } 317 }