private int NetMainLoop() { int iRet = 0; if (null == m_TgcpHandle) { return((int)TGCP_ERROR.TGCP_EVENT_TGCP_IS_NULL); } iRet = m_TgcpHandle.Update(ref m_events); if (iRet < 0) { //连接失败处理 NotifyDisconnected((TGCP_ERROR)iRet); return(iRet); } for (uint i = 0; i < m_events.event_num; ++i) { if (m_events.event_num > 0) { //判断是否有数据可读 if ((m_events.events & (uint)eTGCPEvent.TGCP_EVENT_DATA_IN) > 0) { //读取网络数据 int len = m_recv.Length; iRet = m_TgcpHandle.Recv(m_recv, ref len, 0); if (0 != iRet) { return(iRet); } //数据解包 MsgData msgdata = new MsgData(); msgdata.Set(m_recv, len); msgdata.UnPack(); if (msgdata.Eno != 0 && this.onPkgError != null) { this.onPkgError(msgdata.Cmd, msgdata.Eno); } else { Log.info("收到协议:" + msgdata.Cmd); m_RecvQueue.Enqueue(msgdata); m_networkTimeoutMonitor.ReceivePkg(); } } } } //连接成功 if ((m_events.events & (uint)eTGCPEvent.TGCP_EVENT_DATA_OUT) > 0) { //表示网络层异步连接成功 if (false == m_isConnect) { Log.info("---------NetMainLoop() m_isConnect suc---------------"); NotifyConnected(); m_isConnect = true; EventManager.Send(EventType_Net.NET_CONNECTED); Log.info("Net_Conned"); } if (m_netState == NetState.Connected) { SendInternal(); } } //服务器主动关闭会话 if ((m_events.events & (uint)eTGCPEvent.TGCP_EVENT_SSTOPED) > 0) { m_isConnect = true; Log.info("server stop connection"); if (m_netState == NetState.Connected) { NotifyDisconnected(TGCP_ERROR.TGCP_EVENT_SOCKET_DISCONNECT); } } //正在排队 if ((m_events.events & (uint)eTGCPEvent.TGCP_EVENT_WAITING) > 0) { Log.info("server TGCP_EVENT_WAITING", "Net.Mainloop"); NotifyDisconnected(TGCP_ERROR.TGCP_EVENT_WAITING); } //服务器爆满通知 if ((m_events.events & (uint)eTGCPEvent.TGCP_EVENT_SVR_IS_FULL) > 0) { Log.info("server TGCP_EVENT_SVR_IS_FULL", "Net.Mainloop"); NotifyDisconnected(TGCP_ERROR.TGCP_EVENT_SVR_IS_FULL); } return(iRet); }