コード例 #1
0
        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);
        }
コード例 #2
0
 public static bool IsEvent(this IMethodCallMessage msm)
 {
     return(msm.IsSubscribeToEvent() || msm.IsUnsubscribeFromEvent());
 }