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"); } } }
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 */ } } }
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); }
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(); } }