def _calc_accept_friend_info(self, proxy, data, req, timer): if not proxy.get_result("user", req.friend_id): res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.WITHOUTID defer = DataBase().commit(data) return self._manage_succeed(data, req, res, timer) app_req = friend_pb2.ManageFriendsReq() app_req.friend_id = req.user_id app_req.user_id = req.friend_id app_req.status = 2 request = app_req.SerializeToString() # friendstr = proxy.get_result("user", req.friend_id).friends # logger.notice("friendstr=%s"%friendstr) # friend = utils.split_to_int(friendstr) # friend_list = [id for id in friend if id >0] # logger.notice("size = %d"%len(friend_list)) # logger.notice("friend_id = %d"%req.friend_id) user = data.user.get() friend_list = user.get_friends() friends = [id for id in friend_list if id > 0] if len(friends) >= 30: res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.FRIENDFULL return res defer = GlobalObject().root.callChild('portal', "forward_receive_accept", req.friend_id, request) defer.addCallback(self._accept_result, data, req, timer) return defer
def _accept_receive(self, data, req, timer): logger.notice("================ac2") user = data.user.get() friend_list = user.get_friends() index = 0 friends = [id for id in friend_list if id > 0] if len(friends) >= 30: return self._pack_manage_wrong_response(friend_pb2.FRIENDFULLOTHER, data, req, timer) if not req.friend_id in friend_list: index = len(friend_list) friend_list.append(req.friend_id) user.friends = utils.join_to_string(friend_list) #初始化好友关系 friendinfo = FriendInfo.create(data.id, req.friend_id, index) data.friend_list.add(friendinfo) logger.notice("FRIEND = %d" % len(data.friend_list)) else: return self._pack_manage_wrong_response(friend_pb2.ALREADYIN, data, req, timer) defer = DataBase().commit(data) res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.FRIEND_OK defer.addCallback(self._receive_accept_friend_succeed, req, res, timer) return defer
def _accept_result(self, app_response, data, req, timer): logger.notice("app_response = %s" % app_response) user = data.user.get() apply_list = user.get_apply() friend_list = user.get_friends() friends = [id for id in friend_list if id > 0] if len(friends) >= 30: res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.FRIENDFULL return res elif req.friend_id in friend_list: res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.FRIEND_OK return res index = 0 if req.friend_id in apply_list: #不能重复添加 if not req.friend_id in friend_list: apply_list.remove(req.friend_id) index = len(friend_list) friend_list.append(req.friend_id) else: res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.ALREADYIN return res else: res = friend_pb2.ManageFriendsRes() res.status = 0 return res user.friends_apply = utils.join_to_string(apply_list) user.friends = utils.join_to_string(friend_list) logger.notice("id = %d, friend_id = %d, index = %d" % (data.id, req.friend_id, index)) #初始化好友关系 friendinfo = FriendInfo.create(data.id, req.friend_id, index) data.friend_list.add(friendinfo) return self._post_accept(data, timer, req, apply_list)
def _manage_failed(self, err, req, timer): logger.fatal("Manage friend failed[reason=%s]" % err) res = friend_pb2.ManageFriendsRes() res.status = -1 res.ret = friend_pb2.FRIEND_OK response = res.SerializeToString() logger.notice("Manage union failed" "[user_id=%d][req=%s][res=%s][consume=%d]" % (timer.id, req, res, timer.count_ms())) return response
def _receive_accept_friend_failed(self, err, req, timer): """请求处理失败""" logger.fatal("Receive accept friend apply failed[reason=%s]" % err) res = friend_pb2.ManageFriendsRes() res.status = -1 res.ret = friend_pb2.FRIEND_OK response = res.SerializeToString() logger.notice( "Receive accept friend apply failed[user_id=%d][req=%s][res=%s][consume=%d]" % (timer.id, req, res, timer.count_ms())) return response
def _pack_manage_response(self, matcher_friend, apply_list, data, req, timer): res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = friend_pb2.FRIEND_OK for id in apply_list: if id != 0: (id, name, icon_id, level, score) = matcher_friend.result[id] message = res.friends.add() logger.notice("======================4") message.user_id = id message.name = name message.icon_id = icon_id message.level = level message.score = score logger.notice("message = %s" % message) # return self._manage_succeed(data, req, res, timer) return res
def _pack_manage_wrong_response(self, ret, data, req, timer): res = friend_pb2.ManageFriendsRes() res.status = 0 res.ret = ret return res