예제 #1
0
        protected override void Receive(MsgData message)
        {
            string msg = message.UnPack();

            m_value += msg + "\n";

            if (msg == "stop")
            {
                Console.WriteLine(m_value);
                Exit();
            }
        }
예제 #2
0
    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);
    }