コード例 #1
0
        //public static void RegisterListener(object listeningObject)
        //{
        //    if (listenerLookup.ContainsKey(listeningObject))
        //        throw new ArgumentException("Supplied object has already been registered as a listener.", "listeningObject");

        //    var listeners = new List<SessionListener>();
        //    listenerLookup.Add(listeningObject, listeners);

        //    //
        //    // Find all methods decorated with TraitListenerAttributes
        //    //
        //    MethodInfo[] methodInfos = listeningObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        //    foreach (var method in methodInfos)
        //        if (method.IsDefined(typeof(SessionListenerAttribute), true))
        //        {
        //            var listenerAttribute = (SessionListenerAttribute)method.GetCustomAttributes(typeof(SessionListenerAttribute), true)[0];


        //            var listener = listenerAttribute.BroadcastingType == null
        //                ? new SessionListener(listenerAttribute.NotificationType, listeningObject, listenerAttribute.BroadcastingPath)
        //                : new SessionListener(listenerAttribute.NotificationType, listenerAttribute.BroadcastingType, listenerAttribute.Matchsession);
        //            listener.Initialize((EventHandler)Delegate.CreateDelegate(typeof(EventHandler),listeningObject, method));

        //            listeners.Add(listener);

        //            if (listener.UsePath)
        //            {
        //                var pathInfo = listener.PathInfo;
        //                if (!pathInfo.IsPathValid)
        //                    throw new ArgumentException("The path supplied to session listener was not valid.", pathInfo.PathTosession);

        //                var session = pathInfo.Rootsession;
        //                if (session != null)
        //                    RegisterPathListener(session, listener);
        //            }
        //            else
        //            {
        //                //
        //                // If we are here, we are listening for a session type to become available.
        //                //

        //                RegisterTypeListener(listener);
        //            }
        //        }
        //}


        public static void RegisterListener(object listeningObject, Action <ListenerBuilder> buildListeners)
        {
            if (listenerLookup.ContainsKey(listeningObject))
            {
                throw new ArgumentException("Supplied object has already been registered as a listener.", "listeningObject");
            }

            var listeners = new List <SessionListener>();

            listenerLookup.Add(listeningObject, listeners);


            var builder = new ListenerBuilder(listeningObject);

            buildListeners(builder);
            foreach (SessionListener listener in builder.Listeners)
            {
                listeners.Add(listener);

                if (listener.UsePath)
                {
                    var pathInfo = listener.PathInfo;
                    if (!pathInfo.IsPathValid)
                    {
                        throw new ArgumentException("The path supplied to session listener was not valid.", pathInfo.PathTosession);
                    }

                    var session = pathInfo.Rootsession;
                    if (session != null)
                    {
                        RegisterPathListener(session, listener);
                    }
                }
                else
                {
                    //
                    // If we are here, we are listening for a session type to become available.
                    //

                    RegisterTypeListener(listener);
                }
            }


            ////
            //// Find all methods decorated with TraitListenerAttributes
            ////
            //MethodInfo[] methodInfos = listeningObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            //foreach (var method in methodInfos)
            //    if (method.IsDefined(typeof(SessionListenerAttribute), true)) {
            //        var listenerAttribute = (SessionListenerAttribute)method.GetCustomAttributes(typeof(SessionListenerAttribute), true)[0];


            //        var listener = listenerAttribute.BroadcastingType == null
            //            ? new SessionListener(listenerAttribute.NotificationType, listeningObject, listenerAttribute.BroadcastingPath)
            //            : new SessionListener(listenerAttribute.NotificationType, listenerAttribute.BroadcastingType, listenerAttribute.Matchsession);
            //        listener.Initialize((EventHandler)Delegate.CreateDelegate(typeof(EventHandler), listeningObject, method));

            //        listeners.Add(listener);

            //        if (listener.UsePath) {
            //            var pathInfo = listener.PathInfo;
            //            if (!pathInfo.IsPathValid)
            //                throw new ArgumentException("The path supplied to session listener was not valid.", pathInfo.PathTosession);

            //            var session = pathInfo.Rootsession;
            //            if (session != null)
            //                RegisterPathListener(session, listener);
            //        }
            //        else {
            //            //
            //            // If we are here, we are listening for a session type to become available.
            //            //

            //            RegisterTypeListener(listener);
            //        }
            //    }
        }
コード例 #2
0
 protected virtual void OnBuildListeners(ListenerBuilder builder)
 {
 }