Revert "* Changed 11 calls for session info to the more optimized API method"

This reverts commit 5dc9ea2f24.
Also makes online indicators and IM more robust
avinationmerge
root 2010-09-17 01:50:48 +02:00
parent 1e4e978f7f
commit 251f2444d0
4 changed files with 109 additions and 37 deletions

View File

@ -317,7 +317,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
continue; continue;
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, fromAgentID); UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, fromAgentID);
PresenceInfo presence = PresenceService.GetAgent(fromAgentID);
PresenceInfo presence = null;
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid });
if (presences != null && presences.Length > 0)
presence = presences[0];
if (presence != null)
im.offline = 0;
im.fromAgentID = fromAgentID.Guid; im.fromAgentID = fromAgentID.Guid;
im.fromAgentName = account.FirstName + " " + account.LastName; im.fromAgentName = account.FirstName + " " + account.LastName;
@ -430,14 +436,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
return; return;
// The friend is not here [as root]. Let's forward. // The friend is not here [as root]. Let's forward.
PresenceInfo friendSession = PresenceService.GetAgent(friendID); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() });
if (friendSession != null && friendSession.RegionID != UUID.Zero) // let's guard against sessions-gone-bad with the RegionID check if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = null;
foreach (PresenceInfo pinfo in friendSessions)
if (pinfo.RegionID != UUID.Zero) // let's guard against sessions-gone-bad
{
friendSession = pinfo;
break;
}
if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
//m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName); //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName);
m_FriendsSimConnector.StatusNotify(region, userID, friendID, online); m_FriendsSimConnector.StatusNotify(region, userID, friendID, online);
} }
} }
// Friend is not online. Ignore.
}
else else
{ {
m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend); m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend);
@ -477,12 +496,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
return; return;
// The prospective friend is not here [as root]. Let's forward. // The prospective friend is not here [as root]. Let's forward.
PresenceInfo friendSession = PresenceService.GetAgent(friendID); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() });
if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = friendSessions[0];
if (friendSession != null) if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message); m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message);
} }
}
// If the prospective friend is not online, he'll get the message upon login. // If the prospective friend is not online, he'll get the message upon login.
} }
@ -508,7 +531,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
} }
// The friend is not here // The friend is not here
PresenceInfo friendSession = PresenceService.GetAgent(friendID); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() });
if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = friendSessions[0];
if (friendSession != null) if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
@ -516,6 +542,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
client.SendAgentOnline(new UUID[] { friendID }); client.SendAgentOnline(new UUID[] { friendID });
} }
} }
}
private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders)
{ {
@ -532,7 +559,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
if (LocalFriendshipDenied(agentID, client.Name, friendID)) if (LocalFriendshipDenied(agentID, client.Name, friendID))
return; return;
PresenceInfo friendSession = PresenceService.GetAgent(friendID); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() });
if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = friendSessions[0];
if (friendSession != null) if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
@ -542,6 +572,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID); m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID);
} }
} }
}
private void OnTerminateFriendship(IClientAPI client, UUID agentID, UUID exfriendID) private void OnTerminateFriendship(IClientAPI client, UUID agentID, UUID exfriendID)
{ {
@ -561,13 +592,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
if (LocalFriendshipTerminated(exfriendID)) if (LocalFriendshipTerminated(exfriendID))
return; return;
PresenceInfo friendSession = PresenceService.GetAgent(exfriendID); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() });
if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = friendSessions[0];
if (friendSession != null) if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID); m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID);
} }
} }
}
private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights)
{ {
@ -604,7 +639,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
if (LocalGrantRights(requester, target, myFlags, rights)) if (LocalGrantRights(requester, target, myFlags, rights))
return; return;
PresenceInfo friendSession = PresenceService.GetAgent(target); PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { target.ToString() });
if (friendSessions != null && friendSessions.Length > 0)
{
PresenceInfo friendSession = friendSessions[0];
if (friendSession != null) if (friendSession != null)
{ {
GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
@ -614,6 +652,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
} }
} }
} }
}
#region Local #region Local

View File

@ -497,7 +497,18 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
if (lookupAgent) if (lookupAgent)
{ {
// Non-cached user agent lookup. // Non-cached user agent lookup.
upd = PresenceService.GetAgent(toAgentID); PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() });
if (presences != null && presences.Length > 0)
{
foreach (PresenceInfo p in presences)
{
if (p.RegionID != UUID.Zero)
{
upd = p;
break;
}
}
}
if (upd != null) if (upd != null)
{ {

View File

@ -4296,7 +4296,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
pinfo = World.PresenceService.GetAgent(uuid); PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
if (pinfos != null && pinfos.Length > 0)
{
foreach (PresenceInfo p in pinfos)
{
if (p.RegionID != UUID.Zero)
{
pinfo = p;
}
}
}
ce = new UserInfoCacheEntry(); ce = new UserInfoCacheEntry();
ce.time = Util.EnvironmentTickCount(); ce.time = Util.EnvironmentTickCount();
@ -4315,7 +4325,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000) if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000)
{ {
pinfo = World.PresenceService.GetAgent(uuid); PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
if (pinfos != null && pinfos.Length > 0)
{
foreach (PresenceInfo p in pinfos)
{
if (p.RegionID != UUID.Zero)
{
pinfo = p;
}
}
}
else
pinfo = null;
ce.time = Util.EnvironmentTickCount(); ce.time = Util.EnvironmentTickCount();
ce.pinfo = pinfo; ce.pinfo = pinfo;

View File

@ -291,8 +291,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
// Check if the user is online // Check if the user is online
if (client.Scene is Scene) if (client.Scene is Scene)
{ {
OpenSim.Services.Interfaces.PresenceInfo presence = ((Scene)client.Scene).PresenceService.GetAgent(avatarID); OpenSim.Services.Interfaces.PresenceInfo[] presences = ((Scene)client.Scene).PresenceService.GetAgents(new string[] { avatarID.ToString() });
if (presence != null) if (presences != null && presences.Length > 0)
flags |= ProfileFlags.Online; flags |= ProfileFlags.Online;
} }