public override object HandleMethodCall(IMethodCallMessage mcm) { if (mcm.IsSubscribeToEvent()) { var eventName = mcm.GetEventName(); using (_locker.Lock()) { var delegates = _events[eventName]; if (delegates.Count == 0) { _messagePublisher.Publish(new SubscribeToEventCommand { EventName = eventName }); } delegates.Add(( Delegate )mcm.Args[0]); } } else if (mcm.IsUnsubscribeFromEvent()) { var eventName = mcm.GetEventName(); using (_locker.Lock()) { var delegates = _events[eventName]; if (delegates.Remove(( Delegate )mcm.Args[0]) && delegates.Count == 0) { _messagePublisher.Publish(new UnsubscribeFromEventCommand { EventName = eventName }); } } } else { return(Successor?.HandleMethodCall(mcm)); } return(null); }
public static bool IsEvent(this IMethodCallMessage msm) { return(msm.IsSubscribeToEvent() || msm.IsUnsubscribeFromEvent()); }