BBASMRequestManager.h 4.76 KB
//
//  BBASMRequestManager.h
//  BBAMNP
//
//  Created by baidu on 2019/11/19.
//  Copyright © 2019 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <Reachability/Reachability.h>
#import <BBANetwork/BBANetwork.h>
#import <BBAAPIRequest/BBAAPIRequest.h>
#import "BBASMNetworkUtilProtocol.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, BBASMNetworkStatus) {
    BBASMNetworkNotReachable = 0,
    BBASMNetworkReachableViaWWAN,
    BBASMNetworkReachableViaWiFi
};

/// 网络请求任务
@interface BBASMRequestTask : NSObject
/// 取消网络请求任务(不一定能取消成功)
- (void)cancel;
@end

@interface BBASMRequestManager : NSObject

// 单例获取
+ (instancetype)sharedInstance;

/**
 使用GET方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)getWithInfo:(BBASMCommonRequestInfo *)reqInfo
                       completion:(BBASMRequestComplete)completeBlock
                          failure:(BBASMRequestFail)failBlock;

/**
 使用POST方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ ( BBASMRequestTask *)postWithInfo:(BBASMCommonRequestInfo *)reqInfo
                         completion:(BBASMRequestComplete)completeBlock
                            failure:(BBASMRequestFail)failBlock;

/**
 使用HEAD方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)headWithInfo:(BBASMCommonRequestInfo *)reqInfo
                        completion:(BBASMRequestComplete)completeBlock
                           failure:(BBASMRequestFail)failBlock;

/**
 使用PUT方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)putWithInfo:(BBASMCommonRequestInfo *)reqInfo
                       completion:(BBASMRequestComplete)completeBlock
                          failure:(BBASMRequestFail)failBlock;

/**
 使用DELETE方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)deleteWithInfo:(BBASMCommonRequestInfo *)reqInfo
                          completion:(BBASMRequestComplete)completeBlock
                             failure:(BBASMRequestFail)failBlock;

/**
 使用PATCH方法发起请求
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)patchWithInfo:(BBASMCommonRequestInfo *)reqInfo
                         completion:(BBASMRequestComplete)completeBlock
                            failure:(BBASMRequestFail)failBlock;


/**
 发起请求基本方法,请求方法可在reqInfo中设置
 
 @param reqInfo 请求信息实体类
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)requestWithInfo:(BBASMCommonRequestInfo *)reqInfo
                           completion:(BBASMRequestComplete)completeBlock
                              failure:(BBASMRequestFail)failBlock;

/**
 在指定队列中发起请求
 
 @param reqInfo 请求信息实体类
 @param operationQueue 发起请求的队列
 @param completeBlock 请求完成回调
 @param failBlock 请求失败回调
 */
+ (BBASMRequestTask *)requestWithInfo:(BBASMCommonRequestInfo *)reqInfo
                            intoQueue:(NSOperationQueue *)operationQueue
                           completion:(BBASMRequestComplete)completeBlock
                              failure:(BBASMRequestFail)failBlock;

/**
 获取网络状态
 
 @return 网络状态
 BBASMNetworkNotReachable                 无网
 BBASMNetworkReachableViaWWAN      手机自带网络
 BBASMNetworkReachableViaWiFi           WIFI网络
 */
+ (BBASMNetworkStatus)currentReachabilityStatus;

/**
 * @brief 在独立框架网络请求队列中发起请求(除了request端能力之外的请求)
 * @param request 要发起的请求 (当前不支持上传和下载类型的请求)
 */
+ (void)executeRequestUseFrameworkQueue:(BBANormalAPIRequest * _Nonnull)request;

/**
 * @brief 在独立业务网络请求队列中发起请求,request端能力
 * @param request 要发起的请求 (当前不支持上传和下载类型的请求)
 */
+ (void)executeRequestUseBusinessQueue:(BBANormalAPIRequest * _Nonnull)request;

/// @brief 根据reqInfo的requestClassType构成BBANormalAPIRequest、BBASMBdtlsRequest请求类,默认为BBANormalAPIRequest
/// @param reqInfo 请求信息实体类
+ (BBANormalAPIRequest *)generateRequestWithInfo:(BBASMCommonRequestInfo *)reqInfo;

@end

NS_ASSUME_NONNULL_END