From 067c557365c6a749f6f41f5d8cad8ce9e941c80f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 14 十月 2025 18:07:18 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/MergeServerRecvProtocol.py |   26 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py                     |  152 +++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/DBCommon/CommonDefine.py            |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py          |  217 ++-----------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CrossServerPackLogic.py                       |   22 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py                              |   77 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/SendPackProtocol.py        |   67 ------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/RecvPackProtocol.py        |   27 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/RecvPackToMapDB.py                  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyCrossServerPack.ini                                |   16 +
 10 files changed, 334 insertions(+), 274 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyCrossServerPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyCrossServerPack.ini
new file mode 100644
index 0000000..396cdaa
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyCrossServerPack.ini
@@ -0,0 +1,16 @@
+;RegType 为0表示是封包注册, 为1表示是类名注册(py类名不使用)
+;服务器间的跨服包,既是发包也是收包
+
+;跨服PY包注册
+[CrossServerPackLogic]
+ScriptName = CrossServerPackLogic.py
+Writer = alee
+Releaser = alee
+RegType = 0
+RegisterPackCount = 1
+
+
+PacketCMD_1=0xC2
+PacketSubCMD_1=0x01
+PacketCallFunc_1=OnTest
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py
new file mode 100644
index 0000000..2ab391d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py
@@ -0,0 +1,152 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#作者 : 
+
+import CommFunc
+import binascii
+import copy
+from struct import *
+from ctypes import *
+#插件头
+# 
+#
+ChNetPackDict={}
+class  BString:
+    NameLen = 0        # (BYTE NameLen )
+    Name = ""        # (String Name )     //size = NameLen
+    data = None
+
+    def __init__(self):
+        self.Clear()
+
+        return
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+
+        self.NameLen, _pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name, _pos = CommFunc.ReadString(_lpData, _pos, self.NameLen)
+
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.Name = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += self.Name.Length()
+        return  length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        return data
+
+    def OutputString(self):
+        DumpString = ''':
+                            NameLen:%d,
+                            Name:%s
+                            '''\
+                            %(
+                            self.NameLen,
+                            self.Name
+                            )
+
+        return  DumpString
+
+class  tagHead:
+    Cmd = 0     # (BYTE Cmd )
+    SubCmd = 0      # (BYTE SubCmd )
+    def __init__(self):
+        self.Clear()
+
+        return
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+
+        self.Cmd, _pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SubCmd, _pos = CommFunc.ReadBYTE(_lpData, _pos)
+
+        return _pos
+
+    def Clear(self):
+        self.Cmd = 0
+        self.SubCmd = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        return  length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Cmd)
+        data = CommFunc.WriteBYTE(data, self.SubCmd)
+        return data
+
+    def OutputString(self):
+        DumpString = ''':
+                            Cmd:%d,
+                            SubCmd:%d
+                            '''\
+                            %(
+                            self.Cmd,
+                            self.SubCmd
+                            )
+
+        return  DumpString
+#------------------------------------------------------
+# C2 01 跨服服务器间的测试包 #tagSSTest
+
+class  tagSSTest(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Data", c_int),    #测试
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC2
+        self.SubCmd = 0x01
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC2
+        self.SubCmd = 0x01
+        self.Data = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSSTest)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C2 01 跨服服务器间的测试包 //tagSSTest:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Data:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Data
+                                )
+        return DumpString
+
+
+m_NAtagSSTest=tagSSTest()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSTest.Cmd,m_NAtagSSTest.SubCmd))] = m_NAtagSSTest
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CrossServerPackLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CrossServerPackLogic.py
new file mode 100644
index 0000000..ee250de
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CrossServerPackLogic.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+#
+##@package CrossServerPackLogic.py
+# @todo: 跨服服务器间封包逻辑
+# 跨服服务器间的封包 既是收包也是发包
+
+import GameWorld
+import ChServerToServerPyPack
+import NetPackCommon
+
+def OnTest(netPack):
+
+    GameWorld.Log("收到跨服包 " + str(netPack.Data))
+
+
+def SendTest():
+    pack = ChServerToServerPyPack.tagSSTest()
+    pack.Data = 12
+    #0全广播,1通知主服务器排除合服子服,2通知服务器包含合服子服, 3通知跨服服务器 
+    NetPackCommon.SendCrossServerToServerPack(1, "[501]", pack.GetBuffer())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
index a9b3f02..ca7bd39 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
@@ -32,6 +32,8 @@
 import ChGameToMapPyPack
 from PyMongoDB.DBCommon import CommonDefine
 import ObjPool
+import ChServerToServerPyPack
+from PyMongoDB.Protocol import MergeServerRecvProtocol
 #-------------------------------------------------------------------------------
 #---全局变量---
 
@@ -251,8 +253,6 @@
 
 
 
-
-
 #-------------------------------------------------------------------------------
 #-------------------------------------------------------------------------------
 #GameServer Py封包注册信息
@@ -334,4 +334,75 @@
 # 向ServersRoute发送数据
 def SendPyPackToServersRoute(data, datalen):
     GameWorld.GetGameWorld().SendPyPackToServersRoute(datalen, data)
-    return
\ No newline at end of file
+    return
+
+
+#-------------------------------------------------------------------------------
+# Py跨服服务器间的封包
+#跨服服务器间的封包既是发包也是收包
+PyCrossServerPackTable = {}
+PyCrossServerPackTable = ReadPyPackTable("PyCrossServerPack")
+
+# 收包字典
+RecCrossServerPyPackDict = ChServerToServerPyPack.ChNetPackDict
+
+## 接收跨服之间封包
+#  @param tick 时间戳
+#  @return 无返回值
+#  @remarks
+def RecCrossServerNetPack(netPackBuffer):
+    
+    try:
+
+        #没有PY封包头
+        if len(netPackBuffer) <= 1:
+            return
+        
+        headData = netPackBuffer[1] + netPackBuffer[0]
+        curPackHead = CommFunc.ReadWORD(headData, 0)[0]
+
+        curPackData = RecCrossServerPyPackDict.get(curPackHead)
+        if not curPackData:
+            return
+        
+        
+        curPackData.ReadData(netPackBuffer)
+        
+        # 截断字符串
+        for key in dir(curPackData):
+            value = getattr(curPackData, key)
+            if isinstance(value, str):
+                setattr(curPackData, key, value.rstrip(chr(0x0)))
+        
+        # 取此包头注册信息
+        curPackHeadRegDict = PyCrossServerPackTable.get(curPackHead)
+        # 无此封包注册信息
+        if curPackHeadRegDict == None:
+            #Log("RevieveFakePack: No Register curPackHead = %s"%curPackHead)
+            return
+        
+        curPackHeadRegDict["CallFunc"](curPackData)
+        
+    except Exception:
+        GameWorld.RaiseException("!!!python自定义跨服封包解析失败\r\n%s" % traceback.format_exc())
+        return 
+    
+    
+## 发送跨服包:服务器与服务器间的通信
+#  @param DirType  0全广播,1通知主服务器排除合服子服,2通知服务器包含合服子服, 3通知跨服服务器 
+#  @param clientPack 要包装的封包
+#  @return 无返回值
+#  @remarks
+def SendCrossServerToServerPack(dirType, serverList, packBuffer):
+    recvPack = MergeServerRecvProtocol.tagLPStringData()
+    recvPack.Type = CommonDefine.gstCrossServerToServerPack
+    recvPack.DirType = dirType
+    recvPack.ServerList = str(serverList)
+    recvPack.ServerLen = len(recvPack.ServerList)
+    recvPack.Data = packBuffer
+    recvPack.DataLen = len(packBuffer)
+
+    SendPyPackToServersRoute(recvPack.GetBuffer(), recvPack.GetLength())
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/DBCommon/CommonDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/DBCommon/CommonDefine.py
index 3e2c3ba..c825b35 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/DBCommon/CommonDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/DBCommon/CommonDefine.py
@@ -229,7 +229,7 @@
 gstMergeRegisterPlayer = 119                #报名跨服战
 gstMergeQueryRegisterResult = 120           #查询报名结果,即查询帐号密码
 gstGeneralDBOper = 121                      #通用数据库操作包
-gstBroadcastMergeClient = 122               #广播跨服客户端
+gstCrossServerToServerPack = 122            #跨服使用 服务器之间的封包
 gstDiapatchFamilyID = 123                   #分配家族ID
 gstMergerChildToCenter = 124
 gstQueryRecharge= 125                       # 查询新的充值订单
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
index 9c88912..1e22643 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
@@ -466,6 +466,13 @@
         
         mylog.debug("begin process request type = %d"%requestType)
         
+        if requestType == CommonDefine.gstCrossServerToServerPack:
+            oFuncGrade = self.GetFuncGrade('gstCrossServerToServerPack')
+            oFuncGrade.Start()
+            self.OnCrossServerToServerPack(db, pack)
+            oFuncGrade.End()
+            return True
+
         if requestType == CommonDefine.gstGMToolCommand:
             oFuncGrade = self.GetFuncGrade('gstGMToolCommand')
             oFuncGrade.Start()
@@ -488,26 +495,6 @@
             oFuncGrade.End()
             return True
         
-        if requestType == CommonDefine.gstMergeQueryRegisterResult:
-            oFuncGrade = self.GetFuncGrade('gstMergeQueryRegisterResult')
-            oFuncGrade.Start()
-            self.OnMergeQueryRegisterResult(db, pack)
-            oFuncGrade.End()
-            return True
-        
-        if requestType == CommonDefine.gstMergeRegisterPlayer:
-            oFuncGrade = self.GetFuncGrade('gstMergeRegisterPlayer')
-            oFuncGrade.Start()
-            self.OnMergeRegisterPlayerByCache(db, pack)
-            oFuncGrade.End()
-            return True
-        
-        if requestType == CommonDefine.gstMergePlayerData:
-            oFuncGrade = self.GetFuncGrade('gstMergePlayerData')
-            oFuncGrade.Start()
-            self.OnMergeChildToCenterPlayerData(db, pack)
-            oFuncGrade.End()
-            return True
         
         if requestType == CommonDefine.gstQueryNewGuyCardState:
             oFuncGrade = self.GetFuncGrade("gstQueryNewGuyCardState")
@@ -855,14 +842,7 @@
             self.OnInsertImpeach(db, pack) 
             oFuncGrade.End()    
             return True                                                        
-        
-
-        if requestType == CommonDefine.gstMergerChildToCenter:
-            oFuncGrade = self.GetFuncGrade("gstMergerChildToCenter")
-            oFuncGrade.Start()      
-            self.OnMergerChildToCenter(db, pack) 
-            oFuncGrade.End() 
-            return True
+    
         
         if requestType == CommonDefine.gstPrepareCreateRole:
             oFuncGrade = self.GetFuncGrade("gstPrepareCreateRole")
@@ -936,6 +916,22 @@
         ProjSpecialProcess.GMCmdPlayerLogin(curPlayer)
         return
     
+    def OnCrossServerToServerPack(self, db, pack):
+
+        if CommonDefine.IsDebug():
+            import binascii
+            mylog.debug('buf = %s'%binascii.b2a_hex(pack.getBuffer()))
+        
+        try:
+            recvPack = MergeServerRecvProtocol.tagLPStringData()
+            recvPack.ReadData(pack.getBuffer())
+            NetPackCommon.RecCrossServerNetPack(recvPack.Data)
+        except:
+            msg = error.formatMsg('error', error.ERROR_NO_172, "LogicProcessThread::OnCrossServerToServerPack Catch a unexpetcted exception, error = %s"%traceback.format_exc())
+            mylog.error(msg)
+
+
+
     def OnGMToolCommand(self, db, pack):
 
         if CommonDefine.IsDebug():
@@ -947,7 +943,6 @@
         except:
             msg = error.formatMsg('error', error.ERROR_NO_172, "LogicProcessThread::OnGMToolCommand Catch a unexpetcted exception, error = %s"%traceback.format_exc())
             mylog.error(msg)
-
 
 
     def OnGeneralDBOper(self, db, pack):
@@ -1218,114 +1213,6 @@
                      + gmIPData + rolePetData + petSkillData + roleNormalDictData + roleDienstgradData+battleFormationData
         
 
-
-    # 查询返回0/1 代表是否成功
-    def OnMergeQueryRegisterResult(self, db, pack): 
-        g_mergeRegisterPlayerDict = PyGameData.g_mergeRegisterPlayerDict
-        buf = pack.getBuffer()
-        #len = pack.getLength()
-        recvPack = MergeServerRecvProtocol.tagLPQueryRegisterResult()
-        pos = 0
-        recvPack.ReadData(buf, pos)
-        accID = recvPack.AccID.strip(chr(0))
-        mylog.debug('accID = %s.'%(accID))
-        
-        clientSessionID = pack.getSessionID()
-        client = MergeProxyClientMgr.getMergeProxyClientMgr().findClientBySessionID(clientSessionID)
-        if not client:
-            mylog.warning('client not found!sessionID = %s'%(clientSessionID))
-            return
-
-
-        sendPack = MergeServerSendProtocol.tagMPQueryRegisterResult()
-        sendPack.Type = CommonDefine.dgMergeQueryNewAccount
-        if g_mergeRegisterPlayerDict.get(accID, []):       
-            sendPack.Result = 0
-            self.packSend(pack.getSessionID(), pack.getPackHead().sessionID, 0, CommonDefine.atMergeLogic, MMORPGPack.stNoSense,
-                          MMORPGPack.stNoSense, sendPack.GetBuffer())
-            mylog.warning('query failed!spec = %s'%accID)
-            return
-        sendPack.Result = 1
-        sendPack.Account = accID
-        sendPack.AccountLen = len(accID)
-        sendPack.Pwd = ""
-        sendPack.PwdLen = 0
-        self.packSend(pack.getSessionID(), pack.getPackHead().sessionID, 0, CommonDefine.atMergeLogic, MMORPGPack.stNoSense,
-                          MMORPGPack.stNoSense, sendPack.GetBuffer())
-        
-        
-    def OnMergeRegisterPlayerByCache(self, db, pack):
-        ''' 缓存跨服玩家上传数据信息 
-            目前账号、玩家ID、角色名均已确保唯一,故无需再重新生成新的账号及角色信息
-            直接接收更新缓存即可,玩家登陆跨服服务器时直接从缓存数据中解析角色数据,从而节省db存取步骤
-        '''
-        g_mergeRegisterPlayerDict = PyGameData.g_mergeRegisterPlayerDict
-        try:
-            buf = pack.getBuffer()
-            recvPack = MergeServerRecvProtocol.tagLPRegisterPlayer()
-            pos = 0
-            recvPack.ReadData(buf, pos)
-            #mylog.debug('pack = %s'%(binascii.b2a_hex(buf)))
-            
-            loginResultPack = MergeServerSendProtocol.tagMPRegisterPlayerResult()
-            loginResultPack.Type = CommonDefine.dgMergeRegisterResult
-            
-            #玩家地图数据,和下线保存包 SavePlayerMapServerDataEx 一致          
-            playerData = recvPack.Data
-            playerRec = DataServerPlayerData.tagDBPlayer()
-            pos = 0
-            dbPlayerReadLen = playerRec.readData(playerData, pos, len(playerData))
-            if -1 == dbPlayerReadLen:
-                #数据异常,长度不足
-                #回复失败
-                loginResultPack.Result = 0
-                loginResultPack.ErrorMsg = 'Player data length not enough!'
-                loginResultPack.ErrorMsgLen = len(loginResultPack.ErrorMsg)
-                self.packSend(pack.getSessionID(), pack.getPackHead().sessionID, 0, CommonDefine.atMergeLogic, MMORPGPack.stNoSense,
-                              MMORPGPack.stNoSense, loginResultPack.GetBuffer())
-                mylog.warning('player data too short!')
-                return
-            
-            if playerRec.PlayerID == 0:
-                loginResultPack.Result = 0
-                loginResultPack.ErrorMsg = 'Player data error!'
-                loginResultPack.ErrorMsgLen = len(loginResultPack.ErrorMsg)
-                self.packSend(pack.getSessionID(), pack.getPackHead().sessionID, 0, CommonDefine.atMergeLogic, MMORPGPack.stNoSense,
-                              MMORPGPack.stNoSense, loginResultPack.GetBuffer())
-                mylog.warning('player data error!')
-                return
-            
-            clientSessionID = pack.getSessionID()
-            client = MergeProxyClientMgr.getMergeProxyClientMgr().findClientBySessionID(clientSessionID)
-            if not client:
-                mylog.warning('client not found!sessionID = %s'%(clientSessionID))
-                return
-            groupID = client.groupID
-            
-            playerID = playerRec.PlayerID
-            accID = playerRec.AccID.lower().strip(chr(0))
-                
-            playerName = playerRec.PlayerName.strip()
-            
-            #成功,返回新帐号密码
-            loginResultPack.Result = 1
-            loginResultPack.Account = accID
-            loginResultPack.AccountLen = len(accID)
-            loginResultPack.Pwd = ""
-            loginResultPack.PwdLen = 0
-            self.packSend(pack.getSessionID(), pack.getPackHead().sessionID, 0, CommonDefine.atMergeLogic, MMORPGPack.stNoSense,
-                              MMORPGPack.stNoSense, loginResultPack.GetBuffer())
-            
-            mylog.info('player %s accID=%s, playerID=%s, %s register PK ok!'%(groupID, accID, playerID, playerName))
-            g_mergeRegisterPlayerDict[accID] = [time(), 0, recvPack, groupID] # 更新跨服玩家数据缓存
-        except Exception, e:
-            msg = error.formatMsg('error', error.ERROR_NO_175, "OnMergeRegisterPlayer error %s!traceback = %s, pack = %s"%(e, traceback.format_exc(), binascii.b2a_hex(buf)))
-            mylog.error(msg)
-        except:
-            msg = error.formatMsg('error', error.ERROR_NO_176, "OnMergeRegisterPlayer error!traceback = %s, pack = %s"%(traceback.format_exc(), binascii.b2a_hex(buf)))
-            mylog.error(msg)
-        return
-    
     
     def OnFinishRecharge(self, db, pack):
         # map完成兑换,假设此处没有回复,则此单变成丢单,暂由人工维护
@@ -5715,64 +5602,8 @@
         return True   
 
 
-    def OnMergerChildToCenter(self,db, pack):
-        mylog.debug('OnMergerChildToCenter in')
-#        #伪装来源,便于回包
-#        pack.getPackHead().srcSvrType = MMORPGPack.stGame  
-#        pack.getPackHead().type = CommonDefine.dgMergerChildToCenter 
-        #获取发包参数
-        ServerMgr = MongoDBServer.getServerMgr()
-        sendViaSessionID = ServerMgr.getClientSessionIDByName("CenterGate",0)
-        SessionID = 0
-        PoolIndex = -1
-
-        #读取数据
-        buf = pack.getBuffer()           
-        recvPack = MergeServerRecvProtocol.tagLPStringData()
-        pos = 0
-        recvPack.ReadData(buf, pos)
-        #转发数据到GameServer    
-        sendPack = SendPackProtocol.tagDGMergerChildToGameStringData()
-        sendPack.Type = CommonDefine.dgMergerChildToCenter
-        sendPack.DataLen = recvPack.DataLen
-        sendPack.Data = recvPack.Data
-        
-        ServerMgr.packSendBySessionID(sendViaSessionID, SessionID, PoolIndex,
-                  CommonDefine.atInner,
-                  MMORPGPack.stGame, MMORPGPack.stData, 
-                  sendPack.GetBuffer())
-        mylog.debug('OnMergerChildToCenter sendString toGameServer %s'%recvPack.Data)
-        return True
     
     
-    def OnMergeChildToCenterPlayerData(self,db, pack):
-        mylog.debug('OnMergeChildToCenterPlayerData in')
-        #伪装来源,便于回包
-        #获取发包参数
-        ServerMgr = MongoDBServer.getServerMgr()
-        sendViaSessionID = ServerMgr.getClientSessionIDByName("CenterGate",0)
-        SessionID = 0
-        PoolIndex = -1
-
-        #读取数据
-        buf = pack.getBuffer()           
-        recvPack = MergeServerRecvProtocol.tagLPPlayerData()
-        pos = 0
-        recvPack.ReadData(buf, pos)
-        #转发数据到MapServer    
-        sendPack = SendPackProtocol.tagDMMergePlayerData()
-        sendPack.Type = CommonDefine.dgDBToMapServer
-        sendPack.SubType = CommonDefine.gmMergePlayerData
-        sendPack.DataLen = recvPack.DataLen
-        sendPack.Data = recvPack.Data
-        sendPack.PlayerID = recvPack.PlayerID
-        
-        ServerMgr.packSendBySessionID(sendViaSessionID, SessionID, PoolIndex,
-                  CommonDefine.atInner,
-                  MMORPGPack.stRoute, MMORPGPack.stData, 
-                  sendPack.GetBuffer())
-        mylog.debug('OnMergeChildToCenterPlayerData sendString toMapServer %s'%([recvPack.PlayerID, sendPack.DataLen,]))
-        return True
     
     
     #导出单玩家数据
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/MergeServerRecvProtocol.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/MergeServerRecvProtocol.py
index 61aca15..84fb465 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/MergeServerRecvProtocol.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/MergeServerRecvProtocol.py
@@ -344,10 +344,14 @@
         return DumpString
     
     
-#向跨服服务器发送自定义封包#tagLPStringData
+#------------------------------------------------------
+#服务器与服务器间的自定义跨服封包#tagLPStringData
 
 class  tagLPStringData(Structure):
     Type = 0    #(BYTE Type)//类型
+    DirType = 0    #(BYTE DirType)//0全广播,1通知主服务器排除合服子服,2通知服务器包含合服子服, 3通知跨服服务器 
+    ServerLen = 0    #(DWORD ServerLen)
+    ServerList = ""    #(String ServerList)//服务器列表格式可以是 [(1,10),13,16,(22,30)]
     DataLen = 0    #(DWORD DataLen)
     Data = ""    #(String Data)//自定义消息
     data = None
@@ -359,12 +363,18 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.DirType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ServerList,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerLen)
         self.DataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Data,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
         return _pos
 
     def Clear(self):
         self.Type = 0
+        self.DirType = 0
+        self.ServerLen = 0
+        self.ServerList = ""
         self.DataLen = 0
         self.Data = ""
         return
@@ -372,6 +382,9 @@
     def GetLength(self):
         length = 0
         length += 1
+        length += 1
+        length += 4
+        length += len(self.ServerList)
         length += 4
         length += len(self.Data)
 
@@ -380,6 +393,9 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteBYTE(data, self.Type)
+        data = CommFunc.WriteBYTE(data, self.DirType)
+        data = CommFunc.WriteDWORD(data, self.ServerLen)
+        data = CommFunc.WriteString(data, self.ServerLen, self.ServerList)
         data = CommFunc.WriteDWORD(data, self.DataLen)
         data = CommFunc.WriteString(data, self.DataLen, self.Data)
         return data
@@ -387,17 +403,21 @@
     def OutputString(self):
         DumpString = '''
                                 Type:%d,
+                                DirType:%d,
+                                ServerLen:%d,
+                                ServerList:%s,
                                 DataLen:%d,
                                 Data:%s
                                 '''\
                                 %(
                                 self.Type,
+                                self.DirType,
+                                self.ServerLen,
+                                self.ServerList,
                                 self.DataLen,
                                 self.Data
                                 )
         return DumpString
-
-
 
 #------------------------------------------------------
 #汇报玩家数据 #tagLPPlayerData
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/RecvPackProtocol.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/RecvPackProtocol.py
index 41ea402..b6cf060 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/RecvPackProtocol.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/RecvPackProtocol.py
@@ -937,11 +937,14 @@
         return DumpString
     
     
+#------------------------------------------------------
 #GM命令#tagGMCommand
 
 class  tagGMCommand(Structure):
     Type = 0    #(BYTE Type)
-    ServerID = 0    #(DWORD ServerID)
+    DirType = 0    #(BYTE DirType)//0全广播,1通知非跨服服务器,2只通知跨服
+    ServerLen = 0    #(DWORD ServerLen)
+    ServerList = ""    #(String ServerList)//服务器列表格式可以是 [(1,10),13,16,(22,30)]
     OrderLen = 0    #(BYTE OrderLen)
     OrderId = ""    #(String OrderId)
     CmdLen = 0    #(DWORD CmdLen)
@@ -957,7 +960,9 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DirType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ServerList,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerLen)
         self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.OrderId,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen)
         self.CmdLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -968,7 +973,9 @@
 
     def Clear(self):
         self.Type = 0
-        self.ServerID = 0
+        self.DirType = 0
+        self.ServerLen = 0
+        self.ServerList = ""
         self.OrderLen = 0
         self.OrderId = ""
         self.CmdLen = 0
@@ -980,7 +987,9 @@
     def GetLength(self):
         length = 0
         length += 1
+        length += 1
         length += 4
+        length += len(self.ServerList)
         length += 1
         length += len(self.OrderId)
         length += 4
@@ -993,7 +1002,9 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
+        data = CommFunc.WriteBYTE(data, self.DirType)
+        data = CommFunc.WriteDWORD(data, self.ServerLen)
+        data = CommFunc.WriteString(data, self.ServerLen, self.ServerList)
         data = CommFunc.WriteBYTE(data, self.OrderLen)
         data = CommFunc.WriteString(data, self.OrderLen, self.OrderId)
         data = CommFunc.WriteDWORD(data, self.CmdLen)
@@ -1005,7 +1016,9 @@
     def OutputString(self):
         DumpString = '''
                                 Type:%d,
-                                ServerID:%d,
+                                DirType:%d,
+                                ServerLen:%d,
+                                ServerList:%s,
                                 OrderLen:%d,
                                 OrderId:%s,
                                 CmdLen:%d,
@@ -1015,7 +1028,9 @@
                                 '''\
                                 %(
                                 self.Type,
-                                self.ServerID,
+                                self.DirType,
+                                self.ServerLen,
+                                self.ServerList,
                                 self.OrderLen,
                                 self.OrderId,
                                 self.CmdLen,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/SendPackProtocol.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/SendPackProtocol.py
index 31f5f0c..b4b52b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/SendPackProtocol.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Protocol/SendPackProtocol.py
@@ -414,74 +414,7 @@
         return DumpString
 
 
-#GM命令执行结果#tagGMCommandResult
 
-class  tagGMCommandResult(Structure):
-    Type = 0    #(BYTE Type)
-    ResultLen = 0    #(DWORD ResultLen)
-    Result = ""    #(String Result)
-    UserDataLen = 0    #(DWORD UserDataLen)
-    UserData = ""    #(String UserData)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ResultLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Result,_pos = CommFunc.ReadString(_lpData, _pos,self.ResultLen)
-        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.Type = 0
-        self.ResultLen = 0
-        self.Result = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += len(self.Result)
-        length += 4
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteDWORD(data, self.ResultLen)
-        data = CommFunc.WriteString(data, self.ResultLen, self.Result)
-        data = CommFunc.WriteDWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Type:%d,
-                                ResultLen:%d,
-                                Result:%s,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.Type,
-                                self.ResultLen,
-                                self.Result,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-    
-    
 #-----------------------       
 #01 22 合服玩家信息#tagServerMergeInfo
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/RecvPackToMapDB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/RecvPackToMapDB.py
index 5748da7..3c3b20f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/RecvPackToMapDB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/RecvPackToMapDB.py
@@ -29,7 +29,7 @@
     PyGameData.g_usrCtrlDB.requestLogicProcess(pack)
 
 
-# 地图自己调用处理DB数据,不一定要符合封包格式,PY根据功能自定义组成封包
+# 地图Python调用处理DB数据,不一定要符合封包格式,PY根据功能自定义组成封包
 def MapCallDB(packBuff, isBuffer = True):
     pack =  MMORPGPack.MMORPGPacket()
     if isBuffer:

--
Gitblit v1.8.0