diff options
author | Johan Berntsson | 2008-03-04 05:31:54 +0000 |
---|---|---|
committer | Johan Berntsson | 2008-03-04 05:31:54 +0000 |
commit | 279e0061c515ee0a03036bef68eea9738273d785 (patch) | |
tree | 4502228eb7b87a760e0b0e67aded9d1d870d0bed /OpenSim/Region/Application | |
parent | Added copyright heaaders. Minor cleanup. (diff) | |
download | opensim-SC-279e0061c515ee0a03036bef68eea9738273d785.zip opensim-SC-279e0061c515ee0a03036bef68eea9738273d785.tar.gz opensim-SC-279e0061c515ee0a03036bef68eea9738273d785.tar.bz2 opensim-SC-279e0061c515ee0a03036bef68eea9738273d785.tar.xz |
Merged 3Di code that provides scene and avatar serialization, and plugin support for region move/split/merge. See ThirdParty/3Di/README.txt. Unless the new modules are used there should be no noticeable changes when running OpenSim.
Diffstat (limited to 'OpenSim/Region/Application')
-rw-r--r-- | OpenSim/Region/Application/OpenSimMain.cs | 152 |
1 files changed, 138 insertions, 14 deletions
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index bdefd0f..2c9e50e 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs | |||
@@ -33,8 +33,6 @@ using System.IO; | |||
33 | using System.Text; | 33 | using System.Text; |
34 | using System.Threading; | 34 | using System.Threading; |
35 | using System.Timers; | 35 | using System.Timers; |
36 | using libsecondlife; | ||
37 | using Mono.Addins; | ||
38 | using Nini.Config; | 36 | using Nini.Config; |
39 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
40 | using OpenSim.Framework.Communications.Cache; | 38 | using OpenSim.Framework.Communications.Cache; |
@@ -49,6 +47,13 @@ using OpenSim.Region.Environment.Interfaces; | |||
49 | using OpenSim.Region.Environment.Scenes; | 47 | using OpenSim.Region.Environment.Scenes; |
50 | using OpenSim.Region.Physics.Manager; | 48 | using OpenSim.Region.Physics.Manager; |
51 | using Timer=System.Timers.Timer; | 49 | using Timer=System.Timers.Timer; |
50 | using System.Net; | ||
51 | using Nwc.XmlRpc; | ||
52 | using System.Collections; | ||
53 | using System.Reflection; | ||
54 | using libsecondlife; | ||
55 | using Mono.Addins; | ||
56 | using Mono.Addins.Description; | ||
52 | 57 | ||
53 | namespace OpenSim | 58 | namespace OpenSim |
54 | { | 59 | { |
@@ -57,6 +62,8 @@ namespace OpenSim | |||
57 | public class OpenSimMain : RegionApplicationBase, conscmd_callback | 62 | public class OpenSimMain : RegionApplicationBase, conscmd_callback |
58 | { | 63 | { |
59 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 64 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
65 | private string proxyUrl; | ||
66 | private int proxyOffset = 0; | ||
60 | 67 | ||
61 | private const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; | 68 | private const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; |
62 | 69 | ||
@@ -110,6 +117,16 @@ namespace OpenSim | |||
110 | get { return m_httpServer; } | 117 | get { return m_httpServer; } |
111 | } | 118 | } |
112 | 119 | ||
120 | public List<UDPServer> UdpServers | ||
121 | { | ||
122 | get { return m_udpServers; } | ||
123 | } | ||
124 | |||
125 | public List<RegionInfo> RegionData | ||
126 | { | ||
127 | get { return m_regionData; } | ||
128 | } | ||
129 | |||
113 | private ModuleLoader m_moduleLoader; | 130 | private ModuleLoader m_moduleLoader; |
114 | 131 | ||
115 | public ModuleLoader ModuleLoader | 132 | public ModuleLoader ModuleLoader |
@@ -350,20 +367,34 @@ namespace OpenSim | |||
350 | m_httpServer.AddStreamHandler(new SimStatusHandler()); | 367 | m_httpServer.AddStreamHandler(new SimStatusHandler()); |
351 | } | 368 | } |
352 | 369 | ||
370 | proxyUrl = ConfigSource.Configs["Network"].GetString("proxy_url", ""); | ||
371 | proxyOffset = Int32.Parse(ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); | ||
372 | |||
353 | // Create a ModuleLoader instance | 373 | // Create a ModuleLoader instance |
354 | m_moduleLoader = new ModuleLoader(m_config); | 374 | m_moduleLoader = new ModuleLoader(m_config); |
355 | 375 | ||
356 | ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/Startup"); | 376 | ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/Startup"); |
357 | m_log.InfoFormat("[PLUGINS]: Loading {0} OpenSim application plugins", nodes.Count); | 377 | m_log.InfoFormat("[PLUGINS]: Loading {0} OpenSim application plugins", nodes.Count); |
358 | |||
359 | foreach (TypeExtensionNode node in nodes) | 378 | foreach (TypeExtensionNode node in nodes) |
360 | { | 379 | { |
361 | IApplicationPlugin plugin = (IApplicationPlugin)node.CreateInstance(); | 380 | // First load the proxy server (if present) |
362 | 381 | if(node.Path.Contains("Proxy")) | |
363 | plugin.Initialise(this); | 382 | { |
364 | m_plugins.Add(plugin); | 383 | IApplicationPlugin plugin = (IApplicationPlugin)node.CreateInstance(); |
384 | plugin.Initialise(this); | ||
385 | m_plugins.Add(plugin); | ||
386 | } | ||
387 | } | ||
388 | // then load the other modules | ||
389 | foreach (TypeExtensionNode node in nodes) | ||
390 | { | ||
391 | if(!node.Path.Contains("Proxy")) | ||
392 | { | ||
393 | IApplicationPlugin plugin = (IApplicationPlugin)node.CreateInstance(); | ||
394 | plugin.Initialise(this); | ||
395 | m_plugins.Add(plugin); | ||
396 | } | ||
365 | } | 397 | } |
366 | |||
367 | // Start UDP servers | 398 | // Start UDP servers |
368 | //for (int i = 0; i < m_udpServers.Count; i++) | 399 | //for (int i = 0; i < m_udpServers.Count; i++) |
369 | //{ | 400 | //{ |
@@ -436,10 +467,25 @@ namespace OpenSim | |||
436 | return m_commsManager.AddUser(tempfirstname,templastname,tempPasswd,regX,regY); | 467 | return m_commsManager.AddUser(tempfirstname,templastname,tempPasswd,regX,regY); |
437 | } | 468 | } |
438 | 469 | ||
439 | public UDPServer CreateRegion(RegionInfo regionInfo) | 470 | public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) |
440 | { | 471 | { |
472 | int port = regionInfo.InternalEndPoint.Port; | ||
473 | if ((proxyOffset != 0) && (portadd_flag)) | ||
474 | { | ||
475 | // set proxy url to RegionInfo | ||
476 | regionInfo.proxyUrl = proxyUrl; | ||
477 | |||
478 | // set initial RegionID to originRegionID in RegionInfo. (it needs for loding prims) | ||
479 | regionInfo.originRegionID = regionInfo.RegionID; | ||
480 | |||
481 | // set initial ServerURI | ||
482 | regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName | ||
483 | + ":" + regionInfo.InternalEndPoint.Port.ToString(); | ||
484 | |||
485 | ProxyCommand(proxyUrl, "AddPort", port, port + proxyOffset, regionInfo.ExternalHostName); | ||
486 | } | ||
441 | UDPServer udpServer; | 487 | UDPServer udpServer; |
442 | Scene scene = SetupScene(regionInfo, out udpServer, m_permissions); | 488 | Scene scene = SetupScene(regionInfo, proxyOffset, out udpServer, m_permissions); |
443 | 489 | ||
444 | m_log.Info("[MODULES]: Loading Region's modules"); | 490 | m_log.Info("[MODULES]: Loading Region's modules"); |
445 | 491 | ||
@@ -546,7 +592,7 @@ namespace OpenSim | |||
546 | m_regionData.RemoveAt(RegionHandleElement); | 592 | m_regionData.RemoveAt(RegionHandleElement); |
547 | } | 593 | } |
548 | 594 | ||
549 | CreateRegion(whichRegion); | 595 | CreateRegion(whichRegion, true); |
550 | //UDPServer restartingRegion = CreateRegion(whichRegion); | 596 | //UDPServer restartingRegion = CreateRegion(whichRegion); |
551 | //restartingRegion.ServerListener(); | 597 | //restartingRegion.ServerListener(); |
552 | //m_sceneManager.SendSimOnlineNotification(restartingRegion.RegionHandle); | 598 | //m_sceneManager.SendSimOnlineNotification(restartingRegion.RegionHandle); |
@@ -594,6 +640,8 @@ namespace OpenSim | |||
594 | /// </summary> | 640 | /// </summary> |
595 | public virtual void Shutdown() | 641 | public virtual void Shutdown() |
596 | { | 642 | { |
643 | ProxyCommand(proxyUrl, "Stop"); | ||
644 | |||
597 | if (m_startupCommandsFile != String.Empty) | 645 | if (m_startupCommandsFile != String.Empty) |
598 | { | 646 | { |
599 | RunCommandScript(m_shutdownCommandsFile); | 647 | RunCommandScript(m_shutdownCommandsFile); |
@@ -609,7 +657,7 @@ namespace OpenSim | |||
609 | 657 | ||
610 | m_console.Close(); | 658 | m_console.Close(); |
611 | Environment.Exit(0); | 659 | Environment.Exit(0); |
612 | } | 660 | } |
613 | 661 | ||
614 | private void RunAutoTimerScript(object sender, EventArgs e) | 662 | private void RunAutoTimerScript(object sender, EventArgs e) |
615 | { | 663 | { |
@@ -882,9 +930,8 @@ namespace OpenSim | |||
882 | break; | 930 | break; |
883 | 931 | ||
884 | case "create-region": | 932 | case "create-region": |
885 | CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1],false)); | 933 | CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1],false), true); |
886 | break; | 934 | break; |
887 | |||
888 | case "remove-region": | 935 | case "remove-region": |
889 | string regName = CombineParams(cmdparams, 0); | 936 | string regName = CombineParams(cmdparams, 0); |
890 | 937 | ||
@@ -1120,6 +1167,8 @@ namespace OpenSim | |||
1120 | presence.ControllingClient.CircuitCode, | 1167 | presence.ControllingClient.CircuitCode, |
1121 | ep, | 1168 | ep, |
1122 | regionName)); | 1169 | regionName)); |
1170 | m_console.Notice(" {0}", (((ClientView)presence.ControllingClient).PacketProcessingEnabled)?"Active client":"Standby client"); | ||
1171 | |||
1123 | } | 1172 | } |
1124 | 1173 | ||
1125 | break; | 1174 | break; |
@@ -1167,5 +1216,80 @@ namespace OpenSim | |||
1167 | } | 1216 | } |
1168 | 1217 | ||
1169 | #endregion | 1218 | #endregion |
1219 | // TODO: remove me!! (almost same as XmlRpcCommand) | ||
1220 | public object ProxyCommand(string url, string methodName, params object[] args) | ||
1221 | { | ||
1222 | if(proxyUrl.Length==0) return null; | ||
1223 | return SendXmlRpcCommand(url, methodName, args); | ||
1224 | } | ||
1225 | |||
1226 | public object XmlRpcCommand(uint port, string methodName, params object[] args) | ||
1227 | { | ||
1228 | return SendXmlRpcCommand("http://localhost:"+port, methodName, args); | ||
1229 | } | ||
1230 | |||
1231 | public object XmlRpcCommand(string url, string methodName, params object[] args) | ||
1232 | { | ||
1233 | return SendXmlRpcCommand(url, methodName, args); | ||
1234 | } | ||
1235 | |||
1236 | private object SendXmlRpcCommand(string url, string methodName, object[] args) | ||
1237 | { | ||
1238 | try { | ||
1239 | //MainLog.Instance.Verbose("XMLRPC", "Sending command {0} to {1}", methodName, url); | ||
1240 | XmlRpcRequest client = new XmlRpcRequest(methodName, args); | ||
1241 | //MainLog.Instance.Verbose("XMLRPC", client.ToString()); | ||
1242 | XmlRpcResponse response = client.Send(url, 6000); | ||
1243 | if(!response.IsFault) return response.Value; | ||
1244 | } | ||
1245 | catch(Exception e) | ||
1246 | { | ||
1247 | m_log.ErrorFormat("XMLRPC Failed to send command {0} to {1}: {2}", methodName, url, e.Message); | ||
1248 | } | ||
1249 | return null; | ||
1250 | } | ||
1251 | |||
1252 | /// <summary> | ||
1253 | /// Get the start time and up time of Region server | ||
1254 | /// </summary> | ||
1255 | /// <param name="starttime">The first out parameter describing when the Region server started</param> | ||
1256 | /// <param name="uptime">The second out parameter describing how long the Region server has run</param> | ||
1257 | public void GetRunTime(out string starttime, out string uptime) | ||
1258 | { | ||
1259 | starttime = m_startuptime.ToString(); | ||
1260 | uptime = (DateTime.Now - m_startuptime).ToString(); | ||
1261 | } | ||
1262 | |||
1263 | /// <summary> | ||
1264 | /// Get the number of the avatars in the Region server | ||
1265 | /// </summary> | ||
1266 | /// <param name="usernum">The first out parameter describing the number of all the avatars in the Region server</param> | ||
1267 | public void GetAvatarNumber(out int usernum) | ||
1268 | { | ||
1269 | int accounter = 0; | ||
1270 | |||
1271 | foreach (ScenePresence presence in m_sceneManager.GetCurrentSceneAvatars()) { | ||
1272 | //presence.RegionHandle; | ||
1273 | accounter++; | ||
1274 | } | ||
1275 | |||
1276 | usernum = accounter; | ||
1277 | } | ||
1278 | |||
1279 | /// <summary> | ||
1280 | /// Get the number of the avatars in the Region server | ||
1281 | /// </summary> | ||
1282 | /// <param name="usernum">The first out parameter describing the number of all the avatars in the Region server</param> | ||
1283 | public void GetRegionNumber(out int regionnum) | ||
1284 | { | ||
1285 | int accounter = 0; | ||
1286 | //List<string> regionNameList = new List<string>(); | ||
1287 | |||
1288 | m_sceneManager.ForEachScene(delegate(Scene scene) { | ||
1289 | accounter++; | ||
1290 | }); | ||
1291 | regionnum = accounter; | ||
1292 | |||
1293 | } | ||
1170 | } | 1294 | } |
1171 | } | 1295 | } |