BBAAPIRequestManager+Private.h 2.74 KB
//
//  BBAAPIRequestManager+Private.h
//  BBAPods
//
//  Created by liumuye on 2017/9/22.
//  Copyright © 2017年 Baidu. All rights reserved.
//
#import "BBAAPIRequestManager.h"
#import "BBAAFNetworkingRequestManager.h"
#import "BBAAPIRequestSubClassManager.h"
#import "BBAAPIRequestManagerProtocol.h"

NS_ASSUME_NONNULL_BEGIN
static inline void bbaapirequest_dispatch_async_safe(dispatch_queue_t queue, dispatch_block_t block) {
    if (!queue || dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(queue)) {
        block();
    } else {
        dispatch_async(queue, block);
    }
}

/**
 外部提供一个ClientIP数据提供者
 */
@protocol BBAAPIRequestClientIPDelegate <NSObject>
//  获取ClientIP值
- (NSString *)getClientIP;
//  有新的ClientIP被感知
- (void)notifyChanged:(NSString *)newClientIP;
@end

/**
 *  @extension
 *  @brief      私有方法、内部使用
 */
@interface BBAAPIRequestManager ()<BBAAPIRequestManagerProtocol>

@property (nonatomic, strong) NSOperationQueue * requestOperationQueue;
@property (nonatomic, strong) NSOperationQueue *vhRequestOperationQueue;    //  VeryHigh优先级请求独享队列
@property (nonatomic, assign) BOOL vhQueueUseHighQOS;                       //  VeryHigh请求使用高qos配置

@property (nonatomic, strong) NSString * clientIP;  //  ClientIP

@property (nonatomic, strong) NSOperationQueue * fileRequestOperationQueue;

@property (nonatomic, weak) id<BBAAPIRequestClientIPDelegate> clientIPDelegate;

#pragma mark 私有方法

//  封装URLRequest
- (NSMutableURLRequest*) urlRequestForRequest:(BBABaseAPIRequest*)apiRequest;
//  创建SessionTask
- (NSURLSessionTask *) dataTaskWithAPIRequest:(BBABaseAPIRequest*)apiRequest
                                        error:(NSError * __autoreleasing *)error;

//  为Task设置APIRequest Map Key所需相关的Tag (iOS7系统URLSessionTask无法添加category方法,因此这里新增方法来为Task绑定对象)
- (void)setTagForTask:(NSURLSessionTask*)task;

#pragma mark 请求记录

- (void)addRequestToList:(BBABaseAPIRequest *)apiRequest;

- (BBABaseAPIRequest*)apiRequestForTask:(NSURLSessionTask*)task;

- (BBABaseAPIRequest*)apiRequestForTask:(NSURLSessionTask *)task session:(NSURLSession*)session;

#pragma marm ClientIP解析

- (void)parseResponseForClientIP:(BBABaseAPIRequest*)apiRequest;

#pragma mark - Debug
#if DEBUG
- (void) requestOperationQueueSnapshotDescription;
#endif

#pragma mark - 搜索独享
//  11.6搜索优先, TODO: 11.7 门面改造 session requestMap 需要分开使用
- (void)addSearchRequestToList:(BBABaseAPIRequest *)apiRequest;
- (void)removeSearchRequestToList:(BBABaseAPIRequest *)apiRequest;
- (BBABaseAPIRequest*)searchRequestForTask:(NSURLSessionTask *)task;

@end
NS_ASSUME_NONNULL_END