Browse Source

Merge pull request #164 from RogueException/issues/160

Don't load modules that are already loaded
tags/1.0-rc
RogueException GitHub 8 years ago
parent
commit
75b864bfe7
1 changed files with 8 additions and 5 deletions
  1. +8
    -5
      src/Discord.Net.Commands/CommandService.cs

+ 8
- 5
src/Discord.Net.Commands/CommandService.cs View File

@@ -12,7 +12,7 @@ namespace Discord.Commands
public class CommandService public class CommandService
{ {
private readonly SemaphoreSlim _moduleLock; private readonly SemaphoreSlim _moduleLock;
private readonly ConcurrentDictionary<object, Module> _modules;
private readonly ConcurrentDictionary<Type, Module> _modules;
private readonly ConcurrentDictionary<Type, TypeReader> _typeReaders; private readonly ConcurrentDictionary<Type, TypeReader> _typeReaders;
private readonly CommandMap _map; private readonly CommandMap _map;


@@ -22,7 +22,7 @@ namespace Discord.Commands
public CommandService() public CommandService()
{ {
_moduleLock = new SemaphoreSlim(1, 1); _moduleLock = new SemaphoreSlim(1, 1);
_modules = new ConcurrentDictionary<object, Module>();
_modules = new ConcurrentDictionary<Type, Module>();
_map = new CommandMap(); _map = new CommandMap();
_typeReaders = new ConcurrentDictionary<Type, TypeReader> _typeReaders = new ConcurrentDictionary<Type, TypeReader>
{ {
@@ -100,7 +100,7 @@ namespace Discord.Commands
await _moduleLock.WaitAsync().ConfigureAwait(false); await _moduleLock.WaitAsync().ConfigureAwait(false);
try try
{ {
if (_modules.ContainsKey(moduleInstance))
if (_modules.ContainsKey(moduleInstance.GetType()))
throw new ArgumentException($"This module has already been loaded."); throw new ArgumentException($"This module has already been loaded.");


var typeInfo = moduleInstance.GetType().GetTypeInfo(); var typeInfo = moduleInstance.GetType().GetTypeInfo();
@@ -117,8 +117,11 @@ namespace Discord.Commands
} }
private Module LoadInternal(object moduleInstance, ModuleAttribute moduleAttr, TypeInfo typeInfo) private Module LoadInternal(object moduleInstance, ModuleAttribute moduleAttr, TypeInfo typeInfo)
{ {
if (_modules.ContainsKey(moduleInstance.GetType()))
return _modules[moduleInstance.GetType()];

var loadedModule = new Module(this, moduleInstance, moduleAttr, typeInfo); var loadedModule = new Module(this, moduleInstance, moduleAttr, typeInfo);
_modules[moduleInstance] = loadedModule;
_modules[moduleInstance.GetType()] = loadedModule;


foreach (var cmd in loadedModule.Commands) foreach (var cmd in loadedModule.Commands)
_map.AddCommand(cmd); _map.AddCommand(cmd);
@@ -176,7 +179,7 @@ namespace Discord.Commands
private bool UnloadInternal(object module) private bool UnloadInternal(object module)
{ {
Module unloadedModule; Module unloadedModule;
if (_modules.TryRemove(module, out unloadedModule))
if (_modules.TryRemove(module.GetType(), out unloadedModule))
{ {
foreach (var cmd in unloadedModule.Commands) foreach (var cmd in unloadedModule.Commands)
_map.RemoveCommand(cmd); _map.RemoveCommand(cmd);


Loading…
Cancel
Save