diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 0cd708b477..af42a3db17 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -712,10 +712,25 @@ namespace OpenSim
}
else
{
- ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(helpArgs[0]);
- if (moduleCommander != null)
+ // Messily we want to join all the help params back here
+ //string helpSubject = string.Join(" ", helpArgs);
+
+ // FIXME: Very cheap hack to get transition help working. Will disappear very shortly.
+ if (helpArgs.Length == 1)
{
- m_console.Notice(moduleCommander.Help);
+ ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(helpArgs[0]);
+ if (moduleCommander != null)
+ {
+ m_console.Notice(moduleCommander.Help);
+ }
+ }
+ else
+ {
+ ICommand command = SceneManager.CurrentOrFirstScene.GetCommand(helpArgs[1]);
+ if (command != null)
+ {
+ m_console.Notice(command.Help);
+ }
}
}
}
diff --git a/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Commander.cs b/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Commander.cs
index 31a67f7244..cd66295422 100644
--- a/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Commander.cs
+++ b/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Commander.cs
@@ -59,7 +59,7 @@ namespace OpenSim.Region.Environment.Modules.Framework.InterfaceCommander
{
StringBuilder sb = new StringBuilder();
- sb.AppendLine("===" + m_name + "===");
+ sb.AppendLine("=== " + m_name + " ===");
foreach (ICommand com in m_commands.Values)
{
@@ -83,9 +83,6 @@ namespace OpenSim.Region.Environment.Modules.Framework.InterfaceCommander
m_generatedApiClassName += m_name.Substring(1);
}
- ///
- /// Commands that this commander knows about
- ///
public Dictionary Commands
{
get { return m_commands; }
diff --git a/OpenSim/Region/Framework/Interfaces/ICommander.cs b/OpenSim/Region/Framework/Interfaces/ICommander.cs
index 17a2e4ac55..f94e8e8e4c 100644
--- a/OpenSim/Region/Framework/Interfaces/ICommander.cs
+++ b/OpenSim/Region/Framework/Interfaces/ICommander.cs
@@ -25,6 +25,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System.Collections.Generic;
+
namespace OpenSim.Region.Framework.Interfaces
{
public interface ICommander
@@ -39,6 +41,11 @@ namespace OpenSim.Region.Framework.Interfaces
///
string Help { get; }
+ ///
+ /// The commands available for this commander
+ ///
+ Dictionary Commands { get; }
+
void ProcessConsoleCommand(string function, string[] args);
void RegisterCommand(string commandName, ICommand command);
void Run(string function, object[] args);
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index 6d61e9fe6a..e58d3ced9d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -61,17 +61,24 @@ namespace OpenSim.Region.Framework.Scenes
///
/// The module interfaces available from this scene.
///
- protected Dictionary > ModuleInterfaces = new Dictionary >();
+ protected Dictionary> ModuleInterfaces = new Dictionary>();
protected Dictionary ModuleAPIMethods = new Dictionary();
+
+ ///
+ /// The module commanders available from this scene
+ ///
protected Dictionary m_moduleCommanders = new Dictionary();
+ ///
+ /// The module commands available for this scene
+ ///
+ protected Dictionary m_moduleCommands = new Dictionary();
+
///
/// Registered classes that are capable of creating entities.
///
- protected Dictionary m_entityCreators = new Dictionary();
-
- //API module interfaces
+ protected Dictionary m_entityCreators = new Dictionary();
///
/// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
@@ -278,11 +285,47 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ ///
+ /// Register a module commander.
+ ///
+ ///
public void RegisterModuleCommander(ICommander commander)
{
lock (m_moduleCommanders)
{
m_moduleCommanders.Add(commander.Name, commander);
+
+ lock (m_moduleCommands)
+ {
+ foreach (ICommand command in commander.Commands.Values)
+ {
+ if (m_moduleCommands.ContainsKey(command.Name))
+ {
+ m_log.ErrorFormat(
+ "[MODULES]: Module commander {0} tried to register the command {1} which has already been registered",
+ commander.Name, command.Name);
+ continue;
+ }
+
+ m_moduleCommands[command.Name] = command;
+ }
+ }
+ }
+ }
+
+ ///
+ /// Get an available module command
+ ///
+ ///
+ /// The command if it was found, null if no command is available with that name
+ public ICommand GetCommand(string commandName)
+ {
+ lock (m_moduleCommands)
+ {
+ if (m_moduleCommands.ContainsKey(commandName))
+ return m_moduleCommands[commandName];
+ else
+ return null;
}
}