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
	
	 BlueWall
						BlueWall