Example #1
0
        /// <summary>
        /// Extracts the event handler details such as event filter.
        /// </summary>
        /// <param name="eventHandler">The event handler delegate.</param>
        /// <param name="eventFilter">The event filter.</param>
        private void ExtractEventHandlerDetails(ref Delegate eventHandler, ref IEventFilter eventFilter)
        {
            if (eventHandler == null || eventHandler.Method == null)
            {
                return;
            }

            // handle attached event filters, if any
            if (eventHandler.Target is IFilteredEventHandler)
            {
                var filtered = eventHandler.Target as IFilteredEventHandler;
                eventHandler = filtered.EventHandler;
                eventFilter  = filtered.EventFilter;
            }

            // handle special case: session-bound events
            var parameters = eventHandler.Method.GetParameters();

            if (parameters.Length == 2 && typeof(SessionEventArgs).IsAssignableFrom(parameters[1].ParameterType))
            {
                // if SessionEventFilter is already attached, do not create a new filter
                if (eventFilter == null || !eventFilter.Contains <SessionEventFilter>())
                {
                    var sessionFilter = new SessionEventFilter(_sessionID);
                    eventFilter = sessionFilter.Combine(eventFilter);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Extracts the event handler details such as event filter.
        /// </summary>
        /// <param name="eventHandler">The event handler delegate.</param>
        /// <param name="eventFilter">The event filter.</param>
        private void ExtractEventHandlerDetails(ref Delegate eventHandler, ref IEventFilter eventFilter)
        {
            if (eventHandler == null || eventHandler.Method == null)
            {
                return;
            }

            // handle attached event filters, if any
            if (eventHandler.Target is IFilteredEventHandler)
            {
                var filtered = eventHandler.Target as IFilteredEventHandler;
                eventHandler = filtered.EventHandler;
                eventFilter = filtered.EventFilter;
            }

            // handle special case: session-bound events
            var parameters = eventHandler.Method.GetParameters();
            if (parameters.Length == 2 && typeof(SessionEventArgs).IsAssignableFrom(parameters[1].ParameterType))
            {
                // if SessionEventFilter is already attached, do not create a new filter
                if (eventFilter == null || !eventFilter.Contains<SessionEventFilter>())
                {
                    var sessionFilter = new SessionEventFilter(_sessionID);
                    eventFilter = sessionFilter.Combine(eventFilter);
                }
            }
        }