diff options
author | teravus | 2013-02-03 07:44:45 -0500 |
---|---|---|
committer | teravus | 2013-02-03 08:13:52 -0500 |
commit | 6b0310b82973031fdf35c570bc69450f2f700eb7 (patch) | |
tree | 4f9c278e43c7c61935bd8daad2dedf79237971c2 | |
parent | Sit and Spin reduction. If sitting, slam avatar angular velocity to zero. (diff) | |
download | opensim-SC_OLD-6b0310b82973031fdf35c570bc69450f2f700eb7.zip opensim-SC_OLD-6b0310b82973031fdf35c570bc69450f2f700eb7.tar.gz opensim-SC_OLD-6b0310b82973031fdf35c570bc69450f2f700eb7.tar.bz2 opensim-SC_OLD-6b0310b82973031fdf35c570bc69450f2f700eb7.tar.xz |
Adds the ability to load more then one IClientNetworkServer thereby allowing additional client network servers at the same time. Use comma separated values in clientstack_plugin in your config. Additional plugins lying around shouldn't be picked up because the loader only loads configured dll assemblies and breaks at the first IClientNetworkServer found in the assembly. (the only new functionality is the ability to specify more in config). Note: The existing functionality also passes in a nini config.. and has a boolean to determine if the client network server should be initialized for a specific scene.
-rw-r--r-- | OpenSim/Region/Application/OpenSimBase.cs | 37 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/ClientStackManager.cs | 83 |
2 files changed, 73 insertions, 47 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index c3c87e7..f5c06df 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -316,7 +316,7 @@ namespace OpenSim | |||
316 | /// <param name="regionInfo"></param> | 316 | /// <param name="regionInfo"></param> |
317 | /// <param name="portadd_flag"></param> | 317 | /// <param name="portadd_flag"></param> |
318 | /// <returns></returns> | 318 | /// <returns></returns> |
319 | public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, out IScene scene) | 319 | public List<IClientNetworkServer> CreateRegion(RegionInfo regionInfo, bool portadd_flag, out IScene scene) |
320 | { | 320 | { |
321 | return CreateRegion(regionInfo, portadd_flag, false, out scene); | 321 | return CreateRegion(regionInfo, portadd_flag, false, out scene); |
322 | } | 322 | } |
@@ -326,7 +326,7 @@ namespace OpenSim | |||
326 | /// </summary> | 326 | /// </summary> |
327 | /// <param name="regionInfo"></param> | 327 | /// <param name="regionInfo"></param> |
328 | /// <returns></returns> | 328 | /// <returns></returns> |
329 | public IClientNetworkServer CreateRegion(RegionInfo regionInfo, out IScene scene) | 329 | public List<IClientNetworkServer> CreateRegion(RegionInfo regionInfo, out IScene scene) |
330 | { | 330 | { |
331 | return CreateRegion(regionInfo, false, true, out scene); | 331 | return CreateRegion(regionInfo, false, true, out scene); |
332 | } | 332 | } |
@@ -338,7 +338,7 @@ namespace OpenSim | |||
338 | /// <param name="portadd_flag"></param> | 338 | /// <param name="portadd_flag"></param> |
339 | /// <param name="do_post_init"></param> | 339 | /// <param name="do_post_init"></param> |
340 | /// <returns></returns> | 340 | /// <returns></returns> |
341 | public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init, out IScene mscene) | 341 | public List<IClientNetworkServer> CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init, out IScene mscene) |
342 | { | 342 | { |
343 | int port = regionInfo.InternalEndPoint.Port; | 343 | int port = regionInfo.InternalEndPoint.Port; |
344 | 344 | ||
@@ -363,8 +363,8 @@ namespace OpenSim | |||
363 | Util.XmlRpcCommand(proxyUrl, "AddPort", port, port + proxyOffset, regionInfo.ExternalHostName); | 363 | Util.XmlRpcCommand(proxyUrl, "AddPort", port, port + proxyOffset, regionInfo.ExternalHostName); |
364 | } | 364 | } |
365 | 365 | ||
366 | IClientNetworkServer clientServer; | 366 | List<IClientNetworkServer> clientServers; |
367 | Scene scene = SetupScene(regionInfo, proxyOffset, Config, out clientServer); | 367 | Scene scene = SetupScene(regionInfo, proxyOffset, Config, out clientServers); |
368 | 368 | ||
369 | m_log.Info("[MODULES]: Loading Region's modules (old style)"); | 369 | m_log.Info("[MODULES]: Loading Region's modules (old style)"); |
370 | 370 | ||
@@ -414,8 +414,11 @@ namespace OpenSim | |||
414 | 414 | ||
415 | if (m_autoCreateClientStack) | 415 | if (m_autoCreateClientStack) |
416 | { | 416 | { |
417 | m_clientServers.Add(clientServer); | 417 | foreach (IClientNetworkServer clientserver in clientServers) |
418 | clientServer.Start(); | 418 | { |
419 | m_clientServers.Add(clientserver); | ||
420 | clientserver.Start(); | ||
421 | } | ||
419 | } | 422 | } |
420 | 423 | ||
421 | scene.EventManager.OnShutdown += delegate() { ShutdownRegion(scene); }; | 424 | scene.EventManager.OnShutdown += delegate() { ShutdownRegion(scene); }; |
@@ -425,7 +428,7 @@ namespace OpenSim | |||
425 | scene.Start(); | 428 | scene.Start(); |
426 | scene.StartScripts(); | 429 | scene.StartScripts(); |
427 | 430 | ||
428 | return clientServer; | 431 | return clientServers; |
429 | } | 432 | } |
430 | 433 | ||
431 | /// <summary> | 434 | /// <summary> |
@@ -641,7 +644,7 @@ namespace OpenSim | |||
641 | /// <param name="regionInfo"></param> | 644 | /// <param name="regionInfo"></param> |
642 | /// <param name="clientServer"> </param> | 645 | /// <param name="clientServer"> </param> |
643 | /// <returns></returns> | 646 | /// <returns></returns> |
644 | protected Scene SetupScene(RegionInfo regionInfo, out IClientNetworkServer clientServer) | 647 | protected Scene SetupScene(RegionInfo regionInfo, out List<IClientNetworkServer> clientServer) |
645 | { | 648 | { |
646 | return SetupScene(regionInfo, 0, null, out clientServer); | 649 | return SetupScene(regionInfo, 0, null, out clientServer); |
647 | } | 650 | } |
@@ -655,19 +658,20 @@ namespace OpenSim | |||
655 | /// <param name="clientServer"> </param> | 658 | /// <param name="clientServer"> </param> |
656 | /// <returns></returns> | 659 | /// <returns></returns> |
657 | protected Scene SetupScene( | 660 | protected Scene SetupScene( |
658 | RegionInfo regionInfo, int proxyOffset, IConfigSource configSource, out IClientNetworkServer clientServer) | 661 | RegionInfo regionInfo, int proxyOffset, IConfigSource configSource, out List<IClientNetworkServer> clientServer) |
659 | { | 662 | { |
663 | List<IClientNetworkServer> clientNetworkServers = null; | ||
664 | |||
660 | AgentCircuitManager circuitManager = new AgentCircuitManager(); | 665 | AgentCircuitManager circuitManager = new AgentCircuitManager(); |
661 | IPAddress listenIP = regionInfo.InternalEndPoint.Address; | 666 | IPAddress listenIP = regionInfo.InternalEndPoint.Address; |
662 | //if (!IPAddress.TryParse(regionInfo.InternalEndPoint, out listenIP)) | 667 | //if (!IPAddress.TryParse(regionInfo.InternalEndPoint, out listenIP)) |
663 | // listenIP = IPAddress.Parse("0.0.0.0"); | 668 | // listenIP = IPAddress.Parse("0.0.0.0"); |
664 | 669 | ||
665 | uint port = (uint) regionInfo.InternalEndPoint.Port; | 670 | uint port = (uint) regionInfo.InternalEndPoint.Port; |
666 | 671 | IClientNetworkServer clientNetworkServer; | |
667 | if (m_autoCreateClientStack) | 672 | if (m_autoCreateClientStack) |
668 | { | 673 | { |
669 | clientServer | 674 | clientNetworkServers = m_clientStackManager.CreateServers( |
670 | = m_clientStackManager.CreateServer( | ||
671 | listenIP, ref port, proxyOffset, regionInfo.m_allow_alternate_ports, configSource, | 675 | listenIP, ref port, proxyOffset, regionInfo.m_allow_alternate_ports, configSource, |
672 | circuitManager); | 676 | circuitManager); |
673 | } | 677 | } |
@@ -682,9 +686,12 @@ namespace OpenSim | |||
682 | 686 | ||
683 | if (m_autoCreateClientStack) | 687 | if (m_autoCreateClientStack) |
684 | { | 688 | { |
685 | clientServer.AddScene(scene); | 689 | foreach (IClientNetworkServer clientnetserver in clientNetworkServers) |
690 | { | ||
691 | clientnetserver.AddScene(scene); | ||
692 | } | ||
686 | } | 693 | } |
687 | 694 | clientServer = clientNetworkServers; | |
688 | scene.LoadWorldMap(); | 695 | scene.LoadWorldMap(); |
689 | 696 | ||
690 | scene.PhysicsScene = GetPhysicsScene(scene.RegionInfo.RegionName); | 697 | scene.PhysicsScene = GetPhysicsScene(scene.RegionInfo.RegionName); |
diff --git a/OpenSim/Region/ClientStack/ClientStackManager.cs b/OpenSim/Region/ClientStack/ClientStackManager.cs index 84ea0b3..299aabd 100644 --- a/OpenSim/Region/ClientStack/ClientStackManager.cs +++ b/OpenSim/Region/ClientStack/ClientStackManager.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using System.Net; | 30 | using System.Net; |
30 | using System.Reflection; | 31 | using System.Reflection; |
31 | using log4net; | 32 | using log4net; |
@@ -38,39 +39,53 @@ namespace OpenSim.Region.ClientStack | |||
38 | { | 39 | { |
39 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 40 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
40 | 41 | ||
41 | private Type plugin; | 42 | private List<Type> plugin = new List<Type>(); |
42 | private Assembly pluginAssembly; | 43 | private List<Assembly> pluginAssembly = new List<Assembly>(); |
43 | 44 | ||
44 | public ClientStackManager(string dllName) | 45 | public ClientStackManager(string pDllName) |
45 | { | 46 | { |
46 | m_log.Info("[CLIENTSTACK]: Attempting to load " + dllName); | 47 | List<string> clientstacks = new List<string>(); |
47 | 48 | if (pDllName.Contains(",")) | |
48 | try | 49 | { |
50 | clientstacks = new List<string>(pDllName.Split(',')); | ||
51 | } | ||
52 | else | ||
49 | { | 53 | { |
50 | plugin = null; | 54 | clientstacks.Add(pDllName); |
51 | pluginAssembly = Assembly.LoadFrom(dllName); | 55 | } |
56 | foreach (string dllName in clientstacks) | ||
57 | { | ||
58 | m_log.Info("[CLIENTSTACK]: Attempting to load " + dllName); | ||
52 | 59 | ||
53 | foreach (Type pluginType in pluginAssembly.GetTypes()) | 60 | try |
54 | { | 61 | { |
55 | if (pluginType.IsPublic) | 62 | //plugin = null; |
56 | { | 63 | Assembly itemAssembly = Assembly.LoadFrom(dllName); |
57 | Type typeInterface = pluginType.GetInterface("IClientNetworkServer", true); | 64 | pluginAssembly.Add(itemAssembly); |
58 | 65 | ||
59 | if (typeInterface != null) | 66 | foreach (Type pluginType in itemAssembly.GetTypes()) |
67 | { | ||
68 | if (pluginType.IsPublic) | ||
60 | { | 69 | { |
61 | m_log.Info("[CLIENTSTACK]: Added IClientNetworkServer Interface"); | 70 | Type typeInterface = pluginType.GetInterface("IClientNetworkServer", true); |
62 | plugin = pluginType; | 71 | |
63 | return; | 72 | if (typeInterface != null) |
73 | { | ||
74 | m_log.Info("[CLIENTSTACK]: Added IClientNetworkServer Interface"); | ||
75 | plugin.Add(pluginType); | ||
76 | break; | ||
77 | } | ||
64 | } | 78 | } |
65 | } | 79 | } |
66 | } | 80 | } |
67 | } catch (ReflectionTypeLoadException e) | 81 | catch (ReflectionTypeLoadException e) |
68 | { | ||
69 | foreach (Exception e2 in e.LoaderExceptions) | ||
70 | { | 82 | { |
71 | m_log.Error(e2.ToString()); | 83 | foreach (Exception e2 in e.LoaderExceptions) |
84 | { | ||
85 | m_log.Error(e2.ToString()); | ||
86 | } | ||
87 | throw e; | ||
72 | } | 88 | } |
73 | throw e; | ||
74 | } | 89 | } |
75 | } | 90 | } |
76 | 91 | ||
@@ -84,11 +99,11 @@ namespace OpenSim.Region.ClientStack | |||
84 | /// <param name="assetCache"></param> | 99 | /// <param name="assetCache"></param> |
85 | /// <param name="authenticateClass"></param> | 100 | /// <param name="authenticateClass"></param> |
86 | /// <returns></returns> | 101 | /// <returns></returns> |
87 | public IClientNetworkServer CreateServer( | 102 | public List<IClientNetworkServer> CreateServers( |
88 | IPAddress _listenIP, ref uint port, int proxyPortOffset, bool allow_alternate_port, | 103 | IPAddress _listenIP, ref uint port, int proxyPortOffset, bool allow_alternate_port, |
89 | AgentCircuitManager authenticateClass) | 104 | AgentCircuitManager authenticateClass) |
90 | { | 105 | { |
91 | return CreateServer( | 106 | return CreateServers( |
92 | _listenIP, ref port, proxyPortOffset, allow_alternate_port, null, authenticateClass); | 107 | _listenIP, ref port, proxyPortOffset, allow_alternate_port, null, authenticateClass); |
93 | } | 108 | } |
94 | 109 | ||
@@ -105,20 +120,24 @@ namespace OpenSim.Region.ClientStack | |||
105 | /// <param name="assetCache"></param> | 120 | /// <param name="assetCache"></param> |
106 | /// <param name="authenticateClass"></param> | 121 | /// <param name="authenticateClass"></param> |
107 | /// <returns></returns> | 122 | /// <returns></returns> |
108 | public IClientNetworkServer CreateServer( | 123 | public List<IClientNetworkServer> CreateServers( |
109 | IPAddress _listenIP, ref uint port, int proxyPortOffset, bool allow_alternate_port, IConfigSource configSource, | 124 | IPAddress _listenIP, ref uint port, int proxyPortOffset, bool allow_alternate_port, IConfigSource configSource, |
110 | AgentCircuitManager authenticateClass) | 125 | AgentCircuitManager authenticateClass) |
111 | { | 126 | { |
127 | List<IClientNetworkServer> servers = new List<IClientNetworkServer>(); | ||
112 | if (plugin != null) | 128 | if (plugin != null) |
113 | { | 129 | { |
114 | IClientNetworkServer server = | 130 | for (int i = 0; i < plugin.Count; i++) |
115 | (IClientNetworkServer)Activator.CreateInstance(pluginAssembly.GetType(plugin.ToString())); | 131 | { |
116 | 132 | IClientNetworkServer server = | |
117 | server.Initialise( | 133 | (IClientNetworkServer) Activator.CreateInstance(pluginAssembly[i].GetType(plugin[i].ToString())); |
118 | _listenIP, ref port, proxyPortOffset, allow_alternate_port, | 134 | |
119 | configSource, authenticateClass); | 135 | server.Initialise( |
120 | 136 | _listenIP, ref port, proxyPortOffset, allow_alternate_port, | |
121 | return server; | 137 | configSource, authenticateClass); |
138 | servers.Add(server); | ||
139 | } | ||
140 | return servers; | ||
122 | } | 141 | } |
123 | 142 | ||
124 | m_log.Error("[CLIENTSTACK]: Couldn't initialize a new server"); | 143 | m_log.Error("[CLIENTSTACK]: Couldn't initialize a new server"); |