From 952ad59c1f34709725e37ef6b449d321a2ccc0b0 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Sun, 8 Apr 2012 17:38:44 -0400 Subject: [PATCH] Work on commands --- .../IntegrationService/IntegrationService.cs | 24 +++++++++ .../IntegrationServiceBase.cs | 15 ++++-- .../IntegrationService/PluginManager.cs | 51 +++++++++++++++---- 3 files changed, 75 insertions(+), 15 deletions(-) diff --git a/OpenSim/Services/IntegrationService/IntegrationService.cs b/OpenSim/Services/IntegrationService/IntegrationService.cs index fe0b754a06..700530471b 100644 --- a/OpenSim/Services/IntegrationService/IntegrationService.cs +++ b/OpenSim/Services/IntegrationService/IntegrationService.cs @@ -117,6 +117,14 @@ namespace OpenSim.Services.IntegrationService MainConsole.Instance.Commands.AddCommand("Integration", true, "show info", "show info \"plugin name\"","Show detailed information for plugin", HandleConsoleShowAddinInfo); + + MainConsole.Instance.Commands.AddCommand("Integration", true, + "disable plugin", "disable plugin \"plugin name\"","disable the plugin", + HandleConsoleDisablePlugin); + + MainConsole.Instance.Commands.AddCommand("Integration", true, + "enable plugin", "enable plugin \"plugin name\"","enable the plugin", + HandleConsoleEnablePlugin); } #region console handlers @@ -197,6 +205,7 @@ namespace OpenSim.Services.IntegrationService return; } + // Disable repository private void HandleConsoleDisableRepo(string module, string[] cmd) { m_PluginManager.DisableRepository(cmd); @@ -213,6 +222,7 @@ namespace OpenSim.Services.IntegrationService return; } + // Show description information private void HandleConsoleShowAddinInfo(string module, string[] cmd) { if ( cmd.Length >= 3 ) @@ -221,6 +231,20 @@ namespace OpenSim.Services.IntegrationService return; } } + + // Disable plugin + private void HandleConsoleDisablePlugin(string module, string[] cmd) + { + m_PluginManager.DisablePlugin(cmd); + return; + } + + // Enable plugin + private void HandleConsoleEnablePlugin(string module, string[] cmd) + { + m_PluginManager.EnablePlugin(cmd); + return; + } #endregion #region web handlers diff --git a/OpenSim/Services/IntegrationService/IntegrationServiceBase.cs b/OpenSim/Services/IntegrationService/IntegrationServiceBase.cs index 950445d44d..6d6c777229 100644 --- a/OpenSim/Services/IntegrationService/IntegrationServiceBase.cs +++ b/OpenSim/Services/IntegrationService/IntegrationServiceBase.cs @@ -87,7 +87,7 @@ namespace OpenSim.Services.IntegrationService AddinManager.AddinLoaded += on_addinloaded_; AddinManager.AddinLoadError += on_addinloaderror_; - + AddinManager.AddinUnloaded += HandleAddinManagerAddinUnloaded; m_Server = server; m_IntegrationServerConfig = config.Configs["IntegrationService"]; @@ -107,6 +107,9 @@ namespace OpenSim.Services.IntegrationService string ConfigPath = String.Format("{0}/(1)", m_IntegrationConfigLoc,cmd.ConfigName); IConfigSource PlugConfig = Ux.GetConfigSource(m_IntegrationConfigLoc, cmd.ConfigName); + // We maintain a configuration per-plugin to enhance modularity + // If ConfigSource is null, we will get the default from the repo + // and write it to our directory // Fetch the starter ini if (PlugConfig == null) { @@ -137,9 +140,8 @@ namespace OpenSim.Services.IntegrationService PlugConfig = source; } - // We maintain a configuration per-plugin to enhance modularity - // If ConfigSource is null, we will get the default from the repo - // and write it to our directory + // Initialise and bring up the plugin + // Need to take down the plugin when disabling it. cmd.Init (PlugConfig); server.AddStreamHandler((IRequestHandler)cmd); m_log.InfoFormat("[INTEGRATION SERVICE]: Loading IntegrationService plugin {0}", cmd.Name); @@ -151,6 +153,11 @@ namespace OpenSim.Services.IntegrationService return new IniConfigSource(); } + void HandleAddinManagerAddinUnloaded (object sender, AddinEventArgs args) + { + MainConsole.Instance.Output("Plugin Unloaded"); + } + private void on_addinloaderror_(object sender, AddinErrorEventArgs args) { if (args.Exception == null) diff --git a/OpenSim/Services/IntegrationService/PluginManager.cs b/OpenSim/Services/IntegrationService/PluginManager.cs index 8f260a741d..6ca355f8a8 100644 --- a/OpenSim/Services/IntegrationService/PluginManager.cs +++ b/OpenSim/Services/IntegrationService/PluginManager.cs @@ -99,13 +99,17 @@ namespace OpenSim.Services.IntegrationService // List instaled addins public void ListInstalledAddins() { + int count = 0; ArrayList list = new ArrayList(); list.AddRange(m_Registry.GetAddins()); MainConsole.Instance.Output("Installed Plugins"); foreach (Addin addin in list) { if(addin.Description.Category == "IntegrationPlugin") - MainConsole.Instance.OutputFormat("* {0} rev. {1}", addin.Name, addin.Version); + MainConsole.Instance.OutputFormat("{0}) {1} {2} rev. {3}", count.ToString(), + addin.Enabled == false ? "[X]" : "[ ]", + addin.Name, addin.Version ); + count++; } return; } @@ -246,16 +250,7 @@ namespace OpenSim.Services.IntegrationService int n = 0; foreach (AddinRepository rep in reps) { - StringBuilder sb = new StringBuilder(); - - sb.AppendFormat("{0})", n.ToString()); - if (!rep.Enabled) - sb.AppendFormat(" (Disabled)"); - sb.AppendFormat(" {0}", rep.Title); - if (rep.Title != rep.Url) - sb.AppendFormat(" {0}", rep.Url); - - list.Add(sb.ToString()); + list.Add(String.Format("{0}) {1} {2} {3}",n.ToString(), rep.Enabled == true ? "[ ]" : "[X]", rep.Name, rep.Url)); n++; } return list; @@ -277,5 +272,39 @@ namespace OpenSim.Services.IntegrationService return "AddinInfo"; } + + // Disable a plugin + public void DisablePlugin(string[] args) + { + +// AddinRepository[] reps = Repositories.GetRepositories(); +// Array.Sort (reps, (r1,r2) => r1.Title.CompareTo(r2.Title)); +// if (reps.Length == 0) +// { +// MainConsole.Instance.Output("No repositories have been registered."); +// return; +// } +// +// int n = Convert.ToInt16(args[2]); +// if (n > (reps.Length -1)) +// { +// MainConsole.Instance.Output("Selection out of range"); +// return; +// } + + Addin addin = m_Registry.GetAddin(args[2]); + AddinManager.Registry.DisableAddin(addin.Id); + addin.Enabled = false; + return; + } + + // Enable plugin + public void EnablePlugin(string[] args) + { + Addin addin = m_Registry.GetAddin(args[2]); + AddinManager.Registry.EnableAddin(addin.Id); + addin.Enabled = true; + return; + } } } \ No newline at end of file