[Opensim-dev] Robust dynamic connector plugins...
Justin Clark-Casey
jjustincc at googlemail.com
Fri Oct 26 23:32:32 UTC 2012
My first question is, what do you think of the alternatives to Mono.Addins, chiefly MEF (Managed Extensibility
Framework)? How do they compare?
On 23/10/12 22:36, James Hughes wrote:
> I am pushing my work for dynamic plugins to a branch for evaluation. This is a working prototype and currently works
> only with Robust at this stage.
>
> Here is the list of current features...
>
> *dynamic/modular configuration - The application will look in the default ini for its configuration section. If none is
> found, it will look in a named directory for its modular config file. If no file is found, it will, then, look in a url
> provided in the module for a "bootstrap" ini that will be downloaded and written to the specified ini.
>
> *remote repositories - Remote repositories may be managed from the console. A repository may be added, enabled, disabled
> or removed. When a registered repository is enabled, suitable plugins for the application will be listed when searching
> for available plugins.
>
> *dynamic plugins - Registering a repository and searching for available plugins will list possible candidates for
> extending the application. The plugins may be added and removed from the application. After adding a plugin to the
> application, it may enabled or disabled. It's meta data may also be viewed. Plugins contained in the local ./bin
> directory are immediately available, but should not be included in the ServiceConnectors list.
>
> Other possibilities include managing plugins by categories and management by version,
>
>
>
> I needed to add an interface for the mono-addins extension type and to be able to send the plugins our main
> IConfigSource. It should be possible to use the existing IServiceConnector for this, but it would make several changes
> to the existing framework - such as eliminating the ServiceConnectors line in the Robust.ini and eliminating the
> parametrized constructor in existing work. I opted to add the interface instead, at least for the prototype. For my
> work, I would have no problems breaking the current framework to use the single interface, but I won't make that call on
> my own. And I have no issues with using the specific interface for dynamic plugins either. It works OK, The only
> drawback that I have encountered so-far is this: you cannot add a dynamic plugin to the ServiceConnectors list in the
> ini or they will try to load twice.
>
> The work was done in two stages. First was the support for modular configuration. The virtual methods added to
> ServerConnector are related to this.
>
> The second stage was adding the support for plugins.
>
>
> I have been merging master with this as of f7dcd3300837f Fri Oct 19 03:12:58 2012 +0100 .
>
>
> ** Testing:
>
> get the code: OpenSim repo - connector_plugin branch
>
> Build the code as usual and run an instance of Robust on a convenient port. Note RegistryLocation and ConfigDirectory in
> the [Startup] section of your Robust.ini and set them appropriately.
>
> see the commands with "help repository" and "help plugin"
>
> I have setup an example repository that can be used for testing. Add it with...
>
> repo add http://bluewallvirtual.com/plugins
>
>
> Then, look for available plugins with...
>
> plugin list available
>
>
> Then, add a plugin...
>
> plugin add 0
>
>
> Then, you can enable the plugin to have it get the bootstrap ini...
>
> plugin enable 0
>
>
> At this point, the plugin will be disabled by configuration, so disable it in the console...
>
> plugin disable 0
>
>
> Now find your new configuration file and edit it for your needs. When you have finished editing your ini enable the
> plugin...
>
> plugin enable 0
>
>
> Now you should be able to use it. You can also see the meta data...
>
> plugin info 0
>
>
> You can check the state of your installed plugins...
>
> plugin list installed
>
> Your plugin will show: 0) [ ] ...
>
> plugin disable 0
> plugin list installed
>
> Your plugin will show: 0) [X] ...
>
>
> You can remove the plugin...
>
> plugin remove 0
>
>
>
> Source for the example plugins is at http://github.com/BlueWall
> Config file: http://bluewallvirtual.com/configs/SlipStream.Example.xml
>
> To make a repository...
>
> 1) Prepare a place to serve your configs and repository on your web server
> 2) Edit the meta data and the ConfigURL property in SlipStreamConnector.cs
> 3) Build your plugin in the addon-modules directory like a region module
> 4) Pack the dll: mautil p bin/MyPlugin.dll
> 5) Copy all packed files to a directory, then cd to that directory
> 6) Build the repo: mautil rb ./
> 7) Copy the directory contents to your repository on your web server
> 8) Copy config xml to your config url on your web server
>
> Clean your registry by deleting the directory pointed to in "RegistryLocation" in your Robust.ini. You're all set.
>
> Hopefully this covers enough ground to get started. I think there would be no issues with existing code moving it to
> master after some discussion, then we could get more people to look at it and iron out any wrinkles. When it is stable,
> then we can use the framework in the region server (which is about 85-90% there) to have dynamic region modules too in
> our next release.
>
> Thanks!
> -BlueWall
>
>
>
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
>
--
Justin Clark-Casey (justincc)
OSVW Consulting
http://justincc.org
http://twitter.com/justincc
More information about the Opensim-dev
mailing list