private void InitializeUserMode(Assembly asm)
{
Dictionary<Modes, ReceivedUserModeEventHandler> addUserModeHandlers = new Dictionary<Modes, ReceivedUserModeEventHandler>();
Dictionary<Modes, ReceivedUserModeEventHandler> removeUserModeHandlers = new Dictionary<Modes, ReceivedUserModeEventHandler>();
Dictionary<Modes, UserModeAttribute> userModeAttrs = new Dictionary<Modes, UserModeAttribute>();
IEnumerable<Type> types = from x in asm.GetTypes()
where x.GetInterfaces().Contains(typeof(IChannelMode))
select x;
foreach (Type t in types)
{
try
{
UserModeAttribute[] attrs = t.GetCustomAttributes(typeof(UserModeAttribute), false).Cast<UserModeAttribute>().ToArray();
if (attrs.Length < 1 || userModeAttrs.ContainsKey(attrs[0].Mode))
{
continue;
}
IUserMode command = (IUserMode)t.GetConstructor(Type.EmptyTypes).Invoke(new object[0]);
addUserModeHandlers.Add(attrs[0].Mode, command.AddHandler);
removeUserModeHandlers.Add(attrs[0].Mode, command.RemoveHandler);
userModeAttrs.Add(attrs[0].Mode, attrs[0]);
}
catch
{
Console.WriteLine("Error loading user mode handler {0}.", t);
}
}
AddUserModeHandlers = addUserModeHandlers;
RemoveUserModeHandlers = removeUserModeHandlers;
UserModeAttrs = userModeAttrs;
}