RAUploadOperation.m 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. //
  2. // RAUploadOperation.m
  3. // test_autolayout
  4. //
  5. // Created by Ray on 03/05/2017.
  6. // Copyright © 2017 USAI. All rights reserved.
  7. //
  8. #import "RAUploadOperation.h"
  9. #import "NetworkUtils.h"
  10. #import <UIKit/UIKit.h>
  11. #import "AppDelegate.h"
  12. #import "RAUtils.h"
  13. #import "const.h"
  14. @interface RAUploadOperation ()
  15. {
  16. // NSString* _threadName;
  17. // NSString* _url;
  18. BOOL executing;
  19. BOOL finished;
  20. NSMutableDictionary* _taskinfo;
  21. int _maxRetry;
  22. }
  23. @end
  24. @implementation RAUploadOperation
  25. - (instancetype)initWithTaskinfo:(NSMutableDictionary*)taskinfo retry:(int) maxRetry
  26. {
  27. self = [super init];
  28. if (self) {
  29. // if (name!=nil)
  30. // _threadName = name;
  31. _maxRetry = maxRetry;
  32. // executing = NO;
  33. // finished = NO;
  34. _taskinfo=taskinfo;
  35. }
  36. return self;
  37. }
  38. - (BOOL)isConcurrent {
  39. return YES;
  40. }
  41. //
  42. - (BOOL)isExecuting {
  43. return executing;
  44. }
  45. - (BOOL)isFinished {
  46. return finished;
  47. }
  48. - (void)start
  49. {
  50. [self willChangeValueForKey:@"isExecuting"];
  51. executing = true;
  52. _taskinfo[@"status"]=[NSNumber numberWithInt:TaskStatusStart];
  53. [self didChangeValueForKey:@"isExecuting"];
  54. NSLog(@"---------------start--------------------");
  55. AppDelegate* Appdelegate=(AppDelegate*)[UIApplication sharedApplication].delegate;
  56. // sleep(3);
  57. //
  58. // [self willChangeValueForKey:@"isFinished"];
  59. // finished = true;
  60. // [self didChangeValueForKey:@"isFinished"];
  61. //
  62. //
  63. // return;
  64. __weak typeof(self) weakSelf = self;
  65. __block NSMutableDictionary* block_task = _taskinfo;
  66. // NSString *md5 = [RAUtils md5WithFile:[self filePath:_taskinfo ]];
  67. DebugLog(@"task %@",_taskinfo);
  68. NSString* file_path = [self filePath:_taskinfo];
  69. if(file_path==nil)
  70. {
  71. DebugLog(@"error no file");
  72. block_task[@"status"]=[NSNumber numberWithInt:TaskStatusError];
  73. block_task[@"progress"]=[NSNumber numberWithDouble:0.0];
  74. [self willChangeValueForKey:@"isFinished"];
  75. finished = true;
  76. [self didChangeValueForKey:@"isFinished"];
  77. return;
  78. }
  79. [NetworkUtils upload:[self filePath:_taskinfo ] Params:_taskinfo[@"params"] ToHost:_taskinfo[@"url"] Result:^(NSMutableDictionary *result) {
  80. DebugLog(@"upload result: %@",result);
  81. int r=[result[@"result"] intValue];
  82. if(r==2|| r==RESULT_BARCODE_ERROR)
  83. {
  84. block_task[@"status"]=[NSNumber numberWithInt:TaskStatusFinish];
  85. if(r==2)
  86. block_task[@"msg"]=@"upload successful";
  87. else
  88. block_task[@"msg"]=[@"warring: " stringByAppendingString:result[@"msg"]];
  89. }
  90. else
  91. {
  92. if([block_task[@"retry"] intValue]>=_maxRetry)
  93. {
  94. block_task[@"status"]=[NSNumber numberWithInt:TaskStatusError];
  95. block_task[@"progress"]=[NSNumber numberWithDouble:0.0];
  96. block_task[@"msg"]=result[@"msg"];
  97. }
  98. else
  99. {
  100. block_task[@"retry"]=[NSNumber numberWithInt:[block_task[@"retry"] intValue]+1];
  101. block_task[@"status"]=[NSNumber numberWithInt:TaskStatusWait];
  102. block_task[@"progress"]=[NSNumber numberWithDouble:0.0];
  103. block_task[@"msg"]=result[@"connection lost, retry..."];
  104. RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:block_task retry:_maxRetry];
  105. operation.updateUI= self.updateUI;
  106. block_task[@"operation"] = operation;
  107. [Appdelegate.uploadManager.operation_queue addOperation:operation];
  108. // [self upload:url];
  109. }
  110. }
  111. dispatch_async(dispatch_get_main_queue(), ^{
  112. if(self.updateUI)
  113. self.updateUI();
  114. });
  115. [weakSelf willChangeValueForKey:@"isFinished"];
  116. finished = true;
  117. [weakSelf didChangeValueForKey:@"isFinished"];
  118. // [self completeOperation];
  119. } Progress:^(double progress) {
  120. dispatch_async(dispatch_get_main_queue(), ^{
  121. // ((UIProgressView*) block_task[@"ui_pregress"]).progress = progress;
  122. block_task[@"progress"]=[NSNumber numberWithFloat:progress];
  123. if(self.updateUI)
  124. self.updateUI();
  125. });
  126. } DecryptHandler:^id(NSString *result) {
  127. return @"bibibi";
  128. }];
  129. //完成下载
  130. // [self didChangeValueForKey:@"isExecuting"];
  131. }
  132. -(NSString*)filePath:(NSMutableDictionary*)task
  133. {
  134. NSString *path = [RAUtils appCacheDirectory];
  135. path= [path stringByAppendingPathComponent:task[@"path"]];
  136. path= [path stringByAppendingPathComponent:task[@"file"]];
  137. NSFileManager* fmanager = [NSFileManager new];
  138. bool file_exist=[fmanager fileExistsAtPath:path];
  139. if(!file_exist)
  140. return nil;
  141. return path;
  142. }
  143. //- (void)completeOperation {
  144. //// [self willChangeValueForKey:@"isFinished"];
  145. //// [self willChangeValueForKey:@"isExecuting"];
  146. ////
  147. //// executing = NO;
  148. //// finished = YES;
  149. ////
  150. //// [self didChangeValueForKey:@"isExecuting"];
  151. //// [self didChangeValueForKey:@"isFinished"];
  152. //}
  153. - (void)dealloc
  154. {
  155. // dumpThreads(@"dealloc");
  156. }
  157. @end