Ejemplo n.º 1
0
    static int RecvDataCount(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        NetworkProfiler obj  = (NetworkProfiler)LuaScriptMgr.GetNetObjectSelf(L, 1, "NetworkProfiler");
        long            arg0 = (long)LuaScriptMgr.GetNumber(L, 2);

        obj.RecvDataCount(arg0);
        return(0);
    }
Ejemplo n.º 2
0
    private void TCPReadCallBack(IAsyncResult ar)
    {
        //lock(m_stream)
        {
            m_totalBytesRead = m_stream.EndRead(ar);
            m_profiler.RecvDataCount(m_totalBytesRead);
        }

        m_processed = 0;
        _recvPacks.Clear();

        if (m_totalBytesRead > 0)
        {
            int processed = 0;
            while ((processed = DecodeBuffer(m_buffer, ref _recvPacks)) > 0)
            {
                m_processed += processed;
                if (m_totalBytesRead == m_processed)
                {
                    break;
                }
            }

            if (_recvPacks.Count != 0)
            {
                foreach (Pack pack in _recvPacks)
                {
                    var msgID = (fogs.proto.msg.MsgID)pack.MessageID;
                    //ErrorDisplay.Instance.HandleLog("Receive msg:" + msgID, "TCPReadCallBack", LogType.Log);
                }

                lock (m_MsgQueue)
                {
                    if (_recvPacks.Count != 0)
                    {
                        m_MsgQueue.AddRange(_recvPacks);
                    }
                }
            }
            AsyncRead();
        }
        else
        {
            if (m_type != Type.eVirtualServer)
            {
                ErrorDisplay.Instance.HandleLog(m_type + " Client: connection is closed, can not read data.", "", LogType.Error);
            }
        }
    }
Ejemplo n.º 3
0
    private void TCPReadCallBack(IAsyncResult ar)
    {
        //lock(m_stream)
        {
            m_totalBytesRead = m_stream.EndRead(ar);
            m_profiler.RecvDataCount(m_totalBytesRead);
        }

        m_readTimeCounter = 0.0f;

        m_processed = 0;
        _recvPacks.Clear();

        if (m_totalBytesRead > 0)
        {
            m_beginRead = false;

            int processed = 0;
            while ((processed = DecodeBuffer(m_buffer, ref _recvPacks)) > 0)
            {
                m_processed += processed;
                if (m_totalBytesRead == m_processed)
                {
                    break;
                }
            }

            if (_recvPacks.Count != 0)
            {
                foreach (Pack pack in _recvPacks)
                {
                    long  now   = System.DateTime.Now.Ticks;
                    MsgID msgID = (MsgID)pack.MessageID;
                    if (msgID == MsgID.GameMsgID)
                    {
                        GameMsg msg = Serializer.Deserialize <GameMsg>(new MemoryStream(pack.buffer));

                        List <Player> players = GameSystem.Instance.mClient.mPlayerManager.m_Players;
                        Player        sender  = players.Find((Player player) => { return(player.m_roomPosId == msg.senderID); });

                        GameMatch match = GameSystem.Instance.mClient.mCurMatch;
                        if (match == null)
                        {
                            break;
                        }

                        if (sender == null && match is GameMatch_PVP)
                        {
                            Debug.LogError("Can not find sender: " + msg.senderID + " for command: " + msg.eState);
                            break;
                        }
                        {
                            /*
                             * SimulateCommand cmd = match.GetSmcCommandByGameMsg(sender, msg);
                             * if( cmd != null && sender.m_smcManager != null )
                             * {
                             *      if( cmd is SMC_BackCompete || cmd is SMC_BackBlock )
                             *              Debug.Log("SMC: " + cmd + " cnt: " + _recvPacks.Count );
                             *      NetworkManager nm = GameSystem.Instance.mNetworkManager;
                             *      double dConsumeTime = (DateTime.Now.Ticks - msg.curTime) * 0.0001;
                             *      if( dConsumeTime > 50.0f )
                             *      {
                             *              lock(m_log)
                             *              {
                             *                      m_log = "Command: " + cmd.m_state + " time consume: " + string.Format("{0:f4}", dConsumeTime);
                             *              }
                             *      }
                             * }
                             */
                        }
                    }
                    //心跳包的立即回发
                    if (msgID == MsgID.HeartbeatID)
                    {
                        Heartbeat data = Serializer.Deserialize <Heartbeat>(new MemoryStream(pack.buffer));
                        GameSystem.mTime = (long)data.server_time + 1;
                        //检查是否加速外挂作弊
                        if (CheatingDeath.Instance.mAntiSpeedUp.m_beginWatch)
                        {
                            //Debug.LogWarning(string.Format("local=>{0:f4} server=>{1:f4} diff=>{2:f4} ",
                            //    CheatingDeath.Instance.mAntiSpeedUp.m_clientTime, data.server_time,
                            //     CheatingDeath.Instance.mAntiSpeedUp.m_clientTime - data.server_time));
                            data.server_time = CheatingDeath.Instance.mAntiSpeedUp.m_clientTime;
                            ErrorDisplay.Instance.HandleLog("watch time: " + data.server_time, "watch", LogType.Log);

                            //System.DateTime timenow = System.DateTime.Now;
                            //string strLog = string.Format("({0:D2}:{1:D2}:{2:D2}.{3:D3})", timenow.Hour, timenow.Minute, timenow.Second, timenow.Millisecond);
                            //ErrorDisplay.Instance.HandleLog("system time: " + strLog, "watch", LogType.Log);
                        }
                        else
                        {
                            if (CheatingDeath.Instance.mAntiSpeedUp.BeginWatch(this, data.server_time))
                            {
                                ErrorDisplay.Instance.HandleLog("Begin watch: " + data.server_time, "watch", LogType.Log);
                            }
                        }
                        PlatNetwork.Instance.SendHeartbeatMsg(data);

                        //GameSystem.Instance.mNetworkManager.m_platMsgHandler.HeartbeatHandle(pack);
                    }
                    if (msgID == MsgID.GameBeginRespID)
                    {
                        GameBeginResp resp = Serializer.Deserialize <GameBeginResp>(new MemoryStream(pack.buffer));
                        GameSystem.Instance.mNetworkManager.m_dServerTime = resp.cur_time;
                        GameSystem.Instance.mNetworkManager.m_dLocalTime  = DateTime.Now.Ticks * 0.0001;
                    }
                }

                lock (m_MsgQueue)
                {
                    if (_recvPacks.Count != 0)
                    {
                        m_MsgQueue.AddRange(_recvPacks);
                    }
                }
            }

            AsyncRead();
        }
        else
        {
            if (m_type != Type.eVirtualServer)
            {
                ErrorDisplay.Instance.HandleLog(m_type + " Client: connection is closed, can not read data.", "", LogType.Error);
                m_serverDisconnectedFlag_Passive = true;
                ErrorDisplay.Instance.HandleLog(m_type + " App paused, skip this failure.", "", LogType.Log);
            }
        }
    }