Example #1
0
        public void RemoveEventHander(string type, NetEventHanlder handler)
        {
            EventHandleRemove remove = new EventHandleRemove {
                type = type, handler = handler
            };

            eventHandlesRemove.Add(remove);
        }
Example #2
0
    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");
    }