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