| | |
| | | Thread.__init__(self, None, None, "AIThreadPy_%s"%index)
|
| | | self.robotMgr = robotMgr
|
| | | self.AIList = []
|
| | | #config = ConfigurationReader.ConfigIniReader.GetConfig()
|
| | |
|
| | | self.lastTime = 0
|
| | | config = ConfigurationReader.ConfigIniReader.GetConfig()
|
| | | self.tjgLimitCnt = config.GetTJGLimitCnt() # 限制脱机数量
|
| | | self.offTime = config.GetPlayerOffTime() # 获取下线多久的玩家时间
|
| | | self.lastTime = 0 # 控制日志输出频率
|
| | | self.badRobotCnt = 0 # 历史异常脱机挂个数
|
| | |
|
| | | self.ProcessFindTJGTime = 5
|
| | | self.lastLoginTime = 0
|
| | | self.lastLoginTime = 0 # 处理机器人登录的频率
|
| | |
|
| | | def runThread(self):
|
| | | logging.info( "thread %s start" % self.getName() )
|
| | |
| | | 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() # 在登录的机器人
|
| | |
|
| | |
| | | robotList = []
|
| | | for i in xrange(len(tokenList)):
|
| | | tokenInfo = tokenList.pop()
|
| | |
|
| | | if tokenInfo[1] in logoningList:
|
| | | print "正在登录中------", tokenInfo[1]
|
| | | accID = tokenInfo[1]
|
| | | if accID in logoningList:
|
| | | print "正在登录中------", accID
|
| | | continue
|
| | | |
| | | lastTime = self.robotMgr.GetNoteLastTimeByAccID(accID) # 上一次加入队列的时间
|
| | | if lastTime != 0 and nowTime - lastTime < self.offTime:
|
| | | # 登录有问题则进入排队
|
| | | continue
|
| | | robot = self.robotMgr.AddRobot(tokenInfo)
|
| | | robotList.append(robot)
|
| | |
| | | continue
|
| | |
|
| | | # 连接-登录-运行AI
|
| | | if not robot.IsConnected():
|
| | | if not robot.IsConnected() and robot.GetReconnectCount() < 2:
|
| | | robot.ReCreateRobot()
|
| | |
|
| | |
|
| | |
| | | if index >= self.robotMgr.GetRobotCount():
|
| | | # ProcessAI可能会清除了robot
|
| | | break
|
| | | robot = self.robotMgr.GetRobot( index )
|
| | | try:
|
| | | robot = self.robotMgr.GetRobot( index )
|
| | | except:
|
| | | # 判断index防范不到,可能多线程引起,此处报错结束循环
|
| | | break
|
| | | if not robot:
|
| | | continue
|
| | | robot.GetAIMgr().ProcessAI()
|
| | |
| | | # 队列中清理无效的脱机挂, 一次只清理一个
|
| | | 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)
|
| | |
| | | self.dbRobot = dbRobot
|
| | | self.TeamMgr = {}
|
| | |
|
| | | self.LoginHistory = {} # 记录历史添加时间 {账号:时间} 登录失败需3分钟后方可尝试
|
| | | |
| | | #启动AI线程
|
| | | #config = ConfigurationReader.ConfigIniReader.GetConfig()
|
| | | #AI_THREAD_NUM = config.GetAIThreadNum()
|
| | |
|
| | | th = AIThread(self, 0)
|
| | | th.start()
|
| | |
|
| | |
|
| | | def NoteHistory(self, accID):
|
| | | self.LoginHistory[accID] = time.time()
|
| | | |
| | | def GetNoteLastTimeByAccID(self, accID):
|
| | | return self.LoginHistory.get(accID, 0)
|
| | |
|
| | |
|
| | | def GetRobotAccIDList(self):
|
| | | self.__robotAccIDs = []
|
| | |
| | | return self.__robotAccIDs
|
| | |
|
| | | def AddRobot(self, tokenInfo):
|
| | |
|
| | | |
| | | self.LoginHistory[tokenInfo[1]] = time.time() # 账号记录
|
| | | |
| | | #创建Robot实例,具体项目实现相应的RobotBase的子类,在这里创建子类的实例
|
| | | logging.debug( "Create Robot index:%s....." % (tokenInfo,) )
|
| | | robot = ProjectRobot( self.__asioMgr, tokenInfo )
|
| | |
| | | return n
|
| | |
|
| | |
|
| | | #===============================================================================
|
| | | # def ConnectServer(self, index ):
|
| | | # |
| | | # robot = self.GetRobot(index)
|
| | | # if not robot:
|
| | | # return False
|
| | | # |
| | | # logging.debug( "ConnectServer for %d" % index )
|
| | | # #创建了实例了,这时只需要再次连接即可
|
| | | # robot.ReCreateRobot()
|
| | | # return True
|
| | | #===============================================================================
|
| | | |
| | | def GetRobot(self, index ):
|
| | | #logging.debug( "GetRobot for %d" % index )
|
| | |
|
| | |
| | |
|
| | | def Remove(self, robot):
|
| | | self.__robots.remove(robot)
|
| | | logging.info( "Remove robot 剩余: %s"%len(self.__robots) )
|
| | |
|
| | |
|
| | | def DisconnectServer(self, robot ):
|