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); }
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); } } }
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); } } }