From 519a8605a41e9e4cb72da4d58f55a52c3b83263d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 19 四月 2019 16:12:17 +0800
Subject: [PATCH] 860312 优化脱机挂登录

---
 Tool/Robot/AI/AIFile/AILoginIn.py                                                  |   46 ++--------------------
 Tool/Robot/Robot/RobotBase.py                                                      |    2 
 Tool/Robot/Robot/RobotMgr.py                                                       |   48 +++++++++++++----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py |    2 
 ServerPython/CoreServerGroup/GameServer/Script/EventReport.py                      |    5 ++
 5 files changed, 38 insertions(+), 65 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/EventReport.py b/ServerPython/CoreServerGroup/GameServer/Script/EventReport.py
index 0f40ced..3a6263a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/EventReport.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/EventReport.py
@@ -116,7 +116,10 @@
             return
         RegionName = 's%s'%sid
         
-    getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s%s&Time=%s&DeviceFlag=%s&%s"%(\
+    if eventParam:
+        eventParam = "&%s"%eventParam
+        
+    getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s%s&Time=%s&DeviceFlag=%s%s"%(\
              ReportUrl, ProductID, OperatorID, RegionName, eventActionID, playerInfo,
              str(datetime.datetime.today()).split('.')[0], curPlayer.GetDeviceFlag(), eventParam)
     GameWorld.DebugLog("EventReport: %s"%getUrl)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
index bf0039f..5d80b9a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
@@ -139,7 +139,7 @@
         eventParam = "&%s"%eventParam
     
     
-    getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s&%s&Time=%s&DeviceFlag=%s&%s"%(\
+    getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s&%s&Time=%s&DeviceFlag=%s%s"%(\
              ReportUrl, ProductID, OperatorID, RegionName, eventActionID, playerInfo,
              str(datetime.datetime.today()).split('.')[0], curPlayer.GetAccountData().GetDeviceFlag(), eventParam)
     GameWorld.DebugLog("EventReport: %s"%getUrl)
diff --git a/Tool/Robot/AI/AIFile/AILoginIn.py b/Tool/Robot/AI/AIFile/AILoginIn.py
index f476282..4916ed8 100644
--- a/Tool/Robot/AI/AIFile/AILoginIn.py
+++ b/Tool/Robot/AI/AIFile/AILoginIn.py
@@ -73,21 +73,7 @@
     #  @remarks
     def _Process(self):
         return
-        #self.IsKillSelf()
-#===============================================================================
-#        playerId = self.robot.GetPlayerInfo().GetPlayerID()
-#        curPosX, curPosY = self.robot.GetPlayerInfo().GetPos()
-# 
-#            
-#        curTime = self.GetTick()
-#        
-#        if self.playerDieTime > 0 and curTime - self.playerDieTime > ReBornTime:
-#            if self.robot.GetIsLoginOK():
-#                #发包复活
-#                self.PlayerReborn()
-#                
-#            self.playerDieTime = 0
-#===============================================================================
+
 
         
 
@@ -96,32 +82,10 @@
     #  @return None
     #  @remarks
     def ReConnect(self, curTime):
-        if self.robot.IsConnected():
-            curPosX, curPosY = self.robot.GetPlayerInfo().GetPos()
-            
-            if self.__IsCorrectPos(curPosX, curPosY):
-                return
-            
-            self.SendGMRoleDead()
-#            self.robot.DestroyRobot()
-#            self.playerDisconnectTime = curTime
-            
-            logging.info('坐标错误,断开')
-            
-        else:
-            if self.robot.GetIsLoginOK():
-                self.robot.DestroyRobot()
-                
-            if  self.playerDisconnectTime == 0:
-                self.playerDisconnectTime = curTime
-            
-            if self.playerDisconnectTime > 0 and curTime - self.playerDisconnectTime > ReConnectTime:
-                
-                self.robot.ReCreateRobot()
-                
-                if self.robot.IsConnected(): 
-                    self.playerDisconnectTime = 0
-                    logging.info('重新连接了')
+        self.robot.SetIsLoginOK(False)
+        self.robot.SetLastDisconnectReason(1)
+        from Robot import RobotMgr
+        RobotMgr.GetRobotMgr().DisconnectServer(self.robot)
                 
         return
         
diff --git a/Tool/Robot/Robot/RobotBase.py b/Tool/Robot/Robot/RobotBase.py
index 440c250..75cb885 100644
--- a/Tool/Robot/Robot/RobotBase.py
+++ b/Tool/Robot/Robot/RobotBase.py
@@ -235,7 +235,7 @@
         port = GetConfig().GetServerPort()
         logging.debug( "Connect to %s:%d", ip, port )
         self.__peer = self.__mgr.CreatePeer()
-        logging.debug( "create __peer:0x%08X",  self.GetPeerValue() )
+        logging.info( "create %s __peer:0x%08X",  self.__params[1], self.GetPeerValue() )
         
         #注册回调
         logging.debug( "register callback function for 0x%08X" % self.GetPeerValue() )
diff --git a/Tool/Robot/Robot/RobotMgr.py b/Tool/Robot/Robot/RobotMgr.py
index e15e434..c9e038c 100644
--- a/Tool/Robot/Robot/RobotMgr.py
+++ b/Tool/Robot/Robot/RobotMgr.py
@@ -19,12 +19,13 @@
         self.robotMgr = robotMgr
         self.AIList = []
         config =  ConfigurationReader.ConfigIniReader.GetConfig()
-        self.tjgLimitCnt = config.GetTJGLimitCnt()
-        self.lastTime = 0
+        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() )
@@ -47,9 +48,14 @@
                     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)
@@ -63,7 +69,7 @@
                             continue
                         
                         # 连接-登录-运行AI
-                        if not robot.IsConnected():
+                        if not robot.IsConnected() and robot.GetReconnectCount() < 2:
                             robot.ReCreateRobot()
                             
                     
@@ -135,12 +141,22 @@
         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 = []
@@ -149,7 +165,9 @@
         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 )
@@ -180,19 +198,6 @@
         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 )
         
@@ -200,6 +205,7 @@
         
     def Remove(self, robot):
         self.__robots.remove(robot)
+        logging.info( "Remove robot 剩余: %s"%len(self.__robots) )
         
         
     def DisconnectServer(self, robot ):

--
Gitblit v1.8.0