Exemple #1
0
 public static void Notify(RoadEvent e, object sender, EventArgs eArgs)
 {
     if (e == null)
     {
         throw new ArgumentNullException("e", "No event type given!");
     }
     if (sender != null)
     {
         try
         {
             RoadEventHandlerCollection col = null;
             GameEventMgr.m_lock.AcquireReaderLock(3000);
             try
             {
                 col = (RoadEventHandlerCollection)GameEventMgr.m_GameObjectEventCollections[sender];
             }
             finally
             {
                 GameEventMgr.m_lock.ReleaseReaderLock();
             }
             if (col != null)
             {
                 col.Notify(e, sender, eArgs);
             }
         }
         catch (ApplicationException ex)
         {
             LogProvider.Default.Error("Failed to notify local event handler!", ex);
         }
     }
     GameEventMgr.m_GlobalHandlerCollection.Notify(e, sender, eArgs);
 }
Exemple #2
0
 public static void Notify(RoadEvent e, object sender, EventArgs eArgs)
 {
     if (e == null)
     {
         throw new ArgumentNullException("e", "No event type given!");
     }
     if (sender != null)
     {
         try
         {
             RoadEventHandlerCollection roadEventHandlerCollection = null;
             GameEventMgr.m_lock.AcquireReaderLock(3000);
             try
             {
                 roadEventHandlerCollection = (RoadEventHandlerCollection)GameEventMgr.m_GameObjectEventCollections[sender];
             }
             finally
             {
                 GameEventMgr.m_lock.ReleaseReaderLock();
             }
             if (roadEventHandlerCollection != null)
             {
                 roadEventHandlerCollection.Notify(e, sender, eArgs);
             }
         }
         catch (ApplicationException exception)
         {
             if (GameEventMgr.log.IsErrorEnabled)
             {
                 GameEventMgr.log.Error("Failed to notify local event handler!", exception);
             }
         }
     }
     GameEventMgr.m_GlobalHandlerCollection.Notify(e, sender, eArgs);
 }
Exemple #3
0
 public static void RemoveAllHandlers(object obj, RoadEvent e)
 {
     if (obj == null)
     {
         throw new ArgumentNullException("obj", "No object given!");
     }
     if (e == null)
     {
         throw new ArgumentNullException("e", "No event type given!");
     }
     try
     {
         GameEventMgr.m_lock.AcquireReaderLock(3000);
         try
         {
             RoadEventHandlerCollection col = (RoadEventHandlerCollection)GameEventMgr.m_GameObjectEventCollections[obj];
             if (col != null)
             {
                 col.RemoveAllHandlers(e);
             }
         }
         finally
         {
             GameEventMgr.m_lock.ReleaseReaderLock();
         }
     }
     catch (ApplicationException ex)
     {
         LogProvider.Default.Error("Failed to remove local event handlers!", ex);
     }
 }
Exemple #4
0
 public static void RemoveAllHandlers(object obj, RoadEvent e)
 {
     if (obj == null)
     {
         throw new ArgumentNullException("obj", "No object given!");
     }
     if (e == null)
     {
         throw new ArgumentNullException("e", "No event type given!");
     }
     try
     {
         GameEventMgr.m_lock.AcquireReaderLock(3000);
         try
         {
             RoadEventHandlerCollection roadEventHandlerCollection = (RoadEventHandlerCollection)GameEventMgr.m_GameObjectEventCollections[obj];
             if (roadEventHandlerCollection != null)
             {
                 roadEventHandlerCollection.RemoveAllHandlers(e);
             }
         }
         finally
         {
             GameEventMgr.m_lock.ReleaseReaderLock();
         }
     }
     catch (ApplicationException exception)
     {
         if (GameEventMgr.log.IsErrorEnabled)
         {
             GameEventMgr.log.Error("Failed to remove local event handlers!", exception);
         }
     }
 }
Exemple #5
0
 private static void AddHandler(object obj, RoadEvent e, RoadEventHandler del, bool unique)
 {
     if (obj == null)
     {
         throw new ArgumentNullException("obj", "No object given!");
     }
     if (e == null)
     {
         throw new ArgumentNullException("e", "No event type given!");
     }
     if (del == null)
     {
         throw new ArgumentNullException("del", "No event handler given!");
     }
     if (!e.IsValidFor(obj))
     {
         throw new ArgumentException("Object is not valid for this event type", "obj");
     }
     try
     {
         GameEventMgr.m_lock.AcquireReaderLock(3000);
         try
         {
             RoadEventHandlerCollection roadEventHandlerCollection = (RoadEventHandlerCollection)GameEventMgr.m_GameObjectEventCollections[obj];
             if (roadEventHandlerCollection == null)
             {
                 roadEventHandlerCollection = new RoadEventHandlerCollection();
                 LockCookie lockCookie = GameEventMgr.m_lock.UpgradeToWriterLock(3000);
                 try
                 {
                     GameEventMgr.m_GameObjectEventCollections[obj] = roadEventHandlerCollection;
                 }
                 finally
                 {
                     GameEventMgr.m_lock.DowngradeFromWriterLock(ref lockCookie);
                 }
             }
             if (unique)
             {
                 roadEventHandlerCollection.AddHandlerUnique(e, del);
             }
             else
             {
                 roadEventHandlerCollection.AddHandler(e, del);
             }
         }
         finally
         {
             GameEventMgr.m_lock.ReleaseReaderLock();
         }
     }
     catch (ApplicationException exception)
     {
         if (GameEventMgr.log.IsErrorEnabled)
         {
             GameEventMgr.log.Error("Failed to add local event handler!", exception);
         }
     }
 }
Exemple #6
0
        /// <summary>
        /// Removes a single event handler from an object.
        /// You need to have registered the event before being
        /// able to remove it.
        /// </summary>
        /// <param name="obj">The object that needs to be the sender of events</param>
        /// <param name="e">The event type from which to deregister</param>
        /// <param name="del">The event handler to deregister for this event type</param>
        /// <exception cref="ArgumentNullException">If one of the parameters is null</exception>
        public static void RemoveHandler(object obj, RoadEvent e, RoadEventHandler del)
        {
            //Test the parameters
            if (obj == null)
            {
                throw new ArgumentNullException("obj", "No object given!");
            }
            if (e == null)
            {
                throw new ArgumentNullException("e", "No event type given!");
            }
            if (del == null)
            {
                throw new ArgumentNullException("del", "No event handler given!");
            }

            try
            {
                m_lock.AcquireReaderLock(TIMEOUT);
                try
                {
                    RoadEventHandlerCollection col = (RoadEventHandlerCollection)m_GameObjectEventCollections[obj];
                    if (col != null)
                    {
                        col.RemoveHandler(e, del);
                    }
                }
                finally
                {
                    m_lock.ReleaseReaderLock();
                }
            }
            catch (ApplicationException ex)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error("Failed to remove local event handler!", ex);
                }
            }
        }
Exemple #7
0
        /// <summary>
        /// Notifies all global and local event handlers of the occurance
        /// of a specific event type with some event arguments!
        /// </summary>
        /// <param name="e">The event type that occured</param>
        /// <param name="sender">The sender of this event</param>
        /// <param name="eArgs">The event arguments</param>
        /// <exception cref="ArgumentNullException">If no event type given</exception>
        /// <remarks>Overwrite the EventArgs class to set own arguments</remarks>
        public static void Notify(RoadEvent e, object sender, EventArgs eArgs)
        {
            //Test the parameters
            if (e == null)
            {
                throw new ArgumentNullException("e", "No event type given!");
            }

            //Notify the local event handlers first
            if (sender != null)
            {
                try
                {
                    RoadEventHandlerCollection col = null;
                    m_lock.AcquireReaderLock(TIMEOUT);
                    try
                    {
                        col = (RoadEventHandlerCollection)m_GameObjectEventCollections[sender];
                    }
                    finally
                    {
                        m_lock.ReleaseReaderLock();
                    }
                    if (col != null)
                    {
                        col.Notify(e, sender, eArgs);
                    }
                }
                catch (ApplicationException ex)
                {
                    if (log.IsErrorEnabled)
                    {
                        log.Error("Failed to notify local event handler!", ex);
                    }
                }
            }
            //Notify the global ones later
            m_GlobalHandlerCollection.Notify(e, sender, eArgs);
        }
Exemple #8
0
        /// <summary>
        /// Registers a single local event handler.
        /// Local event handlers will only be called if the
        /// "sender" parameter in the Notify method equals
        /// the object for which a local event handler was
        /// registered.
        /// </summary>
        /// <remarks>
        /// Certain events will never have a local event handler.
        /// This happens if the Notify method is called without
        /// a sender parameter for example!
        /// </remarks>
        /// <param name="obj">The object that needs to be the sender of events</param>
        /// <param name="e">The event type to register for</param>
        /// <param name="del">The event handler to register for this event type</param>
        /// <param name="unique">Flag wether event shall be added unique or not</param>
        /// <exception cref="ArgumentNullException">If one of the parameters is null</exception>
        private static void AddHandler(object obj, RoadEvent e, RoadEventHandler del, bool unique)
        {
            //Test the parameters
            if (obj == null)
                throw new ArgumentNullException("obj", "No object given!");
            if (e == null)
                throw new ArgumentNullException("e", "No event type given!");
            if (del == null)
                throw new ArgumentNullException("del", "No event handler given!");

            if (!e.IsValidFor(obj))
                throw new ArgumentException("Object is not valid for this event type", "obj");

            try
            {
                m_lock.AcquireReaderLock(TIMEOUT);
                try
                {
                    RoadEventHandlerCollection col = (RoadEventHandlerCollection)m_GameObjectEventCollections[obj];
                    if (col == null)
                    {
                        col = new RoadEventHandlerCollection();
                        LockCookie lc = m_lock.UpgradeToWriterLock(TIMEOUT);
                        try
                        {
                            m_GameObjectEventCollections[obj] = col;
                        }
                        finally
                        {
                            m_lock.DowngradeFromWriterLock(ref lc);
                        }
                    }
                    if (unique)
                        col.AddHandlerUnique(e, del);
                    else
                        col.AddHandler(e, del);
                }
                finally
                {
                    m_lock.ReleaseReaderLock();
                }
            }
            catch (ApplicationException ex)
            {
                if (log.IsErrorEnabled)
                    log.Error("Failed to add local event handler!", ex);
            }
        }
Exemple #9
0
        /// <summary>
        /// Registers a single local event handler.
        /// Local event handlers will only be called if the
        /// "sender" parameter in the Notify method equals
        /// the object for which a local event handler was
        /// registered.
        /// </summary>
        /// <remarks>
        /// Certain events will never have a local event handler.
        /// This happens if the Notify method is called without
        /// a sender parameter for example!
        /// </remarks>
        /// <param name="obj">The object that needs to be the sender of events</param>
        /// <param name="e">The event type to register for</param>
        /// <param name="del">The event handler to register for this event type</param>
        /// <param name="unique">Flag wether event shall be added unique or not</param>
        /// <exception cref="ArgumentNullException">If one of the parameters is null</exception>
        private static void AddHandler(object obj, RoadEvent e, RoadEventHandler del, bool unique)
        {
            //Test the parameters
            if (obj == null)
            {
                throw new ArgumentNullException("obj", "No object given!");
            }
            if (e == null)
            {
                throw new ArgumentNullException("e", "No event type given!");
            }
            if (del == null)
            {
                throw new ArgumentNullException("del", "No event handler given!");
            }

            if (!e.IsValidFor(obj))
            {
                throw new ArgumentException("Object is not valid for this event type", "obj");
            }

            try
            {
                m_lock.AcquireReaderLock(TIMEOUT);
                try
                {
                    RoadEventHandlerCollection col = (RoadEventHandlerCollection)m_GameObjectEventCollections[obj];
                    if (col == null)
                    {
                        col = new RoadEventHandlerCollection();
                        LockCookie lc = m_lock.UpgradeToWriterLock(TIMEOUT);
                        try
                        {
                            m_GameObjectEventCollections[obj] = col;
                        }
                        finally
                        {
                            m_lock.DowngradeFromWriterLock(ref lc);
                        }
                    }
                    if (unique)
                    {
                        col.AddHandlerUnique(e, del);
                    }
                    else
                    {
                        col.AddHandler(e, del);
                    }
                }
                finally
                {
                    m_lock.ReleaseReaderLock();
                }
            }
            catch (ApplicationException ex)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error("Failed to add local event handler!", ex);
                }
            }
        }