示例#1
0
    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
示例#2
0
    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
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    def _pack_manage_wrong_response(self, ret, data, req, timer):
        res = friend_pb2.ManageFriendsRes()
        res.status = 0
        res.ret = ret

        return res