automatic creation of ini form repository
parent
e4a69297f6
commit
f266e19243
|
@ -46,9 +46,10 @@ namespace OpenSim.Services.IntegrationService
|
||||||
[TypeExtensionPoint (Path="/OpenSim/IntegrationService", Name="IntegrationService")]
|
[TypeExtensionPoint (Path="/OpenSim/IntegrationService", Name="IntegrationService")]
|
||||||
public interface IntegrationPlugin
|
public interface IntegrationPlugin
|
||||||
{
|
{
|
||||||
void Init(IConfigSource config, IConfig data);
|
void Init(IConfigSource PluginConfig);
|
||||||
string Name{ get; }
|
string Name{ get; }
|
||||||
string ConfigName { get; }
|
string ConfigName { get; }
|
||||||
|
string DefaultConfig { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IntegrationServiceBase : ServiceBase
|
public class IntegrationServiceBase : ServiceBase
|
||||||
|
@ -93,8 +94,6 @@ namespace OpenSim.Services.IntegrationService
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the default data service
|
|
||||||
IConfig DataService = config.Configs["DatabaseService"];
|
|
||||||
|
|
||||||
// Add a command to the console
|
// Add a command to the console
|
||||||
if (MainConsole.Instance != null)
|
if (MainConsole.Instance != null)
|
||||||
|
@ -114,27 +113,46 @@ namespace OpenSim.Services.IntegrationService
|
||||||
|
|
||||||
foreach (IntegrationPlugin cmd in AddinManager.GetExtensionObjects("/OpenSim/IntegrationService"))
|
foreach (IntegrationPlugin cmd in AddinManager.GetExtensionObjects("/OpenSim/IntegrationService"))
|
||||||
{
|
{
|
||||||
IConfigSource ConfigSource = Ux.GetConfigSource(m_IntegrationConfigLoc, cmd.ConfigName);
|
string ConfigPath = String.Format("{0}/(1)", m_IntegrationConfigLoc,cmd.ConfigName);
|
||||||
|
IConfigSource PlugConfig = Ux.GetConfigSource(m_IntegrationConfigLoc, cmd.ConfigName);
|
||||||
|
|
||||||
|
// Fetch the starter ini
|
||||||
|
if (PlugConfig == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
m_log.InfoFormat("[INTEGRATION SERVICE]: Fetching starter config for {0} from {1}", cmd.Name, cmd.DefaultConfig);
|
||||||
|
|
||||||
|
// Send the default data service
|
||||||
|
IConfig DataService = config.Configs["DatabaseService"];
|
||||||
|
m_log.InfoFormat("[INTEGRATION SERVICE]: Writing initial config to {0}", cmd.ConfigName);
|
||||||
|
// FileStream fs = File.Create(Path.Combine(m_IntegrationConfigLoc,cmd.ConfigName));
|
||||||
|
// System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
||||||
|
// Byte[] buf = enc.GetBytes("; Automatically Generated Configuration - Edit for your installation\n" );
|
||||||
|
// fs.Write(buf, 0, buf.Length);
|
||||||
|
// fs.Close();
|
||||||
|
|
||||||
|
IniConfigSource source = new IniConfigSource();
|
||||||
|
IConfig Init = source.AddConfig("DatabaseService");
|
||||||
|
Init.Set("StorageProvider",(string)DataService.GetString("StorageProvider"));
|
||||||
|
Init.Set("ConnectionString", (string)DataService.GetString("ConnectionString"));
|
||||||
|
|
||||||
|
|
||||||
|
PlugConfig = Ux.LoadInitialConfig(cmd.DefaultConfig);
|
||||||
|
|
||||||
|
source.Merge(PlugConfig);
|
||||||
|
|
||||||
|
source.Save(Path.Combine(m_IntegrationConfigLoc, cmd.ConfigName));
|
||||||
|
|
||||||
|
PlugConfig = source;
|
||||||
|
}
|
||||||
|
|
||||||
// We maintain a configuration per-plugin to enhance modularity
|
// We maintain a configuration per-plugin to enhance modularity
|
||||||
// If ConfigSource is null, we will get the default from the repo
|
// If ConfigSource is null, we will get the default from the repo
|
||||||
// and write it to our directory
|
// and write it to our directory
|
||||||
cmd.Init (ConfigSource, DataService);
|
cmd.Init (PlugConfig);
|
||||||
server.AddStreamHandler((IRequestHandler)cmd);
|
server.AddStreamHandler((IRequestHandler)cmd);
|
||||||
m_log.InfoFormat("[INTEGRATION SERVICE]: Loading IntegrationService plugin {0}", cmd.Name);
|
m_log.InfoFormat("[INTEGRATION SERVICE]: Loading IntegrationService plugin {0}", cmd.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
string gridService = m_IntegrationServerConfig.GetString("GridService", String.Empty);
|
|
||||||
string presenceService = m_IntegrationServerConfig.GetString("PresenceService", String.Empty);
|
|
||||||
|
|
||||||
// These are here now, but will be gone soon.
|
|
||||||
// Each plugin will load it's own services
|
|
||||||
Object[] args = new Object[] { config };
|
|
||||||
if (gridService != string.Empty)
|
|
||||||
m_GridService = LoadPlugin<IGridService>(gridService, args);
|
|
||||||
if (presenceService != string.Empty)
|
|
||||||
m_PresenceService = LoadPlugin<IPresenceService>(presenceService, args);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IConfigSource GetConfig(string configName)
|
private IConfigSource GetConfig(string configName)
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
@ -115,9 +116,31 @@ namespace OpenSim.Services.IntegrationService
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new IniConfigSource();
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
#endregion config utils
|
#endregion config utils
|
||||||
|
|
||||||
public static T LoadPlugin<T>(string dllName, Object[] args) where T:class
|
public static T LoadPlugin<T>(string dllName, Object[] args) where T:class
|
||||||
|
|
|
@ -31,6 +31,6 @@ using Mono.Addins.Setup;
|
||||||
|
|
||||||
namespace OpenSim.Services.IntegrationService
|
namespace OpenSim.Services.IntegrationService
|
||||||
{
|
{
|
||||||
|
// This will maintain the plugin repositories and plugins
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue