Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TODO:// #4

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
5 changes: 5 additions & 0 deletions SANetwork/Classes/SANetworkAccessoryProtocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
- (void)networkRequestAccessoryDidStart;


/**
请求完成
*/
- (void)networkRequestAccessoryDidFinish;

/**
请求完成执行
@warning 与 networkRequestAccessoryDidEndByResponse: 会同时被调用
Expand Down
7 changes: 6 additions & 1 deletion SANetwork/Classes/SANetworkAgent.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

#import <Foundation/Foundation.h>

@class SANetworkRequest;
@class SANetworkRequest,SANetworkBatchRequest;
@protocol SANetworkRequestConfigProtocol;


Expand Down Expand Up @@ -39,4 +39,9 @@
*/
- (void)removeRequest:(__kindof SANetworkRequest *)request;


- (void)addBatchRequest:(SANetworkBatchRequest *)batchRequest;

- (void)removeBatchRequest:(SANetworkBatchRequest *)batchRequest;

@end
15 changes: 15 additions & 0 deletions SANetwork/Classes/SANetworkAgent.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ @interface SANetworkAgent ()

@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;

@property (nonatomic, strong) NSMutableArray <SANetworkBatchRequest *>*requestArray;

@property (nonatomic, strong) NSMutableDictionary <NSString *, __kindof SANetworkRequest *> *requestRecordDict;

@property (nonatomic, strong) NSMutableArray <NSString *> *historyCustomHeaderKeys;
Expand All @@ -40,6 +42,7 @@ + (SANetworkAgent *)sharedInstance {
- (instancetype)init {
self = [super init];
if (self) {
_requestArray = [NSMutableArray array];
_requestRecordDict = [NSMutableDictionary dictionary];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
Expand Down Expand Up @@ -426,6 +429,18 @@ - (void)removeRequest:(__kindof SANetworkRequest<SANetworkRequestConfigProtocol>
}
}

- (void)addBatchRequest:(SANetworkBatchRequest *)batchRequest {
@synchronized (self) {
[_requestArray addObject:batchRequest];
}
}

- (void)removeBatchRequest:(SANetworkBatchRequest *)batchRequest {
@synchronized (self) {
[_requestArray removeObject:batchRequest];
}
}

#pragma mark-
#pragma mark-处理请求响应结果

Expand Down
13 changes: 13 additions & 0 deletions SANetwork/Classes/SANetworkBatchRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

#import <Foundation/Foundation.h>
#import "SANetworkAccessoryProtocol.h"

@class SANetworkBatchRequest;
@class SANetworkResponse;
Expand Down Expand Up @@ -34,6 +35,8 @@
*/
@interface SANetworkBatchRequest : NSObject

/*! 最大并发量 最大并发量不要乱写(5以内),一般以2~3为宜 默认3 */
@property (nonatomic, assign) NSInteger maxConcurrentCount;

/**
批量请求结果回调代理
Expand All @@ -59,4 +62,14 @@
*/
- (void)stopBatchRequest;

/**
添加实现了DYNetworkAccessoryProtocol的插件对象
@waring 在启动请求之前添加插件 可添加多个
@param accessoryDelegate accessoryDelegate 插件对象
*/
- (void)addNetworkAccessoryObject:(id<SANetworkAccessoryProtocol>)accessoryDelegate;




@end
90 changes: 85 additions & 5 deletions SANetwork/Classes/SANetworkBatchRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ @interface SANetworkBatchRequest ()<SANetworkResponseProtocol>
@property (nonatomic) NSInteger completedCount;
@property (nonatomic, strong) NSArray<SANetworkRequest *> *requestArray;
@property (nonatomic, strong) NSMutableArray<SANetworkResponse *> *responseArray;
@property (nonatomic, strong) NSOperationQueue *queue;
@property (nonatomic, strong) NSMutableArray *accessoryArray;

@end

Expand All @@ -36,22 +38,93 @@ - (void)startBatchRequest {
NSLog(@"批量请求正在进行,请勿重复启动 !");
return;
}
[[SANetworkAgent sharedInstance] addBatchRequest:self];
[self accessoryWillStart];
self.queue.maxConcurrentOperationCount = self.maxConcurrentCount;
_completedCount = 0;

for (SANetworkRequest *networkRequest in self.requestArray) {
networkRequest.responseDelegate = self;
[[SANetworkAgent sharedInstance] addRequest:networkRequest];
NSArray *tempArr = [self.requestArray sortedArrayUsingComparator:^NSComparisonResult(SANetworkRequest * _Nonnull obj1, SANetworkRequest * _Nonnull obj2) {
if ((int)obj1.priorityType > (int)obj2.priorityType) {
return NSOrderedAscending;
}else if ((int)obj1.priorityType == (int)obj2.priorityType) {
return NSOrderedSame;
}
return NSOrderedDescending;
}];

self.requestArray = tempArr.copy;

for (SANetworkRequest * _Nonnull request in self.requestArray) {
request.responseDelegate = self;

NSOperation * op = [NSBlockOperation blockOperationWithBlock:^{
[[SANetworkAgent sharedInstance] addRequest:request];
}];
op.qualityOfService = NSQualityOfServiceUserInteractive;
switch (request.priorityType) {
case SANetworkPriorityTypeVeryHigh:
op.queuePriority = NSOperationQueuePriorityVeryHigh;
break;
case SANetworkPriorityTypeDefaultHigh:
op.queuePriority = NSOperationQueuePriorityHigh;
break;
case SANetworkPriorityTypeDefaultLow:
op.queuePriority = NSOperationQueuePriorityLow;
break;
case SANetworkPriorityTypeVeryLow:
op.queuePriority = NSOperationQueuePriorityVeryLow;
break;
default:
op.queuePriority = NSOperationQueuePriorityNormal;
break;
}
[_queue addOperation:op];
}
[self accessoryDidStart];
}

- (void)stopBatchRequest {
_delegate = nil;
[_queue cancelAllOperations];
for (SANetworkRequest *networkRequest in self.requestArray) {
[[SANetworkAgent sharedInstance] removeRequest:networkRequest];
}
}

#pragma mark -
#pragma mark - SANetworkAccessoryProtocol

- (void)addNetworkAccessoryObject:(id<SANetworkAccessoryProtocol>)accessoryDelegate {
if (!accessoryDelegate) return;
if (!_accessoryArray) {
_accessoryArray = [[NSMutableArray alloc]init];
}
[_accessoryArray addObject:accessoryDelegate];
}

- (void)accessoryWillStart {
for (id<SANetworkAccessoryProtocol>accessory in self.accessoryArray) {
if ([accessory respondsToSelector:@selector(networkRequestAccessoryWillStart)]) {
[accessory networkRequestAccessoryWillStart];
}
}
}

- (void)accessoryDidStart {
for (id<SANetworkAccessoryProtocol>accessory in self.accessoryArray) {
if ([accessory respondsToSelector:@selector(networkRequestAccessoryDidStart)]) {
[accessory networkRequestAccessoryDidStart];
}
}
}

- (void)accessoryFinish {
for (id<SANetworkAccessoryProtocol>accessory in self.accessoryArray) {
if ([accessory respondsToSelector:@selector(networkRequestAccessoryDidFinish)]) {
[accessory networkRequestAccessoryDidFinish];
}
}
}

#pragma mark-
#pragma mark-SANetworkResponseProtocol
Expand All @@ -73,13 +146,20 @@ - (void)networkRequest:(SANetworkRequest *)networkRequest failedByResponse:(SANe
}
}



- (void)networkBatchRequestCompleted{
if ([self.delegate respondsToSelector:@selector(networkBatchRequest:completedByResponseArray:)]) {
[self.delegate networkBatchRequest:self completedByResponseArray:self.responseArray];
}
self.completedCount = -1;
[self accessoryFinish];
[[SANetworkAgent sharedInstance] removeBatchRequest:self];
}

- (NSOperationQueue *)queue {
if (!_queue) {
_queue = [[NSOperationQueue alloc]init];
}
return _queue;
}

- (void)dealloc {
Expand Down
3 changes: 3 additions & 0 deletions SANetwork/Classes/SANetworkRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@

@property (nonatomic, assign) NSUInteger retryCount;

/*! 优先级(默认 SANetworkPriorityTypeDefaultNormal ) */
@property (nonatomic, assign, readonly) SANetworkPriorityType priorityType;


/**
* @brief 开始网络请求,使用delegate 方式使用这个方法
Expand Down
22 changes: 22 additions & 0 deletions SANetwork/Classes/SANetworkRequestConfigProtocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,21 @@ typedef NS_ENUM(NSInteger , SARequestHandleSameRequestType) {
SARequestHandleSameRequestBothContinueType,
};

/**
队列处理优先级

- SANetworkPriorityTypeVeryHigh: 非常高
- SANetworkPriorityTypeDefaultHigh: 高
- SANetworkPriorityTypeDefaultNormal: 正常
- SANetworkPriorityTypeDefaultLow: 低
- SANetworkPriorityTypeVeryLow: 非常低
*/
typedef int SANetworkPriorityType NS_TYPED_EXTENSIBLE_ENUM;
static const SANetworkPriorityType SANetworkPriorityTypeVeryHigh NS_AVAILABLE_IOS(10_0) = 1000;
static const SANetworkPriorityType SANetworkPriorityTypeDefaultHigh NS_AVAILABLE_IOS(10_0) = 750;
static const SANetworkPriorityType SANetworkPriorityTypeDefaultNormal NS_AVAILABLE_IOS(10_0) = 500;
static const SANetworkPriorityType SANetworkPriorityTypeDefaultLow NS_AVAILABLE_IOS(10_0) = 250;
static const SANetworkPriorityType SANetworkPriorityTypeVeryLow NS_AVAILABLE_IOS(10_0) = 50;

/**
上传数据构造Block
Expand Down Expand Up @@ -123,6 +138,13 @@ typedef void (^AFConstructingBlock)(id<AFMultipartFormData> formData);

- (NSDictionary *)requestParamDictionary;

/**
请求队列执行优先级
@waring 跟NSOperation.queuePriority 对应
@return 优先级
*/
- (SANetworkPriorityType)networkPriorityType;

/**
* @author 学宝
*
Expand Down