Aselia.Common.Hotswap.DomainManager.InitializeUserMode C# (CSharp) Method

InitializeUserMode() private method

private InitializeUserMode ( Assembly asm ) : void
asm System.Reflection.Assembly
return void
        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;
        }