Optimize the number of Simian calls to get the initial presence
information for the friends list. This is a pretty big performance improvement on login. Note that you must upgrade simian to incorporate the corresponding GetSessions call.user_profiles
parent
7f070236f7
commit
c7cd077e55
|
@ -137,10 +137,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
userID, sessionID, secureSessionID);
|
userID, sessionID, secureSessionID);
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "AddSession" },
|
{ "RequestMethod", "AddSession" },
|
||||||
{ "UserID", userID.ToString() }
|
{ "UserID", userID.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
if (sessionID != UUID.Zero)
|
if (sessionID != UUID.Zero)
|
||||||
{
|
{
|
||||||
requestArgs["SessionID"] = sessionID.ToString();
|
requestArgs["SessionID"] = sessionID.ToString();
|
||||||
|
@ -158,13 +159,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public bool LogoutAgent(UUID sessionID)
|
public bool LogoutAgent(UUID sessionID)
|
||||||
{
|
{
|
||||||
// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID);
|
// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID);
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "RemoveSession" },
|
{ "RequestMethod", "RemoveSession" },
|
||||||
{ "SessionID", sessionID.ToString() }
|
{ "SessionID", sessionID.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
bool success = response["Success"].AsBoolean();
|
bool success = response["Success"].AsBoolean();
|
||||||
|
@ -177,13 +178,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public bool LogoutRegionAgents(UUID regionID)
|
public bool LogoutRegionAgents(UUID regionID)
|
||||||
{
|
{
|
||||||
// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID);
|
// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID);
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "RemoveSessions" },
|
{ "RequestMethod", "RemoveSessions" },
|
||||||
{ "SceneID", regionID.ToString() }
|
{ "SceneID", regionID.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
bool success = response["Success"].AsBoolean();
|
bool success = response["Success"].AsBoolean();
|
||||||
|
@ -202,49 +203,46 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public PresenceInfo GetAgent(UUID sessionID)
|
public PresenceInfo GetAgent(UUID sessionID)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent with sessionID " + sessionID);
|
OSDMap sessionResponse = GetSessionDataFromSessionID(sessionID);
|
||||||
|
if (sessionResponse == null)
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "GetSession" },
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session {0}: {1}",sessionID.ToString(),sessionResponse["Message"].AsString());
|
||||||
{ "SessionID", sessionID.ToString() }
|
return null;
|
||||||
};
|
|
||||||
|
|
||||||
OSDMap sessionResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
|
|
||||||
if (sessionResponse["Success"].AsBoolean())
|
|
||||||
{
|
|
||||||
UUID userID = sessionResponse["UserID"].AsUUID();
|
|
||||||
m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID);
|
|
||||||
|
|
||||||
requestArgs = new NameValueCollection
|
|
||||||
{
|
|
||||||
{ "RequestMethod", "GetUser" },
|
|
||||||
{ "UserID", userID.ToString() }
|
|
||||||
};
|
|
||||||
|
|
||||||
OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
|
|
||||||
if (userResponse["Success"].AsBoolean())
|
|
||||||
return ResponseToPresenceInfo(sessionResponse, userResponse);
|
|
||||||
else
|
|
||||||
m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString());
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
UUID userID = sessionResponse["UserID"].AsUUID();
|
||||||
|
OSDMap userResponse = GetUserData(userID);
|
||||||
|
if (userResponse == null)
|
||||||
{
|
{
|
||||||
m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session " + sessionID + ": " + sessionResponse["Message"].AsString());
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}: {1}",userID.ToString(),userResponse["Message"].AsString());
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ResponseToPresenceInfo(sessionResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PresenceInfo[] GetAgents(string[] userIDs)
|
public PresenceInfo[] GetAgents(string[] userIDs)
|
||||||
{
|
{
|
||||||
List<PresenceInfo> presences = new List<PresenceInfo>(userIDs.Length);
|
List<PresenceInfo> presences = new List<PresenceInfo>();
|
||||||
|
|
||||||
for (int i = 0; i < userIDs.Length; i++)
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
UUID userID;
|
{ "RequestMethod", "GetSessions" },
|
||||||
if (UUID.TryParse(userIDs[i], out userID) && userID != UUID.Zero)
|
{ "UserIDList", String.Join(",",userIDs) }
|
||||||
presences.AddRange(GetSessions(userID));
|
};
|
||||||
|
|
||||||
|
OSDMap sessionListResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
|
if (! sessionListResponse["Success"].AsBoolean())
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions: {0}",sessionListResponse["Message"].AsString());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
OSDArray sessionList = sessionListResponse["Sessions"] as OSDArray;
|
||||||
|
for (int i = 0; i < sessionList.Count; i++)
|
||||||
|
{
|
||||||
|
OSDMap sessionInfo = sessionList[i] as OSDMap;
|
||||||
|
presences.Add(ResponseToPresenceInfo(sessionInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
return presences.ToArray();
|
return presences.ToArray();
|
||||||
|
@ -262,7 +260,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
|
public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);
|
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);
|
||||||
|
|
||||||
// Remove the session to mark this user offline
|
// Remove the session to mark this user offline
|
||||||
if (!LogoutAgent(sessionID))
|
if (!LogoutAgent(sessionID))
|
||||||
|
@ -270,11 +268,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
// Save our last position as user data
|
// Save our last position as user data
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "AddUserData" },
|
{ "RequestMethod", "AddUserData" },
|
||||||
{ "UserID", userID.ToString() },
|
{ "UserID", userID.ToString() },
|
||||||
{ "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) }
|
{ "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
bool success = response["Success"].AsBoolean();
|
bool success = response["Success"].AsBoolean();
|
||||||
|
@ -287,14 +285,14 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
|
public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID);
|
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID);
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "AddUserData" },
|
{ "RequestMethod", "AddUserData" },
|
||||||
{ "UserID", userID.ToString() },
|
{ "UserID", userID.ToString() },
|
||||||
{ "HomeLocation", SerializeLocation(regionID, position, lookAt) }
|
{ "HomeLocation", SerializeLocation(regionID, position, lookAt) }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
bool success = response["Success"].AsBoolean();
|
bool success = response["Success"].AsBoolean();
|
||||||
|
@ -312,23 +310,14 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public GridUserInfo GetGridUserInfo(string user)
|
public GridUserInfo GetGridUserInfo(string user)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user);
|
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user);
|
||||||
|
|
||||||
UUID userID = new UUID(user);
|
UUID userID = new UUID(user);
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID);
|
OSDMap userResponse = GetUserData(userID);
|
||||||
|
if (userResponse != null)
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
|
||||||
{
|
|
||||||
{ "RequestMethod", "GetUser" },
|
|
||||||
{ "UserID", userID.ToString() }
|
|
||||||
};
|
|
||||||
|
|
||||||
OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
|
|
||||||
if (userResponse["Success"].AsBoolean())
|
|
||||||
return ResponseToGridUserInfo(userResponse);
|
return ResponseToGridUserInfo(userResponse);
|
||||||
else
|
|
||||||
m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString());
|
|
||||||
|
|
||||||
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}: {1}",userID,userResponse["Message"].AsString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,65 +327,49 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
private OSDMap GetUserData(UUID userID)
|
private OSDMap GetUserData(UUID userID)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID);
|
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID);
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "GetUser" },
|
{ "RequestMethod", "GetUser" },
|
||||||
{ "UserID", userID.ToString() }
|
{ "UserID", userID.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
if (response["Success"].AsBoolean() && response["User"] is OSDMap)
|
if (response["Success"].AsBoolean() && response["User"] is OSDMap)
|
||||||
return response;
|
return response;
|
||||||
else
|
|
||||||
m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + response["Message"].AsString());
|
|
||||||
|
|
||||||
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}; {1}",userID.ToString(),response["Message"].AsString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PresenceInfo> GetSessions(UUID userID)
|
private OSDMap GetSessionDataFromSessionID(UUID sessionID)
|
||||||
{
|
{
|
||||||
List<PresenceInfo> presences = new List<PresenceInfo>(1);
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
|
|
||||||
OSDMap userResponse = GetUserData(userID);
|
|
||||||
if (userResponse != null)
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting sessions for " + userID);
|
|
||||||
|
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "GetSession" },
|
{ "RequestMethod", "GetSession" },
|
||||||
{ "UserID", userID.ToString() }
|
{ "SessionID", sessionID.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
if (response["Success"].AsBoolean())
|
if (response["Success"].AsBoolean())
|
||||||
{
|
return response;
|
||||||
PresenceInfo presence = ResponseToPresenceInfo(response, userResponse);
|
|
||||||
if (presence != null)
|
|
||||||
presences.Add(presence);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// m_log.Debug("[SIMIAN PRESENCE CONNECTOR]: No session returned for " + userID + ": " + response["Message"].AsString());
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
return presences;
|
m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for {0}; {1}",sessionID.ToString(),response["Message"].AsString());
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
|
private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
|
||||||
{
|
{
|
||||||
// Save our current location as session data
|
// Save our current location as session data
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
{
|
{
|
||||||
{ "RequestMethod", "UpdateSession" },
|
{ "RequestMethod", "UpdateSession" },
|
||||||
{ "SessionID", sessionID.ToString() },
|
{ "SessionID", sessionID.ToString() },
|
||||||
{ "SceneID", regionID.ToString() },
|
{ "SceneID", regionID.ToString() },
|
||||||
{ "ScenePosition", lastPosition.ToString() },
|
{ "ScenePosition", lastPosition.ToString() },
|
||||||
{ "SceneLookAt", lastLookAt.ToString() }
|
{ "SceneLookAt", lastLookAt.ToString() }
|
||||||
};
|
};
|
||||||
|
|
||||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||||
bool success = response["Success"].AsBoolean();
|
bool success = response["Success"].AsBoolean();
|
||||||
|
@ -407,7 +380,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse, OSDMap userResponse)
|
private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse)
|
||||||
{
|
{
|
||||||
if (sessionResponse == null)
|
if (sessionResponse == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue