public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) { m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name); List <RegionData> rdatas = m_Database.Get(name + "%", scopeID); int count = 0; List <GridRegion> rinfos = new List <GridRegion>(); if (rdatas != null) { m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); foreach (RegionData rdata in rdatas) { if (count++ < maxNumber) { rinfos.Add(RegionData2RegionInfo(rdata)); } } } if (m_AllowHypergridMapSearch && (rdatas == null || (rdatas != null && rdatas.Count == 0)) && name.Contains(".")) { GridRegion r = m_HypergridLinker.LinkRegion(scopeID, name); if (r != null) { rinfos.Add(r); } } return(rinfos); }
/// <summary> /// Get a hypergrid region. /// </summary> /// <param name="scopeID"></param> /// <param name="name"></param> /// <returns>null if no hypergrid region could be found.</returns> protected GridRegion GetHypergridRegionByName(UUID scopeID, string name) { if (name.Contains(".")) { return(m_HypergridLinker.LinkRegion(scopeID, name)); } else { return(null); } }
public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) { // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name); List <RegionData> rdatas = m_Database.Get("%" + Util.EscapeForLike(name) + "%", scopeID); int count = 0; List <GridRegion> rinfos = new List <GridRegion>(); if (m_AllowHypergridMapSearch && name.Contains(".")) { string regionURI = ""; string regionHost = ""; string regionName = ""; if (!Util.buildHGRegionURI(name, out regionURI, out regionHost, out regionName)) { return(null); } string mapname; bool localGrid = m_HypergridLinker.IsLocalGrid(regionHost); if (localGrid) { if (String.IsNullOrWhiteSpace(regionName)) { return(GetDefaultRegions(scopeID)); } mapname = regionName; } else { mapname = regionURI + regionName; } bool haveMatch = false; if (rdatas != null && (rdatas.Count > 0)) { // m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); foreach (RegionData rdata in rdatas) { if (count++ < maxNumber) { rinfos.Add(RegionData2RegionInfo(rdata)); } if (mapname.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) { haveMatch = true; if (count == maxNumber) { rinfos.RemoveAt(count - 1); rinfos.Add(RegionData2RegionInfo(rdata)); } } } if (haveMatch) { return(rinfos); } } rdatas = m_Database.Get(Util.EscapeForLike(mapname) + "%", scopeID); if (rdatas != null && (rdatas.Count > 0)) { // m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); foreach (RegionData rdata in rdatas) { if (count++ < maxNumber) { rinfos.Add(RegionData2RegionInfo(rdata)); } if (mapname.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) { haveMatch = true; if (count == maxNumber) { rinfos.RemoveAt(count - 1); rinfos.Add(RegionData2RegionInfo(rdata)); break; } } } if (haveMatch) { return(rinfos); } } if (!localGrid && !string.IsNullOrWhiteSpace(regionURI)) { string HGname = regionURI + " " + regionName; // include space for compatibility GridRegion r = m_HypergridLinker.LinkRegion(scopeID, HGname); if (r != null) { if (count == maxNumber) { rinfos.RemoveAt(count - 1); } rinfos.Add(r); } } } else if (rdatas != null && (rdatas.Count > 0)) { //m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); foreach (RegionData rdata in rdatas) { if (count++ < maxNumber) { rinfos.Add(RegionData2RegionInfo(rdata)); } if (name.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) { if (count == maxNumber) { rinfos.RemoveAt(count - 1); rinfos.Add(RegionData2RegionInfo(rdata)); break; } } } } return(rinfos); }
public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri) { if (!uri.IsValid) { return(null); } bool localGrid = true; if (uri.HasHost) { if (!uri.ResolveDNS()) { return(null); } localGrid = m_HypergridLinker.IsLocalGrid(uri.HostUrl); uri.IsLocalGrid = localGrid; } if (localGrid) { if (uri.HasRegionName) { RegionData rdata = m_Database.GetSpecific(uri.RegionName, scopeID); if (rdata != null) { return(RegionData2RegionInfo(rdata)); } } else { List <GridRegion> defregs = GetDefaultRegions(scopeID); if (defregs != null) { return(defregs[0]); } } return(null); } if (!m_AllowHypergridMapSearch) { return(null); } string mapname = uri.RegionHostPortSpaceName; List <RegionData> rdatas = m_Database.Get("%" + Util.EscapeForLike(mapname), scopeID); if (rdatas != null && rdatas.Count > 0) { foreach (RegionData rdata in rdatas) { int indx = rdata.RegionName.IndexOf("://"); if (indx < 0) { continue; } string rname = rdata.RegionName.Substring(indx + 3); if (mapname.Equals(rname, StringComparison.InvariantCultureIgnoreCase)) { return(RegionData2RegionInfo(rdata)); } } } GridRegion r = m_HypergridLinker.LinkRegion(scopeID, uri); return(r); }