diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index 0d9fd94..7c81d6a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -44,6 +44,7 @@ using OpenSim.Server.Base; | |||
44 | using OpenSim.Framework.Servers.HttpServer; | 44 | using OpenSim.Framework.Servers.HttpServer; |
45 | using log4net; | 45 | using log4net; |
46 | using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; | 46 | using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; |
47 | using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; | ||
47 | 48 | ||
48 | namespace OpenSim.Region.CoreModules.Avatar.Friends | 49 | namespace OpenSim.Region.CoreModules.Avatar.Friends |
49 | { | 50 | { |
@@ -250,6 +251,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
250 | private void OnNewClient(IClientAPI client) | 251 | private void OnNewClient(IClientAPI client) |
251 | { | 252 | { |
252 | client.OnLogout += OnLogout; | 253 | client.OnLogout += OnLogout; |
254 | client.OnEconomyDataRequest += SendPresence; | ||
253 | 255 | ||
254 | if (m_Friends.ContainsKey(client.AgentId)) | 256 | if (m_Friends.ContainsKey(client.AgentId)) |
255 | { | 257 | { |
@@ -311,5 +313,67 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
311 | } | 313 | } |
312 | } | 314 | } |
313 | 315 | ||
316 | private void SendPresence(UUID agentID) | ||
317 | { | ||
318 | if (!m_Friends.ContainsKey(agentID)) | ||
319 | return; | ||
320 | |||
321 | IClientAPI client = LocateClientObject(agentID); | ||
322 | if (client == null) | ||
323 | return; | ||
324 | |||
325 | List<string> friendList = new List<string>(); | ||
326 | |||
327 | foreach (FriendInfo fi in m_Friends[agentID].Friends) | ||
328 | friendList.Add(fi.Friend); | ||
329 | |||
330 | PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); | ||
331 | |||
332 | List<UUID> online = new List<UUID>(); | ||
333 | |||
334 | foreach (PresenceInfo pi in presence) | ||
335 | { | ||
336 | if (pi.Online) | ||
337 | online.Add(new UUID(pi.UserID)); | ||
338 | } | ||
339 | |||
340 | client.SendAgentOnline(online.ToArray()); | ||
341 | } | ||
342 | |||
343 | // | ||
344 | // Find the client for a ID | ||
345 | // | ||
346 | private IClientAPI LocateClientObject(UUID agentID) | ||
347 | { | ||
348 | Scene scene=GetClientScene(agentID); | ||
349 | if(scene == null) | ||
350 | return null; | ||
351 | |||
352 | ScenePresence presence=scene.GetScenePresence(agentID); | ||
353 | if(presence == null) | ||
354 | return null; | ||
355 | |||
356 | return presence.ControllingClient; | ||
357 | } | ||
358 | |||
359 | // | ||
360 | // Find the scene for an agent | ||
361 | // | ||
362 | private Scene GetClientScene(UUID agentId) | ||
363 | { | ||
364 | lock (m_Scenes) | ||
365 | { | ||
366 | foreach (Scene scene in m_Scenes) | ||
367 | { | ||
368 | ScenePresence presence = scene.GetScenePresence(agentId); | ||
369 | if (presence != null) | ||
370 | { | ||
371 | if (!presence.IsChildAgent) | ||
372 | return scene; | ||
373 | } | ||
374 | } | ||
375 | } | ||
376 | return null; | ||
377 | } | ||
314 | } | 378 | } |
315 | } | 379 | } |