aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs
diff options
context:
space:
mode:
authorDiva Canto2009-09-22 20:25:00 -0700
committerDiva Canto2009-09-22 20:25:00 -0700
commit882d2c9cc399c4c7d1809702104ce94c9c2c7b17 (patch)
tree7b79cdd31d5ac659586acc4ae15bfd6519b4565e /OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs
parentMoved RegionName from RegionInfo to SimpleRegionInfo. (diff)
downloadopensim-SC_OLD-882d2c9cc399c4c7d1809702104ce94c9c2c7b17.zip
opensim-SC_OLD-882d2c9cc399c4c7d1809702104ce94c9c2c7b17.tar.gz
opensim-SC_OLD-882d2c9cc399c4c7d1809702104ce94c9c2c7b17.tar.bz2
opensim-SC_OLD-882d2c9cc399c4c7d1809702104ce94c9c2c7b17.tar.xz
Added hg console commands to the module.
Added the IN connector module for link-region and corresponding handler to be used in the regions only. No service as such is needed. This will replace the current link-region machinery. Compiles but not tested.
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs295
1 files changed, 295 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs
new file mode 100644
index 0000000..eee3a6c
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs
@@ -0,0 +1,295 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Xml;
32using log4net;
33using Nini.Config;
34using OpenSim.Framework;
35//using OpenSim.Framework.Communications;
36using OpenSim.Framework.Console;
37using OpenSim.Region.Framework;
38using OpenSim.Region.Framework.Scenes;
39using OpenSim.Region.Framework.Scenes.Hypergrid;
40
41namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
42{
43 public class HGCommands
44 {
45 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
46 private HGGridConnector m_HGGridConnector;
47 private Scene m_scene;
48
49 private static uint m_autoMappingX = 0;
50 private static uint m_autoMappingY = 0;
51 private static bool m_enableAutoMapping = false;
52
53 public HGCommands(HGGridConnector hgConnector, Scene scene)
54 {
55 m_HGGridConnector = hgConnector;
56 m_scene = scene;
57 }
58
59 //public static Scene CreateScene(RegionInfo regionInfo, AgentCircuitManager circuitManager, CommunicationsManager m_commsManager,
60 // StorageManager storageManager, ModuleLoader m_moduleLoader, ConfigSettings m_configSettings, OpenSimConfigSource m_config, string m_version)
61 //{
62 // HGSceneCommunicationService sceneGridService = new HGSceneCommunicationService(m_commsManager, HGServices);
63
64 // return
65 // new HGScene(
66 // regionInfo, circuitManager, m_commsManager, sceneGridService, storageManager,
67 // m_moduleLoader, false, m_configSettings.PhysicalPrim,
68 // m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version);
69 //}
70
71 public void RunCommand(string module, string[] cmdparams)
72 {
73 List<string> args = new List<string>(cmdparams);
74 if (args.Count < 1)
75 return;
76
77 string command = args[0];
78 args.RemoveAt(0);
79
80 cmdparams = args.ToArray();
81
82 RunHGCommand(command, cmdparams);
83
84 }
85
86 private void RunHGCommand(string command, string[] cmdparams)
87 {
88 if (command.Equals("link-mapping"))
89 {
90 if (cmdparams.Length == 2)
91 {
92 try
93 {
94 m_autoMappingX = Convert.ToUInt32(cmdparams[0]);
95 m_autoMappingY = Convert.ToUInt32(cmdparams[1]);
96 m_enableAutoMapping = true;
97 }
98 catch (Exception)
99 {
100 m_autoMappingX = 0;
101 m_autoMappingY = 0;
102 m_enableAutoMapping = false;
103 }
104 }
105 }
106 else if (command.Equals("link-region"))
107 {
108 if (cmdparams.Length < 3)
109 {
110 if ((cmdparams.Length == 1) || (cmdparams.Length == 2))
111 {
112 LoadXmlLinkFile(cmdparams);
113 }
114 else
115 {
116 LinkRegionCmdUsage();
117 }
118 return;
119 }
120
121 if (cmdparams[2].Contains(":"))
122 {
123 // New format
124 uint xloc, yloc;
125 string mapName;
126 try
127 {
128 xloc = Convert.ToUInt32(cmdparams[0]);
129 yloc = Convert.ToUInt32(cmdparams[1]);
130 mapName = cmdparams[2];
131 if (cmdparams.Length > 3)
132 for (int i = 3; i < cmdparams.Length; i++)
133 mapName += " " + cmdparams[i];
134
135 m_log.Info(">> MapName: " + mapName);
136 //internalPort = Convert.ToUInt32(cmdparams[4]);
137 //remotingPort = Convert.ToUInt32(cmdparams[5]);
138 }
139 catch (Exception e)
140 {
141 m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message);
142 LinkRegionCmdUsage();
143 return;
144 }
145
146 m_HGGridConnector.TryLinkRegionToCoords(m_scene, null, mapName, xloc, yloc);
147 }
148 else
149 {
150 // old format
151 SimpleRegionInfo regInfo;
152 uint xloc, yloc;
153 uint externalPort;
154 string externalHostName;
155 try
156 {
157 xloc = Convert.ToUInt32(cmdparams[0]);
158 yloc = Convert.ToUInt32(cmdparams[1]);
159 externalPort = Convert.ToUInt32(cmdparams[3]);
160 externalHostName = cmdparams[2];
161 //internalPort = Convert.ToUInt32(cmdparams[4]);
162 //remotingPort = Convert.ToUInt32(cmdparams[5]);
163 }
164 catch (Exception e)
165 {
166 m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message);
167 LinkRegionCmdUsage();
168 return;
169 }
170
171 //if (TryCreateLink(xloc, yloc, externalPort, externalHostName, out regInfo))
172 if (m_HGGridConnector.TryCreateLink(m_scene, null, xloc, yloc, "", externalPort, externalHostName, out regInfo))
173 {
174 if (cmdparams.Length >= 5)
175 {
176 regInfo.RegionName = "";
177 for (int i = 4; i < cmdparams.Length; i++)
178 regInfo.RegionName += cmdparams[i] + " ";
179 }
180 }
181 }
182 return;
183 }
184 else if (command.Equals("unlink-region"))
185 {
186 if (cmdparams.Length < 1)
187 {
188 UnlinkRegionCmdUsage();
189 return;
190 }
191 if (m_HGGridConnector.TryUnlinkRegion(m_scene, cmdparams[0]))
192 m_log.InfoFormat("[HGrid]: Successfully unlinked {0}", cmdparams[0]);
193 else
194 m_log.InfoFormat("[HGrid]: Unable to unlink {0}, region not found", cmdparams[0]);
195 }
196 }
197
198 private void LoadXmlLinkFile(string[] cmdparams)
199 {
200 //use http://www.hgurl.com/hypergrid.xml for test
201 try
202 {
203 XmlReader r = XmlReader.Create(cmdparams[0]);
204 XmlConfigSource cs = new XmlConfigSource(r);
205 string[] excludeSections = null;
206
207 if (cmdparams.Length == 2)
208 {
209 if (cmdparams[1].ToLower().StartsWith("excludelist:"))
210 {
211 string excludeString = cmdparams[1].ToLower();
212 excludeString = excludeString.Remove(0, 12);
213 char[] splitter = { ';' };
214
215 excludeSections = excludeString.Split(splitter);
216 }
217 }
218
219 for (int i = 0; i < cs.Configs.Count; i++)
220 {
221 bool skip = false;
222 if ((excludeSections != null) && (excludeSections.Length > 0))
223 {
224 for (int n = 0; n < excludeSections.Length; n++)
225 {
226 if (excludeSections[n] == cs.Configs[i].Name.ToLower())
227 {
228 skip = true;
229 break;
230 }
231 }
232 }
233 if (!skip)
234 {
235 ReadLinkFromConfig(cs.Configs[i]);
236 }
237 }
238 }
239 catch (Exception e)
240 {
241 m_log.Error(e.ToString());
242 }
243 }
244
245
246 private void ReadLinkFromConfig(IConfig config)
247 {
248 SimpleRegionInfo regInfo;
249 uint xloc, yloc;
250 uint externalPort;
251 string externalHostName;
252 uint realXLoc, realYLoc;
253
254 xloc = Convert.ToUInt32(config.GetString("xloc", "0"));
255 yloc = Convert.ToUInt32(config.GetString("yloc", "0"));
256 externalPort = Convert.ToUInt32(config.GetString("externalPort", "0"));
257 externalHostName = config.GetString("externalHostName", "");
258 realXLoc = Convert.ToUInt32(config.GetString("real-xloc", "0"));
259 realYLoc = Convert.ToUInt32(config.GetString("real-yloc", "0"));
260
261 if (m_enableAutoMapping)
262 {
263 xloc = (uint)((xloc % 100) + m_autoMappingX);
264 yloc = (uint)((yloc % 100) + m_autoMappingY);
265 }
266
267 if (((realXLoc == 0) && (realYLoc == 0)) ||
268 (((realXLoc - xloc < 3896) || (xloc - realXLoc < 3896)) &&
269 ((realYLoc - yloc < 3896) || (yloc - realYLoc < 3896))))
270 {
271 if (
272 m_HGGridConnector.TryCreateLink(m_scene, null, xloc, yloc, "", externalPort,
273 externalHostName, out regInfo))
274 {
275 regInfo.RegionName = config.GetString("localName", "");
276 }
277 }
278 }
279
280
281 private void LinkRegionCmdUsage()
282 {
283 m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>]");
284 m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName> <HttpPort> [<LocalName>]");
285 m_log.Info("Usage: link-region <URI_of_xml> [<exclude>]");
286 }
287
288 private void UnlinkRegionCmdUsage()
289 {
290 m_log.Info("Usage: unlink-region <HostName>:<HttpPort>");
291 m_log.Info("Usage: unlink-region <LocalName>");
292 }
293
294 }
295}