Exemplo n.º 1
0
 // Message相关
 void PushMessage(KMessage msg)
 {
     lock (m_lMessageWait)
     {
         m_lMessageWait.AddLast(msg);
     }
 }
Exemplo n.º 2
0
        // 逻辑处理相关
        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;
                }
            }
        }