hch
2018-09-29 0a6a54c527dae488999d18869e3e45a780c8d39f
3974 【测试】机器人优化
6个文件已修改
33 ■■■■■ 已修改文件
Tool/Robot/AI/AIFile/AILoginout.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Configuration/Config.ini 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/ConfigurationReader/ConfigIniReader.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Robot/RobotBase.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Robot/RobotMgr.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/framework/frame.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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()
Tool/Robot/Configuration/Config.ini
@@ -26,3 +26,5 @@
ProcessFindTJGTime=30
ServerDBConfigPath=D:\ProjectServer\db\PyMongoDataServer
StartRunTime=180
TJGLimitCnt=200
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
    
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() )
        
    
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 )
                    try:
                    robot = self.robotMgr.GetRobot( index )
                    except:
                        # 判断index防范不到,可能多线程引起,此处报错结束循环
                        break
                    if not robot:
                        print "====没有机器人"
                        self.robotMgr.Remove(robot)
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")