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); } } } }); }
/// <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)); }
public bool addListener(GListener listener) { ListenerWrapper wrapper = new ListenerWrapper(listener); bool result = _raw.addListener(wrapper); if (result) { _wrappers[listener] = wrapper; } return(result); }
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); }
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); }
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); } }
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); } }