Beispiel #1
0
        public static RegisteredListener RegisterListener(object obj, IPlugin plugin)
        {
            var registeredListener = new RegisteredListener(obj, plugin);

            if (PluginListeners.TryGetValue(plugin, out var list))
            {
                list.Add(registeredListener);
            }
            else
            {
                PluginListeners.Add(plugin, new HashSet <RegisteredListener> {
                    registeredListener
                });
            }
            foreach (var(type, listeners) in registeredListener.Listeners)
            {
                foreach (var listener in listeners)
                {
                    if (Events.TryGetValue(type, out var dict))
                    {
                        dict[listener.Priority].Add(listener);
                    }
                    else
                    {
                        ConsoleFunctions.WriteErrorLine($"Type {type.Name} is not registered!");
                        break;
                    }
                }
            }
            return(registeredListener);
        }
Beispiel #2
0
        public static MessageListenerFilterRegistrationResult Register(Action <WindowMessageEventArgs> callback)
        {
            lock (_registerLock)
            {
                uint message = 0;
                RegisteredListener package = _packages.FirstOrDefault(x => x.TryRegister(callback, out message));

                if (package == null)
                {
                    package = new RegisteredListener();

                    if (!package.TryRegister(callback, out message))
                    {
                        // this should never happen
                        throw new ShellException(LocalizedMessages.MessageListenerFilterUnableToRegister);
                    }

                    _packages.Add(package);
                }

                return(new MessageListenerFilterRegistrationResult(
                           package.Listener.WindowHandle,
                           message));
            }
        }
Beispiel #3
0
 public void Unregister(RegisteredListener listener)
 {
     if (handlerslots[listener.Priority].Remove(listener))
     {
         handlers = null;
     }
 }
Beispiel #4
0
 public void Register(RegisteredListener listener)
 {
     if (handlerslots[listener.Priority].Contains(listener))
     {
         throw new Exception("This listener is already registered to priority " + listener.Priority.ToString());
     }
     handlers = null;
     handlerslots[listener.Priority].Add(listener);
 }
Beispiel #5
0
 public static void UnregisterListener(RegisteredListener listener)
 {
     PluginListeners[listener.Plugin].Remove(listener);
     foreach (var(type, listeners) in listener.Listeners)
     {
         foreach (var methodListener in listeners)
         {
             Events[type][methodListener.Priority].Remove(methodListener);
         }
     }
 }
Beispiel #6
0
        public static void Unregister(IntPtr listenerHandle, uint message)
        {
            lock (_registerLock)
            {
                RegisteredListener package = _packages.FirstOrDefault(x => x.Listener.WindowHandle == listenerHandle);
                if (package == null || !package.Callbacks.Remove(message))
                {
                    throw new ArgumentException(LocalizedMessages.MessageListenerFilterUnknownListenerHandle);
                }

                if (package.Callbacks.Count == 0)
                {
                    package.Listener.Dispose();
                    _packages.Remove(package);
                }
            }
        }
		public static MessageListenerFilterRegistrationResult Register(Action<WindowMessageEventArgs> callback) {
			lock (_registerLock) {
				uint message = 0;
				var package = _packages.FirstOrDefault(x => x.TryRegister(callback, out message));
				if (package == null) {
					package = new RegisteredListener();
					if (!package.TryRegister(callback, out message)) {   // this should never happen
						throw new ShellException(LocalizedMessages.MessageListenerFilterUnableToRegister);
					}
					_packages.Add(package);
				}

				return new MessageListenerFilterRegistrationResult(
					package.Listener.WindowHandle,
					message);
			}
		}
	public static void Unregister(RegisteredListener listener){
		if (_Instance.listeners.Contains(listener)){
			_Instance.listeners.Remove(listener);
			_Instance.numListeners[(int)listener.type]--;
		}		
	}
	public static void Register(RegisteredListener listener){
		if (_Instance == null) CreateInstance();
		if (!_Instance.listeners.Contains(listener)){
			_Instance.listeners.Add(listener);
			_Instance.numListeners[(int)listener.type]++;
		}
	}
Beispiel #10
0
 public MethodListener(EventPriority priority, MethodInfo method, RegisteredListener listener)
 {
     Priority = priority;
     Method   = method;
     Listener = listener;
 }
Beispiel #11
0
        public static Dictionary <Type, List <MethodListener> > GetListeners(object obj, RegisteredListener listener)
        {
            var result = new Dictionary <Type, List <MethodListener> >();

            foreach (var method in obj.GetType().GetMethods(
                         BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic))
            {
                foreach (var attribute1 in method.GetCustomAttributes(typeof(EListener)))
                {
                    var attribute = (EListener)attribute1;
                    if (Events.ContainsKey(attribute.EventType))
                    {
                        if (result.TryGetValue(attribute.EventType, out var val))
                        {
                            val.Add(new MethodListener(attribute.Priority, method, listener));
                        }
                        else
                        {
                            result.Add(attribute.EventType,
                                       new List <MethodListener>()
                            {
                                new MethodListener(attribute.Priority, method, listener)
                            });
                        }
                    }
                    else
                    {
                        ConsoleFunctions.WriteWarningLine($"{attribute.EventType.FullName} is not registered!");
                    }
                }
            }

            return(result);
        }