From 0a6a54c527dae488999d18869e3e45a780c8d39f Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 29 九月 2018 03:28:05 +0800
Subject: [PATCH] 3974 【测试】机器人优化
---
Tool/Robot/Robot/RobotBase.py | 2 ++
Tool/Robot/Robot/RobotMgr.py | 15 ++++++++++++---
Tool/Robot/AI/AIFile/AILoginout.py | 7 ++++++-
Tool/Robot/Configuration/Config.ini | 4 +++-
Tool/Robot/ConfigurationReader/ConfigIniReader.py | 6 ++++++
Tool/Robot/framework/frame.py | 3 +++
6 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/Tool/Robot/AI/AIFile/AILoginout.py b/Tool/Robot/AI/AIFile/AILoginout.py
index 814360a..c00cfeb 100644
--- a/Tool/Robot/AI/AIFile/AILoginout.py
+++ b/Tool/Robot/AI/AIFile/AILoginout.py
@@ -152,7 +152,7 @@
elif pack.RefreshType == DataDefine.CDBPlayerRefresh_HappyPoint:
self.robot.GetPlayerInfo().SetTJGTime(pack.Value)
# 退出队伍,离线
- self.TJGLeave(pack.Value)
+ #self.TJGLeave(pack.Value)
elif pack.RefreshType == DataDefine.CDBPlayerRefresh_Tick:
self.robot.GetPlayerInfo().SetWorldTick(pack.Value)
elif pack.RefreshType == DataDefine.CDBPlayerRefresh_FBID:
@@ -403,6 +403,11 @@
mapData = ChinMapReader.GetChinMapData().FindMapByID(self.robot.GetPlayerInfo().GetMapID())
+ if self.robot.GetPlayerInfo().GetTJGTime() == 0:
+ # 退出队伍,离线;必须在正式登录后离线,不然会导致反复登录
+ self.TJGLeave(0)
+ return
+
if mapData and mapData.MapFBType != 0:
sendPack = tagCExitFB()
diff --git a/Tool/Robot/Configuration/Config.ini b/Tool/Robot/Configuration/Config.ini
index 397a767..c7469ba 100644
--- a/Tool/Robot/Configuration/Config.ini
+++ b/Tool/Robot/Configuration/Config.ini
@@ -25,4 +25,6 @@
PlayerOffTime=180
ProcessFindTJGTime=30
ServerDBConfigPath=D:\ProjectServer\db\PyMongoDataServer
-StartRunTime=180
\ No newline at end of file
+StartRunTime=180
+
+TJGLimitCnt=200
\ No newline at end of file
diff --git a/Tool/Robot/ConfigurationReader/ConfigIniReader.py b/Tool/Robot/ConfigurationReader/ConfigIniReader.py
index afa4c07..aabe96a 100644
--- a/Tool/Robot/ConfigurationReader/ConfigIniReader.py
+++ b/Tool/Robot/ConfigurationReader/ConfigIniReader.py
@@ -62,6 +62,12 @@
self.ServerDBConfigPath = config.GetValue( "ServerDBConfigPath")
self.StartRunTime = config.GetIntValue( "StartRunTime")
+ self.TJGLimitCnt = config.GetIntValue( "TJGLimitCnt")
+
+
+ def GetTJGLimitCnt(self):
+ return self.TJGLimitCnt
+
def GetIOThreadNum(self):
return self.IOThreadNum
diff --git a/Tool/Robot/Robot/RobotBase.py b/Tool/Robot/Robot/RobotBase.py
index ea48ff3..440c250 100644
--- a/Tool/Robot/Robot/RobotBase.py
+++ b/Tool/Robot/Robot/RobotBase.py
@@ -367,6 +367,8 @@
self.allsend += sendPack.GetLength()
logging.debug( "%s send %d bytes data. recvAll:%d sendAll:%d ALL:%d" % \
( str(self), sendPack.GetLength(), self.allrecv, self.allsend, self.allrecv+self.allsend ) )
+ if not self.__peer:
+ return
self.__mgr.SendData( self.__peer, sendPack.GetBuffer(), sendPack.GetLength() )
diff --git a/Tool/Robot/Robot/RobotMgr.py b/Tool/Robot/Robot/RobotMgr.py
index 9182d8c..e15e434 100644
--- a/Tool/Robot/Robot/RobotMgr.py
+++ b/Tool/Robot/Robot/RobotMgr.py
@@ -18,8 +18,8 @@
Thread.__init__(self, None, None, "AIThreadPy_%s"%index)
self.robotMgr = robotMgr
self.AIList = []
- #config = ConfigurationReader.ConfigIniReader.GetConfig()
-
+ config = ConfigurationReader.ConfigIniReader.GetConfig()
+ self.tjgLimitCnt = config.GetTJGLimitCnt()
self.lastTime = 0
self.badRobotCnt = 0 # 历史异常脱机挂个数
@@ -35,6 +35,11 @@
nowTime = time.time()
if self.lastLoginTime and nowTime - self.lastLoginTime > self.ProcessFindTJGTime:
+ logging.debug( "self.tjgLimitCnt %s " % self.tjgLimitCnt )
+ # 限制脱机挂登录数量, 没有实时的玩家上线后会补收益
+ if self.robotMgr.GetRobotCount() > self.tjgLimitCnt:
+ self.robotMgr.dbRobot.ClearToken()
+
self.lastLoginTime = nowTime
logoningList = self.robotMgr.GetRobotAccIDList() # 在登录的机器人
@@ -83,7 +88,11 @@
# 队列中清理无效的脱机挂, 一次只清理一个
for index in xrange(self.robotMgr.GetRobotCount()):
#logging.debug( "Run AI for Index:%d", index )
- robot = self.robotMgr.GetRobot( index )
+ try:
+ robot = self.robotMgr.GetRobot( index )
+ except:
+ # 判断index防范不到,可能多线程引起,此处报错结束循环
+ break
if not robot:
print "====没有机器人"
self.robotMgr.Remove(robot)
diff --git a/Tool/Robot/framework/frame.py b/Tool/Robot/framework/frame.py
index c6f7623..5b9bd93 100644
--- a/Tool/Robot/framework/frame.py
+++ b/Tool/Robot/framework/frame.py
@@ -189,6 +189,9 @@
def RemoveToken(self, value):
self.tokenList.remove(value)
+ def ClearToken(self):
+ self.tokenList = []
+
class WorkerThread(Thread):
def __init__(self, mgr, dbRobot ):
Thread.__init__(self, None, None, "WorkerThreadPy")
--
Gitblit v1.8.0