| | |
| | | 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:
|
| | |
| | |
|
| | | 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()
|
| | |
| | | ProcessFindTJGTime=30
|
| | | ServerDBConfigPath=D:\ProjectServer\db\PyMongoDataServer
|
| | | StartRunTime=180 |
| | |
|
| | | TJGLimitCnt=200 |
| | |
| | | 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
|
| | |
|
| | |
| | | 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() )
|
| | |
|
| | |
|
| | |
| | | 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 # 历史异常脱机挂个数
|
| | |
|
| | |
| | | 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() # 在登录的机器人
|
| | |
|
| | |
| | | # 队列中清理无效的脱机挂, 一次只清理一个
|
| | | 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)
|
| | |
| | | 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")
|