Implement initial online notifications
parent
f2b36f8e76
commit
44d5b2910f
|
@ -44,6 +44,7 @@ using OpenSim.Server.Base;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using log4net;
|
using log4net;
|
||||||
using FriendInfo = OpenSim.Services.Interfaces.FriendInfo;
|
using FriendInfo = OpenSim.Services.Interfaces.FriendInfo;
|
||||||
|
using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.Avatar.Friends
|
namespace OpenSim.Region.CoreModules.Avatar.Friends
|
||||||
{
|
{
|
||||||
|
@ -250,6 +251,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
||||||
private void OnNewClient(IClientAPI client)
|
private void OnNewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnLogout += OnLogout;
|
client.OnLogout += OnLogout;
|
||||||
|
client.OnEconomyDataRequest += SendPresence;
|
||||||
|
|
||||||
if (m_Friends.ContainsKey(client.AgentId))
|
if (m_Friends.ContainsKey(client.AgentId))
|
||||||
{
|
{
|
||||||
|
@ -311,5 +313,67 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SendPresence(UUID agentID)
|
||||||
|
{
|
||||||
|
if (!m_Friends.ContainsKey(agentID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
IClientAPI client = LocateClientObject(agentID);
|
||||||
|
if (client == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<string> friendList = new List<string>();
|
||||||
|
|
||||||
|
foreach (FriendInfo fi in m_Friends[agentID].Friends)
|
||||||
|
friendList.Add(fi.Friend);
|
||||||
|
|
||||||
|
PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray());
|
||||||
|
|
||||||
|
List<UUID> online = new List<UUID>();
|
||||||
|
|
||||||
|
foreach (PresenceInfo pi in presence)
|
||||||
|
{
|
||||||
|
if (pi.Online)
|
||||||
|
online.Add(new UUID(pi.UserID));
|
||||||
|
}
|
||||||
|
|
||||||
|
client.SendAgentOnline(online.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Find the client for a ID
|
||||||
|
//
|
||||||
|
private IClientAPI LocateClientObject(UUID agentID)
|
||||||
|
{
|
||||||
|
Scene scene=GetClientScene(agentID);
|
||||||
|
if(scene == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
ScenePresence presence=scene.GetScenePresence(agentID);
|
||||||
|
if(presence == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return presence.ControllingClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Find the scene for an agent
|
||||||
|
//
|
||||||
|
private Scene GetClientScene(UUID agentId)
|
||||||
|
{
|
||||||
|
lock (m_Scenes)
|
||||||
|
{
|
||||||
|
foreach (Scene scene in m_Scenes)
|
||||||
|
{
|
||||||
|
ScenePresence presence = scene.GetScenePresence(agentId);
|
||||||
|
if (presence != null)
|
||||||
|
{
|
||||||
|
if (!presence.IsChildAgent)
|
||||||
|
return scene;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue