BBANetworkDiagnoseExecutor.h 4.3 KB
//
//  BBANetworkDiagnoseExecutor.h
//  BBAAPIRequestExt
//
//  Created by chenjia09 on 2018/12/18.
//
//  Copyright © 2018 Baidu. All rights reserved.

#import <Foundation/Foundation.h>

/// 状态
typedef NS_ENUM(NSUInteger, BBANetworkDiagnoseStatus) {
    BBANetworkDiagnoseStatusDefault,    // 默认,即待检测状态
    BBANetworkDiagnoseStatusInProgress, // 检测中
    BBANetworkDiagnoseStatusQuickDiagnoseCompleted,  // 浅度检测已完成
    BBANetworkDiagnoseStatusAllDiagnoseCompleted,  // 所有检测已完成
};

/// 入口
typedef NS_ENUM(NSUInteger, BBANetworkDiagnoseFrom) {
    BBANetworkDiagnoseFromDefault,      // 默认,如设置,全面检测
    BBANetworkDiagnoseFromSearch,       // 搜索,主要检测搜索相关的域名和 url
    BBANetworkDiagnoseFromFeed,         // Feed,主要检测 Feed 相关的域名和 url
    BBANetworkDiagnoseFromMNP           // MNP,主要检查 MNP 相关的域名和 url
};

/// 等级
typedef NS_OPTIONS(NSUInteger, BBANetworkDiagnoseLevel) {
    BBANetworkDiagnoseLevelFast = 1 << 0,   // 快速检测,即浅度检测
    BBANetworkDiagnoseLevelDeep = 1 << 1,   // 深度检测
};

typedef NS_ENUM(NSUInteger, DiagnoseResultCode) {
    DiagnoseResultNormal,
    DiagnoseResultFlightModeOn,
    DiagnoseResultWifiDisabled,
    DiagnoseResultWifiRestricted,
    DiagnoseResultCellularRestricted,
    DiagnoseResultPingError,
    DiagnoseResultDnsError,
    DiagnoseResultGlobalProxy,
    DiagnoseResultHttpError,
    DiagnoseResultCellularDiabled,
    DiagnoseResultServerError,
    DiagnoseResultVPN,
    DiagnoseResultSSLInvalidDate,
    DiagnoseResultBadNet,
    DiagnoseResultOffline,
    DiagnoseResultDiagnoseTimeout
};
// 全面检测 = 快速检测 + 深度检测
const static BBANetworkDiagnoseLevel BBANetworkDiagnoseLevelTotal = BBANetworkDiagnoseLevelFast | BBANetworkDiagnoseLevelDeep;

NS_ASSUME_NONNULL_BEGIN

/// 检测结果
@interface BBANetworkDiagnoseResult : NSObject

/// 结果日志
@property (nonatomic, copy) NSString *outputLog;
/// 结果详情(成功或失败等)
@property (nonatomic, copy) NSArray <NSNumber *>* resultList;

@end

/// 网络检检测执行的核心类
@interface BBANetworkDiagnoseExecutor : NSObject

/// 更新进度的回调
@property (nonatomic, nullable, copy) void (^progressBlock)(NSUInteger percent);
/// 分阶段检测回调
@property (nonatomic, nullable, copy) void (^phaseBlock)(NSString *phase, NSString *estimateTimeString);
/// 检测完成回调
@property (nonatomic, nullable, copy) void (^completionBlock)(BBANetworkDiagnoseResult *result);

/// 当前检测状态
@property (nonatomic, assign) BBANetworkDiagnoseStatus status;
/// 当前检测结果
@property (nonatomic, strong) BBANetworkDiagnoseResult * result;
/// 当前检测结果
@property (nonatomic, assign) NSUInteger progress;
/// 检测入口
@property (nonatomic, assign) BBANetworkDiagnoseFrom from;
/// 检测等级
@property (nonatomic, assign) BBANetworkDiagnoseLevel level;

/// 单例
+ (BBANetworkDiagnoseExecutor *)sharedInstance;

/// 执行检测操作
/// @param completionBlock 完成回调
/// @param progressBlock 进度回调
/// @param phaseBlock 阶段回调
/// @param from 入口来源
/// @param level 检测类型级别
- (void)executeDiagnoseWithCompletionBlock:(void(^)(BBANetworkDiagnoseResult *result))completionBlock
                             progressBlock:(void(^)(NSUInteger percent))progressBlock
                                phaseBlock:(void(^)(NSString *phase, NSString *estimateTimeString))phaseBlock
                                      from:(BBANetworkDiagnoseFrom)from
                                     level:(BBANetworkDiagnoseLevel)level;

/// 上报检测日志
- (void)reportLog;

/// 取消当前检测任务
- (void)cancelCurrentDiagnoseTask;

/// 唤醒(恢复)当前检测任务
- (void)wakeUpDiagnoseExcutor;

/// 重置检测状态
- (void)reset;

/// 已弃用的方法
+ (BBANetworkDiagnoseExecutor *)executorForSource:(NSNumber *)source __attribute__((deprecated));
- (void) executeDiagnoseWithCompletionBlock:(void(^)(BBANetworkDiagnoseResult *result))completionBlock
                              progressBlock:(void(^)(NSUInteger percent))progressBlock
                                 phaseBlock:(void(^)(NSString *phase, NSString *estimateTimeString))phaseBlock __attribute__((deprecated));
@end

NS_ASSUME_NONNULL_END