public void LoadModule(string moduleName, Action completedCallback)
{
Argument.IsNotNull("moduleName", moduleName);
Argument.IsNotNull("completedCallback", completedCallback);
var moduleInfo = GetModuleInfoByName(moduleName);
if (moduleInfo == null)
{
throw Log.ErrorAndCreateException<NotSupportedException>("Module '{0}' is not registered in this catalog", moduleName);
}
if (_loadedModules.ContainsKey(moduleName))
{
Log.Debug("Module is already loaded, invoking completed callback immediately");
completedCallback();
return;
}
if (_pendingLoads.ContainsKey(moduleName))
{
Log.Debug("Module is already being loaded, queueing completed callback");
_pendingLoads[moduleName].Enqueue(completedCallback);
return;
}
var pendingQueue = new Queue<Action>();
pendingQueue.Enqueue(completedCallback);
_pendingLoads.Add(moduleName, pendingQueue);
Log.Debug("Searching for dependent modules of module '{0}'", moduleInfo.ModuleName);
var dependencies = GetDependentModules(moduleInfo).ToList();
LoadModules(dependencies, () => DownloadModule(moduleInfo));
}