public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri)
        {
            GridRegion rinfo = m_LocalGridService.GetRegionByURI(scopeID, uri);

            if (rinfo != null)
            {
                m_RegionInfoCache.Cache(scopeID, rinfo);
                return(rinfo);
            }

            if (m_RemoteGridService == null || !uri.IsLocalGrid)
            {
                return(rinfo);
            }

            if (uri.HasRegionName)
            {
                rinfo = m_RemoteGridService.GetRegionByName(scopeID, uri.RegionName);
            }
            else
            {
                rinfo = m_RemoteGridService.GetDefaultRegions(UUID.Zero)[0];
                if (rinfo == null)
                {
                    m_log.Warn("[REMOTE GRID CONNECTOR] returned null default region");
                }
                else
                {
                    m_log.WarnFormat("[REMOTE GRID CONNECTOR] returned default region {0}", rinfo.RegionName);
                }
            }

            m_RegionInfoCache.Cache(scopeID, rinfo);
            return(rinfo);
        }
Ejemplo n.º 2
0
        public GridRegion GetRegionByName(UUID scopeID, string name)
        {
            var nameURI = new RegionURI(name);

            if (!nameURI.IsValid)
            {
                return(null);
            }
            return(GetRegionByURI(scopeID, nameURI));
        }
        public List <GridRegion> GetRegionsByURI(UUID scopeID, RegionURI uri, int maxNumber)
        {
            if (!uri.IsValid)
            {
                return(null);
            }

            List <GridRegion> rinfo = m_LocalGridService.GetRegionsByURI(scopeID, uri, maxNumber);

            //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionsByName {0} found {1} regions", name, rinfo.Count);

            if (m_RemoteGridService == null || !uri.IsLocalGrid)
            {
                return(rinfo);
            }

            List <GridRegion> grinfo = null;

            if (!uri.HasRegionName && (rinfo == null || rinfo.Count == 0))
            {
                List <GridRegion> grinfos = m_RemoteGridService.GetDefaultRegions(scopeID);
                if (grinfos == null || grinfos.Count == 0)
                {
                    m_log.Info("[REMOTE GRID CONNECTOR] returned no default regions");
                }
                else
                {
                    m_log.InfoFormat("[REMOTE GRID CONNECTOR] returned default regions {0}, ...", grinfos[0].RegionName);
                    // only return first
                    grinfo = new List <GridRegion>()
                    {
                        grinfos[0]
                    };
                }
            }
            else
            {
                grinfo = m_RemoteGridService.GetRegionsByName(scopeID, uri.RegionName, maxNumber);
            }

            if (grinfo != null)
            {
                //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetRegionsByName {0} found {1} regions", name, grinfo.Count);
                foreach (GridRegion r in grinfo)
                {
                    m_RegionInfoCache.Cache(r);
                    if (rinfo.Find(delegate(GridRegion gr) { return(gr.RegionID == r.RegionID); }) == null)
                    {
                        rinfo.Add(r);
                    }
                }
            }

            return(rinfo);
        }
Ejemplo n.º 4
0
        public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber)
        {
            // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name);

            var nameURI = new RegionURI(name);

            if (!nameURI.IsValid)
            {
                return(new List <GridRegion>());
            }

            return(GetRegionsByURI(scopeID, nameURI, maxNumber));
        }
        public GridRegion GetRegionByName(UUID scopeID, string name)
        {
            bool       inCache = false;
            GridRegion rinfo   = m_RegionInfoCache.Get(scopeID, name, out inCache);

            if (inCache)
            {
                return(rinfo);
            }

            var ruri = new RegionURI(name, m_ThisGridInfo);

            return(GetRegionByURI(scopeID, ruri));
        }
Ejemplo n.º 6
0
        public GridRegion LinkRegion(UUID scopeID, RegionURI rurl)
        {
            if (!rurl.IsValid)
            {
                return(null);
            }

            if (rurl.IsLocalGrid)
            {
                m_log.InfoFormat("[HYPERGRID LINKER]: Cannot hyperlink to regions on the same grid");
                return(null);
            }

            int xloc = random.Next(0, short.MaxValue) << 8;

            if (TryCreateLinkImpl(scopeID, xloc, 0, rurl, UUID.Zero, out GridRegion regInfo))
            {
                return(regInfo);
            }
            return(null);
        }
Ejemplo n.º 7
0
 public List <GridRegion> GetRegionsByURI(UUID scopeID, RegionURI uri, int maxNumber)
 {
     return(null);
 }
Ejemplo n.º 8
0
 public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri)
 {
     return(null);
 }
        public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber)
        {
            var ruri = new RegionURI(name, m_ThisGridInfo);

            return(GetRegionsByURI(scopeID, ruri, maxNumber));
        }
Ejemplo n.º 10
0
        public List <GridRegion> GetRegionsByURI(UUID scopeID, RegionURI nameURI, int maxNumber)
        {
            // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name);
            if (!nameURI.IsValid)
            {
                return(new List <GridRegion>());
            }

            bool localGrid;

            if (nameURI.HasHost)
            {
                if (!nameURI.ResolveDNS())
                {
                    return(new List <GridRegion>());
                }
                localGrid           = m_HypergridLinker.IsLocalGrid(nameURI.HostUrl);
                nameURI.IsLocalGrid = localGrid;
                if (!nameURI.IsValid)
                {
                    return(new List <GridRegion>());
                }
            }
            else
            {
                localGrid = true;
            }

            int count = 0;

            string            mapname = nameURI.RegionHostPortSpaceName;
            List <RegionData> rdatas  = m_Database.Get("%" + Util.EscapeForLike(mapname) + "%", scopeID);
            List <GridRegion> rinfos  = new List <GridRegion>();

            if (localGrid)
            {
                if (!nameURI.HasRegionName)
                {
                    List <GridRegion> dinfos = GetDefaultRegions(scopeID);
                    if (dinfos != null && dinfos.Count > 0)
                    {
                        rinfos.Add(dinfos[0]);
                    }
                }
                else
                {
                    string name = nameURI.RegionName;
                    if (rdatas != null && (rdatas.Count > 0))
                    {
                        //m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
                        foreach (RegionData rdata in rdatas)
                        {
                            if (name.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                rinfos.Insert(0, RegionData2RegionInfo(rdata));
                                if (count == maxNumber)
                                {
                                    rinfos.RemoveAt(count - 1);
                                }
                            }
                            else if (count++ < maxNumber)
                            {
                                rinfos.Add(RegionData2RegionInfo(rdata));
                            }
                        }
                    }
                }
                return(rinfos);
            }

            if (!m_AllowHypergridMapSearch)
            {
                return(rinfos);
            }

            if (rdatas != null && (rdatas.Count > 0))
            {
                bool haveMatch = false;
                // m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
                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))
                    {
                        haveMatch = true;
                        rinfos.Insert(0, RegionData2RegionInfo(rdata));
                        if (count == maxNumber)
                        {
                            rinfos.RemoveAt(count - 1);
                        }
                    }
                    else if (count++ < maxNumber)
                    {
                        rinfos.Add(RegionData2RegionInfo(rdata));
                    }
                }
                if (haveMatch)
                {
                    return(rinfos);
                }
            }

            GridRegion r = m_HypergridLinker.LinkRegion(scopeID, nameURI);

            if (r != null)
            {
                if (count == maxNumber)
                {
                    rinfos.RemoveAt(count - 1);
                }
                rinfos.Add(r);
            }

            return(rinfos);
        }
Ejemplo n.º 11
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);
        }
Ejemplo n.º 12
0
        private bool TryCreateLinkImpl(UUID scopeID, int xloc, int yloc, RegionURI rurl, UUID ownerID, out GridRegion regInfo)
        {
            m_log.InfoFormat("[HYPERGRID LINKER]: Link to {0} {1}, in <{2},{3}>",
                             rurl.HostUrl, rurl.RegionName, Util.WorldToRegionLoc((uint)xloc), Util.WorldToRegionLoc((uint)yloc));


            // Check for free coordinates
            GridRegion region = m_GridService.GetRegionByPosition(scopeID, xloc, yloc);

            if (region != null)
            {
                m_log.WarnFormat("[HYPERGRID LINKER]: Coordinates <{0},{1}> are already occupied by region {2} with uuid {3}",
                                 Util.WorldToRegionLoc((uint)xloc), Util.WorldToRegionLoc((uint)yloc),
                                 region.RegionName, region.RegionID);
                regInfo = null;
                return(false);
            }

            regInfo = new GridRegion()
            {
                HttpPort         = (uint)rurl.Port,
                ExternalHostName = rurl.Host,
                ServerURI        = rurl.HostUrl,
                RegionName       = rurl.RegionName,

                RegionLocX       = xloc,
                RegionLocY       = yloc,
                ScopeID          = scopeID,
                EstateOwner      = ownerID,
                InternalEndPoint = dummyIP
            };

            // Finally, link it
            ulong  handle       = 0;
            UUID   regionID     = UUID.Zero;
            string externalName = string.Empty;
            string imageURL     = string.Empty;
            int    sizeX        = (int)Constants.RegionSize;
            int    sizeY        = (int)Constants.RegionSize;

            if (!m_GatekeeperConnector.LinkRegion(regInfo, out regionID, out handle, out externalName, out imageURL, out string reason, out sizeX, out sizeY))
            {
                return(false);
            }

            if (regionID == UUID.Zero)
            {
                m_log.Warn("[HYPERGRID LINKER]: Unable to link region: " + reason);
                return(false);
            }

            region = m_GridService.GetRegionByUUID(scopeID, regionID);
            if (region != null)
            {
                m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates <{0},{1}>",
                                  Util.WorldToRegionLoc((uint)region.RegionLocX), Util.WorldToRegionLoc((uint)region.RegionLocY));
                regInfo = region;
                return(true);
            }

            regInfo.RegionID    = regionID;
            regInfo.RegionSizeX = sizeX;
            regInfo.RegionSizeY = sizeY;

            if (externalName == string.Empty)
            {
                regInfo.RegionName = regInfo.ServerURI;
            }
            else
            {
                regInfo.RegionName = externalName;
            }

            m_log.DebugFormat("[HYPERGRID LINKER]: naming linked region {0}, handle {1}", regInfo.RegionName, handle.ToString());

            // Get the map image
            regInfo.TerrainImage = GetMapImage(regionID, imageURL);

            // Store the origin's coordinates somewhere
            regInfo.RegionSecret = handle.ToString();

            AddHyperlinkRegion(regInfo, handle);
            m_log.InfoFormat("[HYPERGRID LINKER]: Successfully linked to region {0} at <{1},{2}> with image {3}",
                             regInfo.RegionName, Util.WorldToRegionLoc((uint)regInfo.RegionLocX), Util.WorldToRegionLoc((uint)regInfo.RegionLocY), regInfo.TerrainImage);
            return(true);
        }