public virtual bool CreateAgent(GridRegion destination, ref AgentCircuitData aCircuit, uint teleportFlags, AgentData data, out string reason) { reason = String.Empty; // Try local first if (m_localBackend.CreateAgent(destination, ref aCircuit, teleportFlags, data, out reason)) return true; reason = String.Empty; string uri = MakeUri(destination, true) + aCircuit.AgentID + "/"; try { OSDMap args = aCircuit.PackAgentCircuitData(); args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString()); args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString()); args["destination_name"] = OSD.FromString(destination.RegionName); args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); args["teleport_flags"] = OSD.FromString(teleportFlags.ToString()); if(data != null) args["agent_data"] = data.Pack(); OSDMap result = WebUtils.PostToService (uri, args, true, false); OSDMap results = WebUtils.GetOSDMap(result["_RawResult"].AsString()); //Pull out the result and set it as the reason if (results == null) return false; reason = results["reason"] != null ? results["reason"].AsString() : ""; if (result["Success"].AsBoolean()) { //Not right... don't return true except for opensim combatibility :/ if (reason == "") return true; try { OSDMap responseMap = (OSDMap)OSDParser.DeserializeJson(reason); if (responseMap.ContainsKey("Reason")) reason = responseMap["Reason"].AsString(); return responseMap["Success"].AsBoolean(); } catch { //Not right... don't return true except for opensim combatibility :/ return true; } } reason = result["Message"] != null ? result["Message"].AsString() : "error"; return false; } catch (Exception e) { m_log.Warn("[REMOTE SIMULATION CONNECTOR]: CreateAgent failed with exception: " + e.ToString()); reason = e.Message; } return false; }
public static OSDMap CrossAgent(GridRegion crossingRegion, Vector3 pos, Vector3 velocity, AgentCircuitData circuit, AgentData cAgent, ulong RequestingRegion) { OSDMap llsdBody = new OSDMap(); llsdBody.Add("Pos", pos); llsdBody.Add("Vel", velocity); llsdBody.Add("Region", crossingRegion.ToOSD()); llsdBody.Add("Circuit", circuit.PackAgentCircuitData()); llsdBody.Add("AgentData", cAgent.Pack()); return(buildEvent("CrossAgent", llsdBody, circuit.AgentID, RequestingRegion)); }
public static OSDMap TeleportAgent(int DrawDistance, AgentCircuitData circuit, AgentData data, uint TeleportFlags, GridRegion destination, ulong requestingRegion) { OSDMap llsdBody = new OSDMap(); llsdBody.Add("DrawDistance", DrawDistance); llsdBody.Add("Circuit", circuit.PackAgentCircuitData()); llsdBody.Add("TeleportFlags", TeleportFlags); llsdBody.Add("AgentData", data.Pack()); llsdBody.Add("Region", destination.ToOSD()); return(buildEvent("TeleportAgent", llsdBody, circuit.AgentID, requestingRegion)); }
public static OSD EnableChildAgents(int DrawDistance, GridRegion[] neighbors, AgentCircuitData circuit, uint TeleportFlags, AgentData data, byte[] IPAddress, int Port) { OSDMap llsdBody = new OSDMap(); llsdBody.Add("DrawDistance", DrawDistance); OSDArray regionsArray = new OSDArray(); foreach (GridRegion r in neighbors) { regionsArray.Add(r.ToOSD()); } llsdBody.Add("Regions", regionsArray); if(IPAddress != null) llsdBody.Add("IPAddress", IPAddress); if(Port != 0) //0 is the eqivilent of null llsdBody.Add("Port", Port); llsdBody.Add("Circuit", circuit.PackAgentCircuitData()); llsdBody.Add("TeleportFlags", TeleportFlags); if(data != null) llsdBody.Add("AgentData", data.Pack()); return buildEvent("EnableChildAgents", llsdBody); }
public virtual bool CreateAgent(GridRegion destination, ref AgentCircuitData aCircuit, uint teleportFlags, AgentData data, out int requestedUDPPort, out string reason) { reason = String.Empty; // Try local first if (m_localBackend.CreateAgent(destination, ref aCircuit, teleportFlags, data, out requestedUDPPort, out reason)) return true; requestedUDPPort = destination.ExternalEndPoint.Port; //Just make sure.. reason = String.Empty; string uri = MakeUri(destination, true) + aCircuit.AgentID + "/"; try { OSDMap args = aCircuit.PackAgentCircuitData(); args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString()); args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString()); args["destination_name"] = OSD.FromString(destination.RegionName); args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); args["teleport_flags"] = OSD.FromString(teleportFlags.ToString()); if (data != null) args["agent_data"] = data.Pack(); OSDMap result = WebUtils.PostToService(uri, args, true, false); OSDMap results = WebUtils.GetOSDMap(result["_RawResult"].AsString()); //Pull out the result and set it as the reason if (results == null) return false; reason = results["reason"] != null ? results["reason"].AsString() : ""; if (result["Success"].AsBoolean()) { //Not right... don't return true except for opensim combatibility :/ if (reason == "") return true; //We were able to contact the region try { //We send the CapsURLs through, so we need these OSDMap responseMap = (OSDMap) OSDParser.DeserializeJson(reason); if (responseMap.ContainsKey("Reason")) reason = responseMap["Reason"].AsString(); if (responseMap.ContainsKey("requestedUDPPort")) requestedUDPPort = responseMap["requestedUDPPort"]; return results["success"].AsBoolean(); } catch { //Something went wrong return false; } } reason = result.ContainsKey("Message") ? result["Message"].AsString() : "Could not contact the region"; return false; } catch (Exception e) { MainConsole.Instance.Warn("[REMOTE SIMULATION CONNECTOR]: CreateAgent failed with exception: " + e); reason = e.Message; } return false; }
public static OSDMap TeleportAgent(int DrawDistance, AgentCircuitData circuit, AgentData data, uint TeleportFlags, GridRegion destination, ulong requestingRegion) { OSDMap llsdBody = new OSDMap(); llsdBody.Add("DrawDistance", DrawDistance); llsdBody.Add("Circuit", circuit.PackAgentCircuitData()); llsdBody.Add("TeleportFlags", TeleportFlags); llsdBody.Add("AgentData", data.Pack()); llsdBody.Add("Region", destination.ToOSD()); return buildEvent("TeleportAgent", llsdBody, circuit.AgentID, requestingRegion); }
public static OSDMap CrossAgent(GridRegion crossingRegion, Vector3 pos, Vector3 velocity, AgentCircuitData circuit, AgentData cAgent, ulong RequestingRegion) { OSDMap llsdBody = new OSDMap(); llsdBody.Add("Pos", pos); llsdBody.Add("Vel", velocity); llsdBody.Add("Region", crossingRegion.ToOSD()); llsdBody.Add("Circuit", circuit.PackAgentCircuitData()); llsdBody.Add("AgentData", cAgent.Pack()); return buildEvent("CrossAgent", llsdBody, circuit.AgentID, RequestingRegion); }