public void RemoveEventHander(string type, NetEventHanlder handler) { EventHandleRemove remove = new EventHandleRemove { type = type, handler = handler }; eventHandlesRemove.Add(remove); }
public IEnumerator NetEventDispatcher() { while (running) { #if NET_DEBUG profileCount++; if (profileCount == 10) { if (sendCount != 0 || recvCount != 0) { Debug.LogWarning(String.Format("SEND {0:D2} in {1:D5}ms RECV {2:D2} in {3:D5}ms ST in {4:D5}ms RT in {5:D5}ms", sendCount, sendStopwatch.ElapsedMilliseconds, recvCount, recvStopwatch.ElapsedMilliseconds, sendThreadStopwatch.ElapsedMilliseconds, recvThreadStopwatch.ElapsedMilliseconds)); } sendCount = 0; recvCount = 0; sendStopwatch.Reset(); recvStopwatch.Reset(); sendThreadStopwatch.Reset(); recvThreadStopwatch.Reset(); profileCount = 0; } #endif //Debug.Log("C"); Monitor.Enter(eventHandles); if (server != null && server.eventQueue != null) { if (server.responseQueue != null) { NetRequest r; while ((r = server.responseQueue.TryDeQueue()) != null) { if ( !r.Handler(new NetEvent { Type = r.Type, Content = r.Content, Data = r.Data, Param = r.Param })) { Debug.LogError("Response Type not Match!"); } } } for (var i = (int)NetServiceChannel.Secondary; i < (int)NetServiceChannel.Count; i++) { if (server.eventQueue[i] != null) { NetEvent e; while ((e = server.eventQueue[i].TryDeQueue()) != null) { ArrayList handles = null; if (eventHandles.TryGetValue(e.Type, out handles)) { foreach (EventHandle handle in handles) { if (handle.handler(e)) { break; } } } } } } for (int i = eventHandlesRemove.Count - 1; i >= 0; i--) { EventHandleRemove remove = (EventHandleRemove)eventHandlesRemove[i]; ArrayList handles = null; if (eventHandles.TryGetValue(remove.type, out handles)) { for (int j = handles.Count - 1; j >= 0; j--) { if (((EventHandle)handles[j]).handler == remove.handler) { handles.RemoveAt(j); } } } eventHandlesRemove.RemoveAt(i); } Monitor.Exit(eventHandles); yield return(null); Monitor.Enter(eventHandles); } else { Monitor.Exit(eventHandles); yield return(new WaitForSeconds(1)); Monitor.Enter(eventHandles); } Monitor.Exit(eventHandles); } Debug.Log("Net Dispatcher Exit"); }