public void ListenerWithMessageInheritance() { MessageListener listener = new MessageListener(); bool removed = false; Action <ListenerWrapper> remove = (m) => { removed = true; }; ListenerWrapper wrapper = new ListenerWrapper(listener, remove, true, true); Assert.That(wrapper, Is.Not.Null); Assert.That(wrapper.Count, Is.EqualTo(1)); Assert.That(removed, Is.False); Assert.That(wrapper.TryDispatch <Message>(new Message()), Is.True); Assert.That(wrapper.TryDispatch <Message>(new InheritedMessage()), Is.True); Assert.That(wrapper.TryDispatch <InheritedMessage>(new InheritedMessage()), Is.True); Assert.That(wrapper.TryDispatch <DifferentMessage>(new DifferentMessage()), Is.False); Assert.That(wrapper.ListenerInstance, Is.EqualTo(listener)); }
private bool TryGetListenerWrapperByListener(object listener, out ListenerWrapper listenerWrapper) { lock (syncLock) listenerWrapper = listeners.SingleOrDefault(x => x.ListenerInstance == listener); return(listenerWrapper != null); }
public void AddListener(object listener, bool holdStrongReference, bool supportMessageInheritance) { lock (syncLock) { if (ContainsListener(listener)) { return; } var listenerWrapper = new ListenerWrapper(listener, RemoveListenerWrapper, holdStrongReference, supportMessageInheritance); if (listenerWrapper.Count == 0) { throw new ArgumentException("IListener<T> is not implemented", "listener"); } listeners.Add(listenerWrapper); } }
private void RemoveListenerWrapper(ListenerWrapper listenerWrapper) { lock (syncLock) listeners.Remove(listenerWrapper); }