// Message相关 void PushMessage(KMessage msg) { lock (m_lMessageWait) { m_lMessageWait.AddLast(msg); } }
// 逻辑处理相关 public void Tick() { KMessage[] arMsg = null; lock (m_lMessageWait) { if (m_lMessageWait.Count > 0) { arMsg = new KMessage[m_lMessageWait.Count]; m_lMessageWait.CopyTo(arMsg, 0); m_lMessageWait.Clear(); } } if (arMsg == null) { return; } foreach (KMessage msg in arMsg) { switch (msg.ID) { case KMessage.KMessageType.KMessageType_ConnectCallback: { KMessageOnConnectCallback msgConnectcallback = (KMessageOnConnectCallback)msg; if (m_Sock.Connected) { // 连接成功 m_iState = KClientNetState.KClientNet_Connected; // 开始接收操作 try { AsyncCallback callBack = new AsyncCallback(OnRecvCallback); m_Sock.BeginReceive(m_recvBuf, 0, m_iRecvBufLen, SocketFlags.None, callBack, this); } catch (SocketException e) { string strRes = String.Format("{0}:{1} ErrorCode={2}", e.ToString(), e.Message, e.ErrorCode); LogManager.LogError("KClientNet", strRes); KMessageOnError msgE = new KMessageOnError(); msgE.m_iRez = KErrorCode.KERROR_RECV_FAILED; msgE.m_iWsaRez = e.ErrorCode; PushMessage(msgE); } catch { string strRes = String.Format("error"); LogManager.LogError("KClientNet", strRes); KMessageOnError msgE = new KMessageOnError(); msgE.m_iRez = KErrorCode.KERROR_RECV_FAILED; PushMessage(msgE); } } OnConnectEnd(msgConnectcallback.m_iRez); } break; case KMessage.KMessageType.KMessageType_OnError: { // 发生了异常 KMessageOnError msgError = (KMessageOnError)msg; OnError(msgError.m_iRez, msgError.m_iWsaRez); } break; case KMessage.KMessageType.KMessageType_OnData: { KMessageOnData msgOndata = (KMessageOnData)msg; KMessageMgr.OnProtocolExecute(msgOndata.m_iMsgId, msgOndata.m_content); } break; } } }