コード例 #1
0
 private void dispatchEventToListener(Event <T> @event, ListenerWrapper wrapper, bool forced)
 {
     if (@event == null)
     {
         //should not happen, widely used during tests
         return;
     }
     eventThread.queue(() =>
     {
         if (wrapper.alive || forced)
         {
             try
             {
                 @event.applyTo(wrapper.listener);
             }
             catch (Exception e) when(e is Exception || e is Exception)
             {
                 log.Error("Exception caught while executing event on custom code: " + e.Message);
                 if (log.IsDebugEnabled)
                 {
                     log.Debug(" - " + e.StackTrace);
                 }
             }
         }
     });
 }
コード例 #2
0
        /// <summary>
        /// Invokes <see cref="NetworkManager.PollMessage(NetworkListener)"/>
        /// on the provided handle to <see cref="NetworkManager"/>.
        /// </summary>
        /// <param name="managerGCHandle">
        ///     <see cref="GCHandle"/> to <see cref="NetworkManager"/> as <see cref="IntPtr"/>.
        /// </param>
        /// <param name="cppListener">
        ///     Pointer to the NetworkListener object on the C++ side.
        /// </param>
        internal static unsafe bool InvokePollMessage(
            IntPtr managerGCHandle,
            void *cppListener)
        {
            var manager =
                GCHandle.FromIntPtr(managerGCHandle).Target as NetworkManagerWrapper;
            ListenerWrapper listenerWrapper = new ListenerWrapper(cppListener);

            return(manager.manager_.PollMessage(listenerWrapper));
        }
コード例 #3
0
        public bool addListener(GListener listener)
        {
            ListenerWrapper wrapper = new ListenerWrapper(listener);
            bool            result  = _raw.addListener(wrapper);

            if (result)
            {
                _wrappers[listener] = wrapper;
            }
            return(result);
        }
コード例 #4
0
        public void AddEvent(int key, EventListener listener)
        {
            if (!m_EventDict.TryGetValue(key, out ListenerWrapper wrapper))
            {
                wrapper = new ListenerWrapper(key);

                m_EventDict.Add(key, wrapper);
            }

            wrapper.Add(listener);
        }
コード例 #5
0
        public bool removeListener(GListener listener)
        {
            bool result = false;

            if (_wrappers.ContainsKey(listener))
            {
                ListenerWrapper wrapper = _wrappers[listener];
                result = _raw.removeListener(wrapper);
                _wrappers.Remove(listener);
            }
            return(result);
        }
コード例 #6
0
        public virtual void AddListener(T listener, Event <T> startEvent)
        {
            lock (this)
            {
                if (listeners.ContainsKey(listener))
                {
                    return;
                }

                ListenerWrapper wrapper = new ListenerWrapper(this, listener);
                listeners[listener] = wrapper;

                this.dispatchEventToListener(startEvent, wrapper, true);
            }
        }
コード例 #7
0
        public virtual void removeListener(T listener, Event <T> endEvent)
        {
            lock (this)
            {
                ListenerWrapper wrapper = listeners.GetValueOrNull(listener);
                if (wrapper == null)
                {
                    //wrapper does not exists
                    return;
                }

                listeners.Remove(listener);
                wrapper.alive = false;

                this.dispatchEventToListener(endEvent, wrapper, true);
            }
        }