예제 #1
0
        private void UnregisterRegionCmd(List <string> args, TTY io, UUID limitedToScene)
        {
            if (limitedToScene != UUID.Zero)
            {
                io.Write("Command not allowed on limited console");
            }
            else if (args[0] == "help" || args.Count != 4)
            {
                io.Write("unregister region id <regionid>\nunregister region name <name>");
            }
            else
            {
                UUID       id;
                RegionInfo ri;
                switch (args[2])
                {
                case "id":
                    if (!UUID.TryParse(args[3], out id))
                    {
                        io.Write("regionid is not valid");
                        return;
                    }
                    break;

                case "name":
                    if (!m_GridService.TryGetValue(args[3], out ri))
                    {
                        io.WriteFormatted("region \"{0}\" is not known", args[3]);
                        return;
                    }
                    id = ri.ID;
                    break;

                default:
                    io.WriteFormatted("Unknown region identifier type {0}", args[2]);
                    return;
                }

                try
                {
                    m_GridService.UnregisterRegion(id);
                }
                catch
                {
                    io.Write("Failed to remove region");
                }
            }
        }
예제 #2
0
        public void DeleteEstateCmd(List <string> args, Common.CmdIO.TTY io, UUID limitedToScene)
        {
            uint        estateID;
            EstateInfo  estateInfo;
            List <UUID> regions;

            if (limitedToScene != UUID.Zero)
            {
                io.WriteFormatted("delete estate not allowed from restricted console");
            }
            else if (args[0] == "help" || args.Count < 3)
            {
                io.Write("delete estate <estateid>");
            }
            else if (!uint.TryParse(args[2], out estateID))
            {
                io.WriteFormatted("{0} is not a valid estate id.", estateID);
            }
            else if (!m_EstateService.TryGetValue(estateID, out estateInfo))
            {
                io.WriteFormatted("Estate with id {0} does not exist.", estateID);
            }
            else
            {
                regions = m_EstateService.RegionMap[estateID];
                if (m_EstateService.RegionMap[estateID].Count != 0)
                {
                    var output = new StringBuilder("Please unlink regions from estate first.\n\nLinked Scene List:\n----------------------------------------------");
                    foreach (UUID rID in regions)
                    {
                        Types.Grid.RegionInfo rInfo;
                        if (m_RegionStorage.TryGetValue(rID, out rInfo))
                        {
                            Vector3 gridcoord = rInfo.Location;
                            output.AppendFormat("\nRegion {0} [{1}]:\n  Location={2} (grid coordinate {5})\n  Size={3}\n  Owner={4}\n", rInfo.Name, rInfo.ID, gridcoord.ToString(), rInfo.Size.ToString(), ResolveName(rInfo.Owner).FullName, gridcoord.X_String + "," + gridcoord.Y_String);
                        }
                    }
                    io.Write(output.ToString());
                }
                else
                {
                    try
                    {
                        if (!m_EstateService.Remove(estateID))
                        {
                            throw new InvalidOperationException();
                        }
                    }
                    catch (Exception e)
                    {
                        io.WriteFormatted("Could not delete estate {0}: {1}", estateID, e.Message);
                    }
                }
            }
        }
        public void NotifyStatus(UGUI notifier, List <UGUI> list, bool isOnline)
        {
            var regionURIs      = new Dictionary <UUID, string>();
            var perRegionNotify = new Dictionary <UUID, List <UGUI> >();
            var regionInfoCache = new Dictionary <UUID, RegionInfo>();

            foreach (UGUI target in list)
            {
                foreach (UserSessionInfo info in m_UserSessionService[target])
                {
                    string     griduri;
                    UUID       regionid;
                    RegionInfo ri;
                    if (info.TryGetValue(KnownUserSessionInfoVariables.LocationGridURI, out griduri) &&
                        info.TryGetValue(KnownUserSessionInfoVariables.LocationRegionID, out regionid) &&
                        (regionInfoCache.TryGetValue(regionid, out ri) || m_GridService.TryGetValue(regionid, out ri)) &&
                        (ri.Flags & RegionFlags.RegionOnline) != 0)
                    {
                        regionInfoCache[regionid] = ri;
                        regionURIs[regionid]      = ri.ServerURI;
                        List <UGUI> notifyList;
                        if (!perRegionNotify.TryGetValue(regionid, out notifyList))
                        {
                            notifyList = new List <UGUI>();
                            perRegionNotify.Add(regionid, notifyList);
                        }
                        notifyList.Add(target);
                    }
                }
            }

            foreach (KeyValuePair <UUID, List <UGUI> > kvp in perRegionNotify)
            {
                try
                {
                    m_FriendsSimStatusConnector.NotifyStatus(regionURIs[kvp.Key], kvp.Key, notifier, kvp.Value, isOnline);
                }
                catch
                {
                    /* intentionally left empty */
                }
            }
        }
예제 #4
0
        private void HandleGet(HttpRequest req, Map jsondata)
        {
            EstateInfo estateInfo;
            string     estateName;
            uint       estateID;

            if ((jsondata.TryGetValue("name", out estateName) &&
                 m_EstateService.TryGetValue(estateName, out estateInfo)) ||
                (jsondata.TryGetValue("id", out estateID) &&
                 m_EstateService.TryGetValue(estateID, out estateInfo)))
            {
                /* found estate via name or via id */
            }
            else
            {
                m_WebIF.ErrorResponse(req, AdminWebIfErrorResult.NotFound);
                return;
            }

            var res = new Map();

            res.Add("estate", estateInfo.ToJsonMap(m_WebIF));
            var regionMap   = m_EstateService.RegionMap[estateInfo.ID];
            var regionsdata = new AnArray();

            foreach (UUID regionid in regionMap)
            {
                RegionInfo rInfo;
                var        regiondata = new Map
                {
                    ["ID"] = regionid
                };
                if (m_RegionStorageService.TryGetValue(regionid, out rInfo))
                {
                    regiondata.Add("Name", rInfo.Name);
                }
                regionsdata.Add(regiondata);
            }
            res.Add("regions", regionsdata);

            m_WebIF.SuccessResponse(req, res);
        }
예제 #5
0
            public void RestartTimerHandler(object o, ElapsedEventArgs evargs)
            {
                int timeLeft;

                lock (m_ActionLock)
                {
                    timeLeft = m_SecondsToRestart--;
                }
                if (timeLeft < 0)
                {
                    /* may happen during stopping */
                    return;
                }

                var scene = (SceneInterface)m_WeakScene.Target;

                if (!m_WeakScene.IsAlive)
                {
#if DEBUG
                    m_Log.Debug("Weak reference lost");
#endif
                    return;
                }

                if (timeLeft % 15 == 0 || FirstTrigger)
                {
                    FirstTrigger = false;
                    foreach (IAgent agent in scene.RootAgents)
                    {
                        agent.SendAlertMessage(
                            string.Format(this.GetLanguageString(agent.CurrentCulture, "RegionIsRestartingInXSeconds", "Region is restarting in {0} seconds"), timeLeft),
                            "RegionRestartSeconds",
                            new Map {
                            { "SECONDS", timeLeft },
                            { "NAME", scene.Name }
                        },
                            scene.ID);
                    }
                    m_Log.InfoFormat("Region {0} restarting in {1} seconds", scene.Name, timeLeft);
                }

                if (timeLeft == 0)
                {
                    UUID       sceneID = scene.ID;
                    RegionInfo rInfo;
                    m_WeakScene.Target = null;
                    if (m_RegionStorage.TryGetValue(sceneID, out rInfo))
                    {
                        m_Log.InfoFormat("Restarting Region {0} ({1})", rInfo.Name, rInfo.ID.ToString());
                        m_Scenes.Remove(scene,
                                        (System.Globalization.CultureInfo culture) =>
                                        this.GetLanguageString(culture, "RegionIsNowRestarting", "Region is now restarting."));
                        scene = null;
                        /* we are still alive despite having just stopped the region */
                        m_Log.InfoFormat("Starting Region {0} ({1})", rInfo.Name, rInfo.ID.ToString());
                        try
                        {
                            scene = m_SceneFactory.Instantiate(rInfo);
                        }
                        catch (Exception e)
                        {
                            m_Log.InfoFormat("Failed to start region: {0}", e.Message);
                            return;
                        }
                        m_Scenes.Add(scene);
                        scene.LoadScene();
                    }
                    RestartTimer.Stop();
                }
            }