mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 09:45:47 +08:00
Merge branch 'master' into careminster
This commit is contained in:
359
OpenSim/Server/Base/CommandManager.cs
Normal file
359
OpenSim/Server/Base/CommandManager.cs
Normal file
@@ -0,0 +1,359 @@
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using Mono.Addins.Setup;
|
||||
using Mono.Addins;
|
||||
using Mono.Addins.Description;
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Server.Base
|
||||
{
|
||||
/// <summary>
|
||||
/// Command manager -
|
||||
/// Wrapper for OpenSim.Framework.PluginManager to allow
|
||||
/// us to add commands to the console to perform operations
|
||||
/// on our repos and plugins
|
||||
/// </summary>
|
||||
public class CommandManager
|
||||
{
|
||||
public AddinRegistry PluginRegistry;
|
||||
protected PluginManager PluginManager;
|
||||
|
||||
public CommandManager(AddinRegistry registry)
|
||||
{
|
||||
PluginRegistry = registry;
|
||||
PluginManager = new PluginManager(PluginRegistry);
|
||||
AddManagementCommands();
|
||||
}
|
||||
|
||||
private void AddManagementCommands()
|
||||
{
|
||||
// add plugin
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin add", "plugin add \"plugin index\"",
|
||||
"Install plugin from repository.",
|
||||
HandleConsoleInstallPlugin);
|
||||
|
||||
// remove plugin
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin remove", "plugin remove \"plugin index\"",
|
||||
"Remove plugin from repository",
|
||||
HandleConsoleUnInstallPlugin);
|
||||
|
||||
// list installed plugins
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin list installed",
|
||||
"plugin list installed","List install plugins",
|
||||
HandleConsoleListInstalledPlugin);
|
||||
|
||||
// list plugins available from registered repositories
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin list available",
|
||||
"plugin list available","List available plugins",
|
||||
HandleConsoleListAvailablePlugin);
|
||||
// List available updates
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin updates", "plugin updates","List availble updates",
|
||||
HandleConsoleListUpdates);
|
||||
|
||||
// Update plugin
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin update", "plugin update \"plugin index\"","Update the plugin",
|
||||
HandleConsoleUpdatePlugin);
|
||||
|
||||
// Add repository
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo add", "repo add \"url\"","Add repository",
|
||||
HandleConsoleAddRepo);
|
||||
|
||||
// Refresh repo
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo refresh", "repo refresh \"url\"", "Sync with a registered repository",
|
||||
HandleConsoleGetRepo);
|
||||
|
||||
// Remove repository from registry
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo remove",
|
||||
"repo remove \"[url | index]\"",
|
||||
"Remove repository from registry",
|
||||
HandleConsoleRemoveRepo);
|
||||
|
||||
// Enable repo
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo enable", "repo enable \"[url | index]\"",
|
||||
"Enable registered repository",
|
||||
HandleConsoleEnableRepo);
|
||||
|
||||
// Disable repo
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo disable", "repo disable\"[url | index]\"",
|
||||
"Disable registered repository",
|
||||
HandleConsoleDisableRepo);
|
||||
|
||||
// List registered repositories
|
||||
MainConsole.Instance.Commands.AddCommand("Repository", true,
|
||||
"repo list", "repo list",
|
||||
"List registered repositories",
|
||||
HandleConsoleListRepos);
|
||||
|
||||
// *
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin info", "plugin info \"plugin index\"","Show detailed information for plugin",
|
||||
HandleConsoleShowAddinInfo);
|
||||
|
||||
// Plugin disable
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin disable", "plugin disable \"plugin index\"",
|
||||
"Disable a plugin",
|
||||
HandleConsoleDisablePlugin);
|
||||
|
||||
// Enable plugin
|
||||
MainConsole.Instance.Commands.AddCommand("Plugin", true,
|
||||
"plugin enable", "plugin enable \"plugin index\"",
|
||||
"Enable the selected plugin plugin",
|
||||
HandleConsoleEnablePlugin);
|
||||
}
|
||||
|
||||
#region console handlers
|
||||
// Handle our console commands
|
||||
//
|
||||
// Install plugin from registered repository
|
||||
/// <summary>
|
||||
/// Handles the console install plugin command. Attempts to install the selected plugin
|
||||
/// and
|
||||
/// </summary>
|
||||
/// <param name='module'>
|
||||
/// Module.
|
||||
/// </param>
|
||||
/// <param name='cmd'>
|
||||
/// Cmd.
|
||||
/// </param>
|
||||
private void HandleConsoleInstallPlugin(string module, string[] cmd)
|
||||
{
|
||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||
|
||||
if (cmd.Length == 3)
|
||||
{
|
||||
int ndx = Convert.ToInt16(cmd[2]);
|
||||
if (PluginManager.InstallPlugin(ndx, out result) == true)
|
||||
{
|
||||
ArrayList s = new ArrayList();
|
||||
s.AddRange(result.Keys);
|
||||
s.Sort();
|
||||
|
||||
var list = result.Keys.ToList();
|
||||
list.Sort();
|
||||
foreach (var k in list)
|
||||
{
|
||||
Dictionary<string, object> plugin = (Dictionary<string, object>)result[k];
|
||||
bool enabled = (bool)plugin["enabled"];
|
||||
MainConsole.Instance.OutputFormat("{0}) {1} {2} rev. {3}",
|
||||
k,
|
||||
enabled == true ? "[ ]" : "[X]",
|
||||
plugin["name"], plugin["version"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove installed plugin
|
||||
private void HandleConsoleUnInstallPlugin(string module, string[] cmd)
|
||||
{
|
||||
if (cmd.Length == 3)
|
||||
{
|
||||
int ndx = Convert.ToInt16(cmd[2]);
|
||||
PluginManager.UnInstall(ndx);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// List installed plugins
|
||||
private void HandleConsoleListInstalledPlugin(string module, string[] cmd)
|
||||
{
|
||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||
PluginManager.ListInstalledAddins(out result);
|
||||
|
||||
ArrayList s = new ArrayList();
|
||||
s.AddRange(result.Keys);
|
||||
s.Sort();
|
||||
|
||||
var list = result.Keys.ToList();
|
||||
list.Sort();
|
||||
foreach (var k in list)
|
||||
{
|
||||
Dictionary<string, object> plugin = (Dictionary<string, object>)result[k];
|
||||
bool enabled = (bool)plugin["enabled"];
|
||||
MainConsole.Instance.OutputFormat("{0}) {1} {2} rev. {3}",
|
||||
k,
|
||||
enabled == true ? "[ ]" : "[X]",
|
||||
plugin["name"], plugin["version"]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// List available plugins on registered repositories
|
||||
private void HandleConsoleListAvailablePlugin(string module, string[] cmd)
|
||||
{
|
||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||
PluginManager.ListAvailable(out result);
|
||||
|
||||
var list = result.Keys.ToList();
|
||||
list.Sort();
|
||||
foreach (var k in list)
|
||||
{
|
||||
// name, version, repository
|
||||
Dictionary<string, object> plugin = (Dictionary<string, object>)result[k];
|
||||
MainConsole.Instance.OutputFormat("{0}) {1} rev. {2} {3}",
|
||||
k,
|
||||
plugin["name"],
|
||||
plugin["version"],
|
||||
plugin["repository"]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// List available updates **not ready
|
||||
private void HandleConsoleListUpdates(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.ListUpdates();
|
||||
return;
|
||||
}
|
||||
|
||||
// Update plugin **not ready
|
||||
private void HandleConsoleUpdatePlugin(string module, string[] cmd)
|
||||
{
|
||||
MainConsole.Instance.Output(PluginManager.Update());
|
||||
return;
|
||||
}
|
||||
|
||||
// Register repository
|
||||
private void HandleConsoleAddRepo(string module, string[] cmd)
|
||||
{
|
||||
if ( cmd.Length == 3)
|
||||
{
|
||||
PluginManager.AddRepository(cmd[2]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Get repository status **not working
|
||||
private void HandleConsoleGetRepo(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.GetRepository();
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove registered repository
|
||||
private void HandleConsoleRemoveRepo(string module, string[] cmd)
|
||||
{
|
||||
if (cmd.Length == 3)
|
||||
PluginManager.RemoveRepository(cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable repository
|
||||
private void HandleConsoleEnableRepo(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.EnableRepository(cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable repository
|
||||
private void HandleConsoleDisableRepo(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.DisableRepository(cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
// List repositories
|
||||
private void HandleConsoleListRepos(string module, string[] cmd)
|
||||
{
|
||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||
PluginManager.ListRepositories(out result);
|
||||
|
||||
var list = result.Keys.ToList();
|
||||
list.Sort();
|
||||
foreach (var k in list)
|
||||
{
|
||||
Dictionary<string, object> repo = (Dictionary<string, object>)result[k];
|
||||
bool enabled = (bool)repo["enabled"];
|
||||
MainConsole.Instance.OutputFormat("{0}) {1} {2}",
|
||||
k,
|
||||
enabled == true ? "[ ]" : "[X]",
|
||||
repo["name"], repo["url"]);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Show description information
|
||||
private void HandleConsoleShowAddinInfo(string module, string[] cmd)
|
||||
{
|
||||
if (cmd.Length >= 3)
|
||||
{
|
||||
|
||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||
|
||||
int ndx = Convert.ToInt16(cmd[2]);
|
||||
PluginManager.AddinInfo(ndx, out result);
|
||||
|
||||
MainConsole.Instance.OutputFormat("Name: {0}\nURL: {1}\nFile: {2}\nAuthor: {3}\nCategory: {4}\nDesc: {5}",
|
||||
result["name"],
|
||||
result["url"],
|
||||
result["file_name"],
|
||||
result["author"],
|
||||
result["category"],
|
||||
result["description"]);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Disable plugin
|
||||
private void HandleConsoleDisablePlugin(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.DisablePlugin(cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable plugin
|
||||
private void HandleConsoleEnablePlugin(string module, string[] cmd)
|
||||
{
|
||||
PluginManager.EnablePlugin(cmd);
|
||||
return;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -33,11 +33,137 @@ using System.Xml.Serialization;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenSim.Framework;
|
||||
using OpenMetaverse;
|
||||
using Mono.Addins;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Framework.Servers;
|
||||
|
||||
|
||||
[assembly:AddinRoot("Robust", "0.1")]
|
||||
namespace OpenSim.Server.Base
|
||||
{
|
||||
[TypeExtensionPoint(Path="/Robust/Connector", Name="RobustConnector")]
|
||||
public interface IRobustConnector
|
||||
{
|
||||
string ConfigName
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
bool Enabled
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
string PluginPath
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
uint Configure(IConfigSource config);
|
||||
void Initialize(IHttpServer server);
|
||||
void Unload();
|
||||
}
|
||||
|
||||
public class PluginLoader
|
||||
{
|
||||
static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public AddinRegistry Registry
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public IConfigSource Config
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public PluginLoader(IConfigSource config, string registryPath)
|
||||
{
|
||||
Config = config;
|
||||
|
||||
Registry = new AddinRegistry(registryPath, ".");
|
||||
AddinManager.Initialize(registryPath);
|
||||
AddinManager.Registry.Update();
|
||||
CommandManager commandmanager = new CommandManager(Registry);
|
||||
AddinManager.AddExtensionNodeHandler("/Robust/Connector", OnExtensionChanged);
|
||||
}
|
||||
|
||||
private void OnExtensionChanged(object s, ExtensionNodeEventArgs args)
|
||||
{
|
||||
IRobustConnector connector = (IRobustConnector)args.ExtensionObject;
|
||||
Addin a = Registry.GetAddin(args.ExtensionNode.Addin.Id);
|
||||
|
||||
if(a == null)
|
||||
{
|
||||
Registry.Rebuild(null);
|
||||
a = Registry.GetAddin(args.ExtensionNode.Addin.Id);
|
||||
}
|
||||
|
||||
switch(args.Change)
|
||||
{
|
||||
case ExtensionChange.Add:
|
||||
if (a.AddinFile.Contains(Registry.DefaultAddinsFolder))
|
||||
{
|
||||
m_log.InfoFormat("[SERVER]: Adding {0} from registry", a.Name);
|
||||
connector.PluginPath = String.Format("{0}/{1}", Registry.DefaultAddinsFolder, a.Name.Replace(',', '.'));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.InfoFormat("[SERVER]: Adding {0} from ./bin", a.Name);
|
||||
connector.PluginPath = a.AddinFile;
|
||||
}
|
||||
LoadPlugin(connector);
|
||||
break;
|
||||
case ExtensionChange.Remove:
|
||||
m_log.InfoFormat("[SERVER]: Removing {0}", a.Name);
|
||||
UnloadPlugin(connector);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadPlugin(IRobustConnector connector)
|
||||
{
|
||||
IHttpServer server = null;
|
||||
uint port = connector.Configure(Config);
|
||||
|
||||
if(connector.Enabled)
|
||||
{
|
||||
server = GetServer(connector, port);
|
||||
connector.Initialize(server);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.InfoFormat("[SERVER]: {0} Disabled.", connector.ConfigName);
|
||||
}
|
||||
}
|
||||
|
||||
private void UnloadPlugin(IRobustConnector connector)
|
||||
{
|
||||
m_log.InfoFormat("[Server]: Unloading {0}", connector.ConfigName);
|
||||
|
||||
connector.Unload();
|
||||
}
|
||||
|
||||
private IHttpServer GetServer(IRobustConnector connector, uint port)
|
||||
{
|
||||
IHttpServer server;
|
||||
|
||||
if(port != 0)
|
||||
server = MainServer.GetHttpServer(port);
|
||||
else
|
||||
server = MainServer.Instance;
|
||||
|
||||
return server;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ServerUtils
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
@@ -333,5 +459,42 @@ namespace OpenSim.Server.Base
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static IConfig GetConfig(string configFile, string configName)
|
||||
{
|
||||
IConfig config;
|
||||
|
||||
if (File.Exists(configFile))
|
||||
{
|
||||
IConfigSource configsource = new IniConfigSource(configFile);
|
||||
config = configsource.Configs[configName];
|
||||
}
|
||||
else
|
||||
config = null;
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
public static IConfigSource LoadInitialConfig(string url)
|
||||
{
|
||||
IConfigSource source = new XmlConfigSource();
|
||||
m_log.InfoFormat("[CONFIG]: {0} is a http:// URI, fetching ...", url);
|
||||
|
||||
// The ini file path is a http URI
|
||||
// Try to read it
|
||||
try
|
||||
{
|
||||
XmlReader r = XmlReader.Create(url);
|
||||
IConfigSource cs = new XmlConfigSource(r);
|
||||
source.Merge(cs);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.FatalFormat("[CONFIG]: Exception reading config from URI {0}\n" + e.ToString(), url);
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
return source;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +56,12 @@ namespace OpenSim.Server.Base
|
||||
//
|
||||
protected string[] m_Arguments;
|
||||
|
||||
public string ConfigDirectory
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
// Run flag
|
||||
//
|
||||
private bool m_Running = true;
|
||||
@@ -134,6 +140,8 @@ namespace OpenSim.Server.Base
|
||||
startupConfig = Config.Configs["Startup"];
|
||||
}
|
||||
|
||||
ConfigDirectory = startupConfig.GetString("ConfigDirectory", ".");
|
||||
|
||||
prompt = startupConfig.GetString("Prompt", prompt);
|
||||
|
||||
// Allow derived classes to load config before the console is
|
||||
@@ -242,4 +250,4 @@ namespace OpenSim.Server.Base
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,8 +39,75 @@ namespace OpenSim.Server.Handlers.Base
|
||||
|
||||
public class ServiceConnector : IServiceConnector
|
||||
{
|
||||
public virtual string ConfigURL
|
||||
{
|
||||
get { return String.Empty; }
|
||||
}
|
||||
|
||||
public virtual string ConfigName
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public virtual string ConfigFile
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public virtual IConfigSource Config
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public ServiceConnector()
|
||||
{
|
||||
}
|
||||
|
||||
public ServiceConnector(IConfigSource config, IHttpServer server, string configName)
|
||||
{
|
||||
}
|
||||
|
||||
// We call this from our plugin module to get our configuration
|
||||
public IConfig GetConfig()
|
||||
{
|
||||
IConfig config = null;
|
||||
config = ServerUtils.GetConfig(ConfigFile, ConfigName);
|
||||
|
||||
// Our file is not here? We can get one to bootstrap our plugin module
|
||||
if ( config == null )
|
||||
{
|
||||
IConfigSource remotesource = GetConfigSource();
|
||||
|
||||
if (remotesource != null)
|
||||
{
|
||||
IniConfigSource initialconfig = new IniConfigSource();
|
||||
initialconfig.Merge (remotesource);
|
||||
initialconfig.Save(ConfigFile);
|
||||
}
|
||||
|
||||
config = remotesource.Configs[ConfigName];
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
// We get our remote initial configuration for bootstrapping in case
|
||||
// we have no configuration in our main file or in an existing
|
||||
// modular config file. This is the last resort to bootstrap the
|
||||
// configuration, likely a new plugin loading for the first time.
|
||||
private IConfigSource GetConfigSource()
|
||||
{
|
||||
IConfigSource source = null;
|
||||
|
||||
source = ServerUtils.LoadInitialConfig(ConfigURL);
|
||||
|
||||
if (source == null)
|
||||
System.Console.WriteLine(String.Format ("Config Url: {0} Not found!", ConfigURL));
|
||||
|
||||
return source;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ using OpenSim.Framework.Servers;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Server.Base;
|
||||
using OpenSim.Server.Handlers.Base;
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Server
|
||||
{
|
||||
@@ -48,9 +49,13 @@ namespace OpenSim.Server
|
||||
protected static List<IServiceConnector> m_ServiceConnectors =
|
||||
new List<IServiceConnector>();
|
||||
|
||||
protected static PluginLoader loader;
|
||||
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
m_Server = new HttpServerBase("R.O.B.U.S.T.", args);
|
||||
|
||||
string registryLocation;
|
||||
|
||||
IConfig serverConfig = m_Server.Config.Configs["Startup"];
|
||||
if (serverConfig == null)
|
||||
@@ -60,6 +65,8 @@ namespace OpenSim.Server
|
||||
}
|
||||
|
||||
string connList = serverConfig.GetString("ServiceConnectors", String.Empty);
|
||||
|
||||
registryLocation = serverConfig.GetString("RegistryLocation",".");
|
||||
|
||||
IConfig servicesConfig = m_Server.Config.Configs["ServiceList"];
|
||||
if (servicesConfig != null)
|
||||
@@ -141,6 +148,9 @@ namespace OpenSim.Server
|
||||
m_log.InfoFormat("[SERVER]: Failed to load {0}", conn);
|
||||
}
|
||||
}
|
||||
|
||||
loader = new PluginLoader(m_Server.Config, registryLocation);
|
||||
|
||||
int res = m_Server.Run();
|
||||
|
||||
Environment.Exit(res);
|
||||
|
||||
Reference in New Issue
Block a user