def encode(msgstr): if not msgstr: return msgstr if msgstr[0] != "{": return msgstr if msgstr.find('"cmdId"') < 0: return msgstr msgPack = MsgPack() msgPack.unpack(msgstr) cmdId = msgPack.getKey("cmdId") if not cmdId: return msgstr cmdObj = _getCmdObj(cmdId) if not cmdObj: return msgstr binStr = cmdObj.structMsg(msgPack) return struct.pack("!3sB", "$fs", cmdId) + binStr
def gunChange(self, gLv): """ 切换火炮等级 """ reason = 0 if gLv > self.gunLevel or not config.getGunLevelConf( gLv, self.table.gameMode): reason = 1 else: if gLv < self.table.runConfig.minGunLevel: return elif gLv > self.tableMaxGunLevel(): return elif self.getUsingSkillInfo(): # 技能处于使用中时,升级炮台,炮台等级需等技能状态结束后才会切换更新 self.nowGunLevel = gLv return gunMultiple = config.getGunConf(self.gunId, self.clientId, self.gunLv, self.table.gameMode).get( "multiple", 1) retMsg = MsgPack() retMsg.setCmd("gchg") retMsg.setResult("gameId", config.FISH_GAMEID) retMsg.setResult("gLv", gLv) retMsg.setResult("userId", self.userId) retMsg.setResult("seatId", self.seatId) retMsg.setResult("gunMultiple", gunMultiple) retMsg.setResult("gameMode", self.table.gameMode) retMsg.setResult("reason", reason) retMsg.setResult("tableMaxGunLevel", self.tableMaxGunLevel()) GameMsg.sendMsg(retMsg, self.userId) if reason == 0: self.nowGunLevel = gLv result = retMsg.getKey("result") del result["reason"] GameMsg.sendMsg(retMsg, self.table.getBroadcastUids(self.userId)) from newfish.game import TGFish event = ChangeGunLevelEvent(self.userId, config.FISH_GAMEID, self.table.bigRoomId, self.nowGunLevel) TGFish.getEventBus().publishEvent(event) self.syncSkillSlots()
def _remoteCall(markParams, argl, argd): srvtype = markParams['remoteServerType'] syncCall = markParams['remoteSyncCall'] remoteGroupByIndex = markParams['remoteGroupByIndex'] remoteGroupBy = markParams['remoteGroupBy'] cmd = markParams['remoteCmd'] action = markParams['remoteAction'] groupVal = argl[remoteGroupByIndex] msgpack = MsgPack() msgpack.setCmdAction(cmd, action) msgpack.setParam(remoteGroupBy, groupVal) msgpack.setParam('argl', argl[1:]) # 去掉self, cls msgpack.setParam('argd', argd) msgpack.setParam('clientId', configure.CLIENTID_RPC) msgpack = msgpack.pack() jstr = None if srvtype == gdata.SRV_TYPE_UTIL: jstr = _communicateServer(_utilServer, groupVal, groupVal, msgpack, 'RQ', syncCall) elif srvtype == gdata.SRV_TYPE_ROOM: assert (groupVal in gdata.roomIdDefineMap()) jstr = _communicateRoomServer(0, groupVal, msgpack, 'RQ', syncCall) elif srvtype == gdata.SRV_TYPE_TABLE: assert (groupVal in gdata.roomIdDefineMap()) jstr = _communicateTableServer(0, groupVal, msgpack, 'RQ', syncCall) elif srvtype == gdata.SRV_TYPE_CENTER: jstr = _communicateServer(_centerServer, groupVal, groupVal, msgpack, 'RQ', syncCall) else: raise Exception('ERROR RPC cmd route false !!' + cmd + '.' + action) ret = None if syncCall and jstr: mo = MsgPack() try: mo.unpack(jstr) except: raise Exception('the json data error 5 !! [' + repr(jstr) + ']') ret = mo.getKey('result') return ret