| | |
| | | import ChGameToMapPyPack
|
| | | from PyMongoDB.DBCommon import CommonDefine
|
| | | import ObjPool
|
| | | import ChServerToServerPyPack
|
| | | from PyMongoDB.Protocol import MergeServerRecvProtocol
|
| | | #-------------------------------------------------------------------------------
|
| | | #---全局变量---
|
| | |
|
| | |
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | #-------------------------------------------------------------------------------
|
| | | #-------------------------------------------------------------------------------
|
| | | #GameServer Py封包注册信息
|
| | |
| | | def SendPyPackToServersRoute(data, datalen):
|
| | | GameWorld.GetGameWorld().SendPyPackToServersRoute(datalen, data)
|
| | | 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())
|
| | |
|
| | |
|
| | |
|