Implement plugin unloading

Plugin may be enabled and disabled on the fly.
connector_plugin
BlueWall 2012-10-10 09:35:08 -04:00
parent 08f6c8065e
commit 83073ebd03
2 changed files with 16 additions and 4 deletions

View File

@ -246,6 +246,8 @@ namespace OpenSim.Server.Base
public bool AddRepository(string repo) public bool AddRepository(string repo)
{ {
Repositories.RegisterRepository(null, repo, true); Repositories.RegisterRepository(null, repo, true);
PluginRegistry.Rebuild(null);
return true; return true;
} }

View File

@ -65,6 +65,7 @@ namespace OpenSim.Server.Base
uint Configure(IConfigSource config); uint Configure(IConfigSource config);
void Initialize(IHttpServer server); void Initialize(IHttpServer server);
void Unload();
} }
public class PluginLoader public class PluginLoader
@ -105,12 +106,17 @@ namespace OpenSim.Server.Base
a = Registry.GetAddin(args.ExtensionNode.Addin.Id); a = Registry.GetAddin(args.ExtensionNode.Addin.Id);
} }
m_log.InfoFormat("[SERVER]: Extension Change: {0}/{1}", Registry.DefaultAddinsFolder, a.Name.Replace(',', '.'));
switch(args.Change) switch(args.Change)
{ {
case ExtensionChange.Add: case ExtensionChange.Add:
connector.PluginPath = String.Format("{0}/{1}", Registry.DefaultAddinsFolder, a.Name.Replace(',', '.')); if (a.AddinFile.Contains(Registry.DefaultAddinsFolder))
{
connector.PluginPath = String.Format("{0}/{1}", Registry.DefaultAddinsFolder, a.Name.Replace(',', '.'));
}
else
{
connector.PluginPath = a.AddinFile;
}
LoadPlugin(connector); LoadPlugin(connector);
break; break;
case ExtensionChange.Remove: case ExtensionChange.Remove:
@ -127,15 +133,19 @@ namespace OpenSim.Server.Base
if(connector.Enabled) if(connector.Enabled)
{ {
server = GetServer(connector, port); server = GetServer(connector, port);
m_log.InfoFormat("[SERVER]: Path is {0}", connector.PluginPath);
connector.Initialize(server); connector.Initialize(server);
} }
else else
{
m_log.InfoFormat("[SERVER]: {0} Disabled.", connector.ConfigName); m_log.InfoFormat("[SERVER]: {0} Disabled.", connector.ConfigName);
}
} }
private void UnloadPlugin(IRobustConnector connector) private void UnloadPlugin(IRobustConnector connector)
{ {
m_log.InfoFormat("[Server]: Unloading {0}", connector.ConfigName);
connector.Unload();
} }
private IHttpServer GetServer(IRobustConnector connector, uint port) private IHttpServer GetServer(IRobustConnector connector, uint port)