Exemplo n.º 1
0
        private void FireEvents()
        {
            this._eventQueue.Switch();
            while (!this._eventQueue.isEmpty)
            {
                NetEvent    netEvent = this._eventQueue.Pop();
                INetSession session  = netEvent.session;

                if (netEvent.type == NetEvent.Type.Establish)
                {
                    session._OnEstablish();
                }
                else
                {
                    if (!this._sessionsToRemove.Contains(session) &&
                        this._idToSession.ContainsKey(session.id))                             //可能在处理时间前session已关闭
                    {
                        switch (netEvent.type)
                        {
                        case NetEvent.Type.ConnErr:
                            session._OnConnError(netEvent.error);
                            break;

                        case NetEvent.Type.Error:
                            session._OnError(netEvent.error);
                            break;

                        case NetEvent.Type.Recv:
                            session._OnRecv(netEvent.data, 0, netEvent.data.Length);
                            break;

                        case NetEvent.Type.Send:
                            session._OnSend();
                            break;
                        }
                    }
                }
                this._eventPool.Push(netEvent);
            }
        }