Merge branch 'master' into careminster

avinationmerge
Melanie 2013-03-27 01:17:59 +00:00
commit e320046683
2 changed files with 134 additions and 56 deletions

View File

@ -141,6 +141,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
availableMethods["admin_save_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcSaveHeightmapMethod); availableMethods["admin_save_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcSaveHeightmapMethod);
// Agent management // Agent management
availableMethods["admin_get_agents"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetAgentsMethod);
availableMethods["admin_teleport_agent"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcTeleportAgentMethod); availableMethods["admin_teleport_agent"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcTeleportAgentMethod);
// User management // User management
@ -1901,6 +1902,71 @@ namespace OpenSim.ApplicationPlugins.RemoteController
m_log.Info("[RADMIN]: Access List List Request complete"); m_log.Info("[RADMIN]: Access List List Request complete");
} }
private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
{
Hashtable responseData = (Hashtable)response.Value;
Hashtable requestData = (Hashtable)request.Params[0];
bool includeChildren = false;
if (requestData.Contains("include_children"))
bool.TryParse((string)requestData["include_children"], out includeChildren);
Scene scene;
GetSceneFromRegionParams(requestData, responseData, out scene);
ArrayList xmlRpcRegions = new ArrayList();
responseData["regions"] = xmlRpcRegions;
Hashtable xmlRpcRegion = new Hashtable();
xmlRpcRegions.Add(xmlRpcRegion);
xmlRpcRegion["name"] = scene.Name;
xmlRpcRegion["id"] = scene.RegionInfo.RegionID.ToString();
List<ScenePresence> agents = scene.GetScenePresences();
ArrayList xmlrpcAgents = new ArrayList();
foreach (ScenePresence agent in agents)
{
if (agent.IsChildAgent && !includeChildren)
continue;
Hashtable xmlRpcAgent = new Hashtable();
xmlRpcAgent.Add("name", agent.Name);
xmlRpcAgent.Add("id", agent.UUID.ToString());
xmlRpcAgent.Add("type", agent.PresenceType.ToString());
xmlRpcAgent.Add("current_parcel_id", agent.currentParcelUUID.ToString());
Vector3 pos = agent.AbsolutePosition;
xmlRpcAgent.Add("pos_x", pos.X.ToString());
xmlRpcAgent.Add("pos_y", pos.Y.ToString());
xmlRpcAgent.Add("pos_z", pos.Z.ToString());
Vector3 lookAt = agent.Lookat;
xmlRpcAgent.Add("lookat_x", lookAt.X.ToString());
xmlRpcAgent.Add("lookat_y", lookAt.Y.ToString());
xmlRpcAgent.Add("lookat_z", lookAt.Z.ToString());
Vector3 vel = agent.Velocity;
xmlRpcAgent.Add("vel_x", vel.X.ToString());
xmlRpcAgent.Add("vel_y", vel.Y.ToString());
xmlRpcAgent.Add("vel_z", vel.Z.ToString());
xmlRpcAgent.Add("is_flying", agent.Flying.ToString());
xmlRpcAgent.Add("is_sat_on_ground", agent.SitGround.ToString());
xmlRpcAgent.Add("is_sat_on_object", agent.IsSatOnObject.ToString());
xmlrpcAgents.Add(xmlRpcAgent);
}
m_log.DebugFormat(
"[REMOTE ADMIN]: XmlRpcGetAgents found {0} agents in {1}", xmlrpcAgents.Count, scene.Name);
xmlRpcRegion["agents"] = xmlrpcAgents;
responseData["success"] = true;
}
private void XmlRpcTeleportAgentMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) private void XmlRpcTeleportAgentMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
{ {
Hashtable responseData = (Hashtable)response.Value; Hashtable responseData = (Hashtable)response.Value;

View File

@ -931,6 +931,17 @@ public sealed class BSShapeCollection : IDisposable
if (newShape.HasPhysicalShape) if (newShape.HasPhysicalShape)
return newShape; return newShape;
// VerifyMeshCreated is called after trying to create the mesh. If we think the asset had been
// fetched but we end up here again, the meshing of the asset must have failed.
// Prevent trying to keep fetching the mesh by declaring failure.
if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Fetched)
{
prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
PhysicsScene.Logger.WarnFormat("{0} Fetched asset would not mesh. {1}, texture={2}",
LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
}
else
{
// If this mesh has an underlying asset and we have not failed getting it before, fetch the asset // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset
if (prim.BaseShape.SculptEntry if (prim.BaseShape.SculptEntry
&& prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed
@ -990,8 +1001,9 @@ public sealed class BSShapeCollection : IDisposable
{ {
if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed) if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
{ {
PhysicsScene.Logger.ErrorFormat("{0} Mesh failed to fetch asset. lID={1}, texture={2}", PhysicsScene.Logger.WarnFormat("{0} Mesh failed to fetch asset. obj={1}, texture={2}",
LogHeader, prim.LocalID, prim.BaseShape.SculptTexture); LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
}
} }
} }