| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- //
- // RAUploadManager.m
- // test_autolayout
- //
- // Created by Ray on 02/05/2017.
- // Copyright © 2017 USAI. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- #import "RAUploadManager.h"
- #import "NetworkUtils.h"
- @implementation RAUploadManager
- - (instancetype)init {
- if (self = [super init]) {
-
- self.arr_queue = [[NSMutableArray alloc] init];
- self.newtaskStatus = TaskStatusWait;
- self.maxThread = 3;
- self.removeError=true;
- self.removeFinish = true;
-
- self.operation_queue = [NSOperationQueue new];
- self.operation_queue.maxConcurrentOperationCount = self.maxThread;
- // self.backgroundColor = [UIColor clearColor];
- }
- return self;
- }
- //-(void) upload:(NSString*) url
- //{
- // while(self.activeThread<self.maxThread)
- // {
- // bool nomore=false;
- // for(int i=0;i<self.arr_queue.count;i++)
- // {
- // NSMutableDictionary* task = self.arr_queue[i];
- //
- // TaskStatus ts=[task[@"status"] intValue];
- // if (ts==TaskStatusWait) {
- // self.activeThread--;
- // [self uploadTask:task url:url];
- // break;
- // }
- // if(i==self.arr_queue.count-1)
- // nomore=true;
- //
- // }
- // if(nomore)
- // break;
- // }
- //}
- -(void) addTask:(NSMutableDictionary*) task
- {
-
- // [self.arr_queue addObject:task];
-
-
- if(self.newtaskStatus==TaskStatusWait)
- {
-
- [self startTask:task];
-
- }
- [[self mutableArrayValueForKey:@"arr_queue"] addObject:task];
- }
- -(void) addTasks:(NSMutableArray*) tasks
- {
-
- if(self.newtaskStatus==TaskStatusWait)
- {
- for(NSMutableDictionary* task in tasks)
- [self startTask:task];
-
-
- }
- [[self mutableArrayValueForKey:@"arr_queue"] addObjectsFromArray:tasks];
- }
- -(void) removeTasks:(NSMutableArray*) tasks
- {
-
- NSFileManager* fmanager = [NSFileManager new];
- for(NSMutableDictionary* task in tasks)
- {
-
- [self stopTask:task];
- NSError* error = nil;
- [fmanager removeItemAtPath:task[@"file_path"] error:&error];
- }
- [[self mutableArrayValueForKey:@"arr_queue"] removeObjectsInArray:tasks];
- }
- -(void) removeTask:(NSMutableDictionary*) task
- {
- NSFileManager* fmanager = [NSFileManager new];
- // [self.arr_queue addObject:task];
- [self stopTask:task];
- NSError* error = nil;
- [fmanager removeItemAtPath:task[@"file_path"] error:&error];
-
- [[self mutableArrayValueForKey:@"arr_queue"] removeObject:task];
-
-
- }
- -(void) stopTask:(NSMutableDictionary*) task
- {
-
- if([task[@"status"] intValue]!=TaskStatusStart&&[task[@"status"] intValue]!=TaskStatusWait)
- return; // task 已停止,返回
-
- RAUploadOperation* operation = task[@"operation"];
- [operation cancel];
- task[@"status"] = [NSNumber numberWithInt:TaskStatusStop] ;
- task[@"progress"] = [NSNumber numberWithDouble:0.0];
-
-
- }
- -(void) startTask:(NSMutableDictionary*) task
- {
- __block NSMutableDictionary* block_task = task;
- __weak typeof(self) weakSelf = self;
- if([task[@"status"] intValue]==TaskStatusStart||[task[@"status"] intValue]==TaskStatusWait)
- return; // task 已在执行队列,返回
-
- RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
- [operation setCompletionBlock:^{
- switch ([block_task[@"status"] intValue]) {
- case TaskStatusFinish:
- {
- if(weakSelf.removeFinish)
- [self removeTask:block_task];
- }
- break;
- case TaskStatusError:
- {
- if(weakSelf.removeError)
- [self removeTask:block_task];
- }
- break;
- default:
- break;
- }
-
- }];
- task[@"operation"] = operation;
- task[@"status"] = [NSNumber numberWithInt:self.newtaskStatus] ;
- [self.operation_queue addOperation:operation];
-
-
- }
- //- (void) uploadTask:(NSMutableDictionary*) task url:(NSString*)url{
- //
- //// __weak typeof(self) weakself = self;
- //
- //
- //
- //
- //}
- @end
|