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);
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }