<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Well I hadn't really thought out all the details but what I meant is we
can have a IApplicationPlugin that can load other plugin types itself. <br>
<br>
So if we look at the code in OpenSimBase that loads IApplicationplugins it is:<br>
<br>
 protected virtual void LoadPlugins()<br>
        {<br>
            PluginLoader<IApplicationPlugin> loader =<br>
                new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this));<br>
<br>
            loader.Load("/OpenSim/Startup");<br>
            m_plugins = loader.Plugins;<br>
        }<br>
<br>
and the plugin initialiser is :<br>
<br>
  public class ApplicationPluginInitialiser : PluginInitialiserBase<br>
    {<br>
        private OpenSimBase server;<br>
        public ApplicationPluginInitialiser (OpenSimBase s) { server = s; }<br>
        public override void Initialise (IPlugin plugin)<br>
        {<br>
            IApplicationPlugin p = plugin as IApplicationPlugin;<br>
            p.Initialise (server);<br>
        }<br>
    }<br>
<br>
so there is no reason why inside a ApplicationPlugin we can't do something like:<br>
<br>
 public void Initialise(OpenSimBase openSim)<br>
        {<br>
   LoadGridServiceModules(openSim);<br>
}<br>
<br>
Protected virtual void LoadGridServiceModules(OpenSimBase openSimBase)<br>


        {<br>


            PluginLoader<IGridServiceModule> loader =<br>


                new PluginLoader<IGridServiceModule>(new GridServicePluginInitialiser(openSimBase.GlobalRegistry));<br>


<br>


            loader.Load("/OpenSim/GridService");<br>


            m_plugins = loader.Plugins;<br>


        }<br>
<br>
  public class GridServicePluginInitialiser : PluginInitialiserBase<br>
    {<br>
        private IGridServiceCore m_core;<br>
        public ApplicationPluginInitialiser (IGridService core) { m_core = core; }<br>
        public override void Initialise (IPlugin plugin)<br>
        {<br>
            IGridServiceModule p = plugin as IGridServiceModule;<br>
            p.Initialise (m_core);<br>
        }<br>
    }<br>
<br><br>
So its then loaded the IGridServiceModules and passed them only a reference to the GlobalRegistry (from OpenSimBase).<br>
<br>
And for plugins/modules that want to register with scenes, we could
either have another plugin type and loader, or just use
IApplicationPlugin directly for them.<br>
<br>
Of course this opens up the question if at any point the GlobalRegistry
should be accessable from scenes. If we are going to go with the
approach that modules that should be accessable from scenes should
register with them then I guess the answer is no. But I can see people
wanting to be able to access the GlobalRegistry from Region modules and
trying to do hacks so they can.<br><br>--- On <b>Thu, 26/2/09, Melanie <i><melanie@t-data.com></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">From: Melanie <melanie@t-data.com><br>Subject: Re: [Opensim-dev] Comms Manager<br>To: michaelwri22@yahoo.co.uk, opensim-dev@lists.berlios.de<br>Date: Thursday, 26 February, 2009, 12:50 PM<br><br><pre>I'd have to see that, but it sounds good.<br><br>Can you illustrate?<br><br>Melanie<br><br>MW wrote:<br>> Just a though,t but maybe we are trying to be too generic in finding a<br>single interface that meets all needs. We have a plugin loader (Mono.addins)<br>that can quite easily load different plugin types. So by using the<br>IApplicationPlugin system, we can have them also loading other plugin types. <br>> <br>> If basically we are saying that we want two different Module/Interface<br>registeries (Global and Scene), then there
 is no reason that as long as all the<br>plugins only register interfaces with those registeries why we can't have<br>the multiple plugin types. So we have a type (and loader) that is able to<br>register event handlers so it can be informed about scenes. And we a loader that<br>can load the modules from the Grid servers directly. <br>> <br>> The loaders would be minor things basically just using PluginLoader to<br>load the plugins. <br>> <br>> We could say this increases the complexity, but I actually think by having<br>initialisation interfaces that are right for the task that the modules are going<br>to do makes sense.<br>> <br>> --- On Thu, 26/2/09, Melanie <melanie@t-data.com> wrote:<br>> From: Melanie <melanie@t-data.com><br>> Subject: Re: [Opensim-dev] Comms Manager<br>> To: opensim-dev@lists.berlios.de<br>> Date: Thursday, 26 February, 2009, 12:36 PM<br>> <br>> I don't think Grid and Asset modules
 need to load into region <br>> servers, and vice versa. At least not by the same interface. That <br>> interchangeability makes other things that are useful almost <br>> impossibly complex.<br>> <br>> Melanie<br>> <br>> Stefan Andersson wrote:<br>>> No, didn't notice that, but I question why Grid or Asset server<br>> modules should even be aware of that, regardless of how the IScene<br>interface<br>> looks or what types that, in turn, pulls in.<br>>> <br>>> Best regards,<br>>> Stefan Andersson<br>>> Tribal Media AB<br>>> <br>>> <br>>>> Date: Thu, 26 Feb 2009 12:29:19 +0000<br>>>> From: melanie@t-data.com<br>>>> To: opensim-dev@lists.berlios.de<br>>>> Subject: Re: [Opensim-dev] Comms Manager<br>>>> <br>>>> Hi,<br>>>> <br>>>> note that I used IScene sxclusively?<br>>>> <br>>>>
 Melanie<br>>>> <br>>>> Stefan Andersson wrote:<br>>>> > Um, yeah, having 'Scene' as a type in anyhting<br>outside of<br>> the Region will lead to grief.<br>>>> > <br>>>> > <br>>>> > Suggestion:<br>>>> > <br>>>> > <br>>>> > <br>>>> > --- OpenSim.Framework: ---<br>>>> > <br>>>> > <br>>>> > <br>>>> > IGenericModule<br>>>> > <br>>>> > {<br>>>> > <br>>>> > Initialise();<br>>>> > <br>>>> > PostInitialise();<br>>>> > <br>>>> > }<br>>>> > <br>>>> > <br>>>> > <br>>>> > --- OpenSim.Region.Framework: ---<br>>>> > <br>>>> > <br>>>> > <br>>>> > IRegionModule : IGenericModule<br>>>> > <br>>>>
 > {<br>>>> > <br>>>> > OnNewScene();<br>>>> > <br>>>> > OnSceneRemoved();<br>>>> > <br>>>> > }<br>>>> > <br>>>> > <br>>>> > <br>>>> > Best regards,<br>>>> > Stefan Andersson<br>>>> > Tribal Media AB<br>>> <br>>> <br>>> <br>>> <br>>><br>------------------------------------------------------------------------<br>>> <br>>> _______________________________________________<br>>> Opensim-dev mailing list<br>>> Opensim-dev@lists.berlios.de<br>>> https://lists.berlios.de/mailman/listinfo/opensim-dev<br>> _______________________________________________<br>> Opensim-dev mailing list<br>> Opensim-dev@lists.berlios.de<br>> https://lists.berlios.de/mailman/listinfo/opensim-dev<br>> <br>> <br>> <br>>       <br>> <br>> <br>>
 ------------------------------------------------------------------------<br>> <br>> _______________________________________________<br>> Opensim-dev mailing list<br>> Opensim-dev@lists.berlios.de<br>> https://lists.berlios.de/mailman/listinfo/opensim-dev<br>_______________________________________________<br>Opensim-dev mailing list<br>Opensim-dev@lists.berlios.de<br>https://lists.berlios.de/mailman/listinfo/opensim-dev<br></pre></blockquote></td></tr></table><br>