public bool EnableChildAgents (UUID AgentID, ulong requestingRegion, int DrawDistance, AgentCircuitData circuit) { int count = 0; bool informed = true; int x, y; Util.UlongToInts (requestingRegion, out x, out y); GridRegion ourRegion = m_registry.RequestModuleInterface<IGridService> ().GetRegionByPosition (UUID.Zero, x, y); if (ourRegion == null) { m_log.Info ("[AgentProcessing]: Failed to inform neighbors about new agent, could not find our region."); return false; } List<GridRegion> neighbors = GetNeighbors (ourRegion, DrawDistance); foreach (GridRegion neighbor in neighbors) { //m_log.WarnFormat("--> Going to send child agent to {0}, new agent {1}", neighbour.RegionName, newAgent); if (neighbor.RegionHandle != requestingRegion) { string reason; AgentCircuitData regionCircuitData = circuit.Copy (); regionCircuitData.child = true; //Fix child agent status if (!InformClientOfNeighbor (AgentID, requestingRegion, regionCircuitData, neighbor, (uint)TeleportFlags.Default, null, out reason)) informed = false; } count++; } return informed; }
public virtual void EnableChildAgents (UUID AgentID, ulong requestingRegion, int DrawDistance, AgentCircuitData circuit) { Util.FireAndForget(delegate(object o) { int count = 0; int x, y; Util.UlongToInts(requestingRegion, out x, out y); GridRegion ourRegion = m_registry.RequestModuleInterface<IGridService>().GetRegionByPosition(UUID.Zero, x, y); if(ourRegion == null) { m_log.Info("[AgentProcessing]: Failed to inform neighbors about new agent, could not find our region."); return; } List<GridRegion> neighbors = GetNeighbors(ourRegion, DrawDistance); ICapsService capsService = m_registry.RequestModuleInterface<ICapsService>(); IClientCapsService clientCaps = capsService.GetClientCapsService(AgentID); foreach(GridRegion neighbor in neighbors) { if(neighbor.RegionHandle != requestingRegion && clientCaps.GetCapsService(neighbor.RegionHandle) == null) { string reason; AgentCircuitData regionCircuitData = circuit.Copy(); GridRegion nCopy = neighbor; regionCircuitData.child = true; //Fix child agent status regionCircuitData.reallyischild = true; bool useCallbacks = false; InformClientOfNeighbor(AgentID, requestingRegion, regionCircuitData, ref nCopy, (uint)TeleportFlags.Default, null, out reason, out useCallbacks); } count++; } }); }