diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/GridService/GridService.cs | 68 |
1 files changed, 51 insertions, 17 deletions
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index d6232ac..0fd2934 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -48,33 +48,45 @@ namespace OpenSim.Services.GridService | |||
48 | 48 | ||
49 | private bool m_DeleteOnUnregister = true; | 49 | private bool m_DeleteOnUnregister = true; |
50 | private static GridService m_RootInstance = null; | 50 | private static GridService m_RootInstance = null; |
51 | protected IConfigSource m_config; | ||
51 | 52 | ||
52 | public GridService(IConfigSource config) | 53 | public GridService(IConfigSource config) |
53 | : base(config) | 54 | : base(config) |
54 | { | 55 | { |
55 | m_log.DebugFormat("[GRID SERVICE]: Starting..."); | 56 | m_log.DebugFormat("[GRID SERVICE]: Starting..."); |
56 | 57 | ||
57 | if (m_RootInstance == null) | 58 | m_config = config; |
58 | m_RootInstance = this; | ||
59 | |||
60 | IConfig gridConfig = config.Configs["GridService"]; | 59 | IConfig gridConfig = config.Configs["GridService"]; |
61 | if (gridConfig != null) | 60 | if (gridConfig != null) |
62 | { | 61 | { |
63 | m_DeleteOnUnregister = gridConfig.GetBoolean("DeleteOnUnregister", true); | 62 | m_DeleteOnUnregister = gridConfig.GetBoolean("DeleteOnUnregister", true); |
64 | } | 63 | } |
65 | 64 | ||
66 | MainConsole.Instance.Commands.AddCommand("grid", true, | 65 | if (m_RootInstance == null) |
67 | "show region", | 66 | { |
68 | "show region <Region name>", | 67 | m_RootInstance = this; |
69 | "Show details on a region", | 68 | |
70 | "Display all details about a registered grid region", | 69 | MainConsole.Instance.Commands.AddCommand("grid", true, |
71 | HandleShowRegion); | 70 | "show region", |
71 | "show region <Region name>", | ||
72 | "Show details on a region", | ||
73 | String.Empty, | ||
74 | HandleShowRegion); | ||
75 | |||
76 | MainConsole.Instance.Commands.AddCommand("grid", true, | ||
77 | "set region flags", | ||
78 | "set region flags <Region name> <flags>", | ||
79 | "Set database flags for region", | ||
80 | String.Empty, | ||
81 | HandleSetFlags); | ||
82 | } | ||
72 | } | 83 | } |
73 | 84 | ||
74 | #region IGridService | 85 | #region IGridService |
75 | 86 | ||
76 | public bool RegisterRegion(UUID scopeID, GridRegion regionInfos) | 87 | public bool RegisterRegion(UUID scopeID, GridRegion regionInfos) |
77 | { | 88 | { |
89 | IConfig gridConfig = m_config.Configs["GridService"]; | ||
78 | // This needs better sanity testing. What if regionInfo is registering in | 90 | // This needs better sanity testing. What if regionInfo is registering in |
79 | // overlapping coords? | 91 | // overlapping coords? |
80 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | 92 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); |
@@ -104,12 +116,23 @@ namespace OpenSim.Services.GridService | |||
104 | // Everything is ok, let's register | 116 | // Everything is ok, let's register |
105 | RegionData rdata = RegionInfo2RegionData(regionInfos); | 117 | RegionData rdata = RegionInfo2RegionData(regionInfos); |
106 | rdata.ScopeID = scopeID; | 118 | rdata.ScopeID = scopeID; |
107 | rdata.Data["flags"] = "0"; | ||
108 | 119 | ||
109 | if (region != null) | 120 | if (region != null) |
110 | { | 121 | { |
111 | rdata.Data["flags"] = region.Data["flags"]; // Preserve fields | 122 | rdata.Data["flags"] = region.Data["flags"]; // Preserve fields |
112 | } | 123 | } |
124 | else | ||
125 | { | ||
126 | rdata.Data["flags"] = "0"; | ||
127 | if (gridConfig != null) | ||
128 | { | ||
129 | int newFlags = 0; | ||
130 | newFlags = ParseFlags(newFlags, gridConfig.GetString("Region_" + rdata.RegionName, String.Empty)); | ||
131 | newFlags = ParseFlags(newFlags, gridConfig.GetString("Region_" + rdata.RegionID.ToString(), String.Empty)); | ||
132 | rdata.Data["flags"] = newFlags.ToString(); | ||
133 | } | ||
134 | } | ||
135 | |||
113 | int flags = Convert.ToInt32(rdata.Data["flags"]); | 136 | int flags = Convert.ToInt32(rdata.Data["flags"]); |
114 | flags |= (int)OpenSim.Data.RegionFlags.RegionOnline; | 137 | flags |= (int)OpenSim.Data.RegionFlags.RegionOnline; |
115 | rdata.Data["flags"] = flags.ToString(); | 138 | rdata.Data["flags"] = flags.ToString(); |
@@ -302,9 +325,6 @@ namespace OpenSim.Services.GridService | |||
302 | 325 | ||
303 | private void HandleShowRegion(string module, string[] cmd) | 326 | private void HandleShowRegion(string module, string[] cmd) |
304 | { | 327 | { |
305 | if (m_RootInstance != this) | ||
306 | return; | ||
307 | |||
308 | if (cmd.Length != 3) | 328 | if (cmd.Length != 3) |
309 | { | 329 | { |
310 | MainConsole.Instance.Output("Syntax: show region <region name>"); | 330 | MainConsole.Instance.Output("Syntax: show region <region name>"); |
@@ -362,6 +382,7 @@ namespace OpenSim.Services.GridService | |||
362 | } | 382 | } |
363 | catch (Exception e) | 383 | catch (Exception e) |
364 | { | 384 | { |
385 | MainConsole.Instance.Output("Error in flag specification: " + p); | ||
365 | } | 386 | } |
366 | } | 387 | } |
367 | 388 | ||
@@ -370,16 +391,29 @@ namespace OpenSim.Services.GridService | |||
370 | 391 | ||
371 | private void HandleSetFlags(string module, string[] cmd) | 392 | private void HandleSetFlags(string module, string[] cmd) |
372 | { | 393 | { |
373 | if (m_RootInstance != this) | 394 | if (cmd.Length < 5) |
395 | { | ||
396 | MainConsole.Instance.Output("Syntax: set region flags <region name> <flags>"); | ||
374 | return; | 397 | return; |
398 | } | ||
375 | 399 | ||
376 | if (cmd.Length < 4) | 400 | List<RegionData> regions = m_Database.Get(cmd[3], UUID.Zero); |
401 | if (regions == null || regions.Count < 1) | ||
377 | { | 402 | { |
378 | MainConsole.Instance.Output("Syntax: set region flags <region name> <flags>"); | 403 | MainConsole.Instance.Output("Region not found"); |
379 | return; | 404 | return; |
380 | } | 405 | } |
381 | 406 | ||
382 | MainConsole.Instance.Output(ParseFlags(0, cmd[3]).ToString()); | 407 | foreach (RegionData r in regions) |
408 | { | ||
409 | int flags = Convert.ToInt32(r.Data["flags"]); | ||
410 | flags = ParseFlags(flags, cmd[4]); | ||
411 | r.Data["flags"] = flags.ToString(); | ||
412 | OpenSim.Data.RegionFlags f = (OpenSim.Data.RegionFlags)flags; | ||
413 | |||
414 | MainConsole.Instance.Output(String.Format("Set region {0} to {1}", r.RegionName, f)); | ||
415 | m_Database.Store(r); | ||
416 | } | ||
383 | } | 417 | } |
384 | } | 418 | } |
385 | } | 419 | } |