def sendToAll(msgpack, serverType='', head2=''): if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() assert (isinstance(msgpack, basestring)) for stype, sids in gdata.serverTypeMap().items(): if not serverType or serverType == stype: for dst in sids: wrapper.send(dst, msgpack, 'S7', head2)
def sendToWriter(self, _type, _group, logid, body): sid = ftcon.global_config["server_id"] svrconf = ftcon.getServerConf(sid) try: writer = svrconf["writer"] except: ftlog.error("writer not config!", svrconf) return header = "%s_%s_%s" % (str(_type), str(_group), str(logid)) for w in writer: ftagent.send(str(w), base64.b64encode(body), header)
def _communicateServer(rsrv, groupId, userId, msgpack, head1, isQuery, timeout=None, notimeoutex=0): if timeout == None: timeout = _runenv._RPC_TIME_OUT if groupId <= 0: groupId = rsrv.sididx rsrv.sididx += 1 dst = rsrv.sids[groupId % rsrv.sidlen] ftlog.debug('_communicateServer->dst=', dst, 'groupId=', userId, 'timeout=', timeout, 'msgpack=[' + msgpack + ']') if isQuery: return wrapper.query(dst, msgpack, head1, str(userId), timeout, notimeoutex=notimeoutex) else: return wrapper.send(dst, msgpack, head1, str(userId))
def sendToUsers(msgpack, userIdList): ''' 发送消息至一组用户的客户端 ''' if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() assert (isinstance(msgpack, basestring)) for userId in userIdList: assert (isinstance(userId, (int, long)) and userId > 0) if gdata.ENABLIE_DEFENCE_2: from poker.entity.dao import sessiondata srvId = sessiondata.getConnId(userId) ftlog.debug('sendToUser', userId, srvId) if srvId in _connServer.sids: wrapper.send(srvId, msgpack, 'S0', str(userId)) continue _communicateServer(_connServer, userId, userId, msgpack, 'S0', 0)
def _communicateTableServer(userId, roomId, msgpack, head1, isQuery, timeout=None, notimeoutex=0): if timeout == None: timeout = _runenv._RPC_TIME_OUT assert (isinstance(msgpack, (MsgPack, basestring))) assert (isinstance(roomId, (int, long)) and roomId >= 0) assert (isinstance(userId, (int, long)) and userId >= 0) allrooms = gdata.roomIdDefineMap() if roomId in allrooms: roomDef = allrooms[roomId] if roomDef.parentId == 0: ftlog.warn('ERROR, cat not localtion the roomId of->', userId, roomId, msgpack) return else: # this roomId is big roomId assert (isinstance(userId, (int, long)) and userId >= 0) bigrooms = gdata.bigRoomidsMap() if roomId in bigrooms: msgpack, shadowRoomId = __getRoomIdByTableId(msgpack) ftlog.debug('_communicateTableServer allrooms = ', allrooms, 'shadowRoomId =', shadowRoomId) if shadowRoomId: roomDef = allrooms[shadowRoomId] else: ftlog.warn('ERROR, cat not localtion the roomId of->', userId, roomId, msgpack) return else: ftlog.warn('ERROR, cat not localtion the roomId of->', userId, roomId, msgpack) return if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() dst = roomDef.serverId ftlog.debug('_communicateTableServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'timeout=', timeout, 'msgpack=[' + msgpack + ']') if isQuery: response = wrapper.query(dst, msgpack, head1, str(roomId), timeout, notimeoutex=notimeoutex) ftlog.debug('_communicateTableServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'response=[' + str(response) + ']') return response else: return wrapper.send(dst, msgpack, head1, str(roomId))
def sendCenterServer(msgpack, logicName): """ 发送消息至CENTER服务 """ if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() assert (isinstance(msgpack, basestring)) for dst, logics in gdata.centerServerLogics().items(): if logicName in logics: return wrapper.send(dst, msgpack, 'S7', logicName) raise Exception('the center logicName not found !!' + str(logicName))
def _communicateRoomServer(userId, roomId, msgpack, head1, isQuery, timeout=None, notimeoutex=0): if timeout == None: timeout = _runenv._RPC_TIME_OUT assert (isinstance(msgpack, (MsgPack, basestring))) assert (isinstance(roomId, (int, long)) and roomId >= 0) allrooms = gdata.roomIdDefineMap() if roomId in allrooms: roomDef = allrooms[roomId] if roomDef.parentId > 0: # this roomId is shadowRoomId ctrlRoomId = roomDef.parentId roomDef = allrooms[ctrlRoomId] msgpack = __changeMsgRoomId(msgpack, ctrlRoomId, roomId) else: # this roomId is big roomId assert (isinstance(userId, (int, long)) and userId >= 0) bigrooms = gdata.bigRoomidsMap() if roomId in bigrooms: ctrlroomIds = bigrooms[roomId] ctrlRoomId = ctrlroomIds[ userId % len(ctrlroomIds)] # ctrlRoom0 做为 ctrlRooms 的调度器 roomDef = allrooms[ctrlRoomId] msgpack = __changeMsgRoomId(msgpack, ctrlRoomId, roomId) else: ftlog.warn('ERROR, cat not localtion the roomId of->', userId, roomId, msgpack) return if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() dst = roomDef.serverId ftlog.debug('_communicateRoomServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'timeout=', timeout, 'msgpack=[' + msgpack + ']') if isQuery: response = wrapper.query(dst, msgpack, head1, str(roomId), timeout, notimeoutex=notimeoutex) ftlog.debug('_communicateRoomServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'response=[' + str(response) + ']') return response else: return wrapper.send(dst, msgpack, head1, str(roomId))
def sendToUser(msgpack, userId): """ 发送消息至用户的客户端 """ if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() assert (isinstance(userId, (int, long)) and userId > 0) assert (isinstance(msgpack, basestring)) if gdata.ENABLIE_DEFENCE_2: from poker.entity.dao import sessiondata srvId = sessiondata.getConnId(userId) ftlog.debug('sendToUser', userId, srvId) if srvId in _connServer.sids: return wrapper.send(srvId, msgpack, 'S0', str(userId)) return _communicateServer(_connServer, userId, userId, msgpack, 'S0', 0)
def _communicateRoomServer(userId, roomId, msgpack, head1, isQuery, timeout=None, notimeoutex=0): if timeout == None: timeout = _runenv._RPC_TIME_OUT assert (isinstance(msgpack, (MsgPack, basestring))) assert (isinstance(roomId, (int, long)) and roomId >= 0) allrooms = gdata.roomIdDefineMap() if roomId in allrooms: roomDef = allrooms[roomId] if roomDef.parentId > 0: # this roomId is shadowRoomId ctrlRoomId = roomDef.parentId roomDef = allrooms[ctrlRoomId] msgpack = __changeMsgRoomId(msgpack, ctrlRoomId, roomId) else: # this roomId is big roomId assert (isinstance(userId, (int, long)) and userId >= 0) bigrooms = gdata.bigRoomidsMap() if roomId in bigrooms: ctrlroomIds = bigrooms[roomId] ctrlRoomId = ctrlroomIds[userId % len(ctrlroomIds)] # ctrlRoom0 做为 ctrlRooms 的调度器 roomDef = allrooms[ctrlRoomId] msgpack = __changeMsgRoomId(msgpack, ctrlRoomId, roomId) else: ftlog.warn('ERROR, cat not localtion the roomId of->', userId, roomId, msgpack) return if isinstance(msgpack, MsgPack): msgpack = msgpack.pack() dst = roomDef.serverId ftlog.debug('_communicateRoomServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'timeout=', timeout, 'msgpack=[' + msgpack + ']') if isQuery: response = wrapper.query(dst, msgpack, head1, str(roomId), timeout, notimeoutex=notimeoutex) ftlog.debug('_communicateRoomServer->dst=', dst, 'head1=', head1, 'roomId=', str(roomId), 'response=[' + str(response) + ']') return response else: return wrapper.send(dst, msgpack, head1, str(roomId))
def sendToAllCoServer(cls, mo): ''' 发送消息到所有TCP管理服务器''' msgpack = mo.pack() coSrvIds = gdata.serverTypeMap()[gdata.SRV_TYPE_CONN] for coSrvId in coSrvIds: wrapper.send(coSrvId, msgpack, "S1", "")
if markParams['syncCall']: if future: # TODO: Future RPC CALL 1 return _FutureResultRemote(rpc, dstSid, mi, rpcid, str(groupVal), _runenv._RPC_TIME_OUT) else: try: jstr = wrapper.query(dstSid, mi, rpcid, str(groupVal), _runenv._RPC_TIME_OUT) except FTMsgPackException, e: raise e except Exception, e: ftlog.warn('RpcException msg=', mi) raise RpcException('RpcException ' + rpc + ' ! query remote false, ' + str(e)) return _parseRpcResult(mi, jstr, rpc) else: try: wrapper.send(dstSid, mi, rpcid, str(groupVal)) except Exception, e: ftlog.warn('RpcException msg=', mi) raise RpcException('RpcException ' + rpc + ' ! send to remote false, ' + str(e)) return None def _parseRpcResult(mi, jstr, rpc): if jstr: try: modict = strutil.loads(jstr) except: ftlog.warn('RpcException msg=', mi) raise RpcException('RpcException ' + rpc + ' ! remote return format false, json=[' + repr(jstr) + ']') else: raise RpcException('RpcException ' + rpc + ' ! remote return is Empty !')