Denis Muratshin 8 years ago
parent
commit
b58bb6ea19
1 changed files with 28 additions and 10 deletions
  1. 28 10
      oxygine/src/core/ios/HttpRequestCocoaTask.mm

+ 28 - 10
oxygine/src/core/ios/HttpRequestCocoaTask.mm

@@ -28,15 +28,29 @@ static HttpRequestTask *createTask()
     return self;
     return self;
 }
 }
 
 
--(oxygine::HttpRequestCocoaTask*) getTask:(NSObject*)object remove:(BOOL)remove
+-(oxygine::HttpRequestCocoaTask*) getTask:(NSObject*)object
 {
 {
     NSValue *taskValue = objc_getAssociatedObject(object, &taskKey);
     NSValue *taskValue = objc_getAssociatedObject(object, &taskKey);
-    oxygine::HttpRequestCocoaTask* task = (oxygine::HttpRequestCocoaTask*)taskValue.pointerValue;
-    if (remove)
-        objc_removeAssociatedObjects(object);
+    oxygine::spAsyncTask *sp = ((oxygine::spAsyncTask*)taskValue.pointerValue);
+    oxygine::HttpRequestCocoaTask* task = static_cast<oxygine::HttpRequestCocoaTask*>(sp->get());
+    /*
+     if (remove)
+     {
+     objc_removeAssociatedObjects(object);
+     sadsa
+     }
+     */
     return task;
     return task;
 }
 }
 
 
+
+-(void) removeTask:(NSObject*)object
+{
+    NSValue *taskValue = objc_getAssociatedObject(object, &taskKey);
+    oxygine::spAsyncTask *sp = ((oxygine::spAsyncTask*)taskValue.pointerValue);
+    delete sp;
+}
+
 #pragma mark - NSURLSessionTaskDelegate
 #pragma mark - NSURLSessionTaskDelegate
 
 
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
@@ -44,7 +58,7 @@ static HttpRequestTask *createTask()
     NSLog(@"Session %@ download task %@ finished downloading with error %@\n",session, task, error);
     NSLog(@"Session %@ download task %@ finished downloading with error %@\n",session, task, error);
     
     
     
     
-    oxygine::HttpRequestCocoaTask* httpRequestTask = [self getTask:task remove:true];
+    oxygine::HttpRequestCocoaTask* httpRequestTask = [self getTask:task];
     
     
     if (error)
     if (error)
     {
     {
@@ -54,6 +68,8 @@ static HttpRequestTask *createTask()
     {
     {
         httpRequestTask->complete_(false);
         httpRequestTask->complete_(false);
     }
     }
+    
+    [self removeTask:task];
 }
 }
 
 
 
 
@@ -62,7 +78,7 @@ static HttpRequestTask *createTask()
 // Not used yet (using completion handler for data tasks)
 // Not used yet (using completion handler for data tasks)
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask  didReceiveData:(NSData *)data
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask  didReceiveData:(NSData *)data
 {
 {
-    oxygine::HttpRequestCocoaTask* task = [self getTask:dataTask remove:false];
+    oxygine::HttpRequestCocoaTask* task = [self getTask:dataTask];
     if (!task)
     if (!task)
         return;
         return;
     task->write(data);
     task->write(data);
@@ -81,7 +97,7 @@ didReceiveResponse:(NSURLResponse *)response
         
         
         int resp = (int)httpResponse.statusCode;
         int resp = (int)httpResponse.statusCode;
         
         
-        oxygine::HttpRequestCocoaTask* task = [self getTask:dataTask remove:false];
+        oxygine::HttpRequestCocoaTask* task = [self getTask:dataTask];
         if (task)
         if (task)
         {
         {
             task->gotResponse(resp, size);
             task->gotResponse(resp, size);
@@ -183,7 +199,7 @@ namespace oxygine
         else
         else
             onComplete();
             onComplete();
         
         
-        releaseRef();
+        //releaseRef();
     }
     }
     
     
     void HttpRequestCocoaTask::gotResponse(int resp, size_t expectedSize)
     void HttpRequestCocoaTask::gotResponse(int resp, size_t expectedSize)
@@ -195,7 +211,7 @@ namespace oxygine
     
     
     void HttpRequestCocoaTask::_run()
     void HttpRequestCocoaTask::_run()
     {
     {
-        addRef();
+        //addRef();
         
         
         NSString *urlString = [NSString stringWithUTF8String:_url.c_str()];
         NSString *urlString = [NSString stringWithUTF8String:_url.c_str()];
         NSURL *url = [NSURL URLWithString:urlString];
         NSURL *url = [NSURL URLWithString:urlString];
@@ -221,7 +237,9 @@ namespace oxygine
             
             
         task = [session dataTaskWithRequest:request];
         task = [session dataTaskWithRequest:request];
         
         
-        NSValue *taskValue = [NSValue valueWithPointer:this];
+        oxygine::spAsyncTask *ptr = new oxygine::spAsyncTask(shared_from_this());
+        
+        NSValue *taskValue = [NSValue valueWithPointer:ptr];
         objc_setAssociatedObject(task, &taskKey, taskValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
         objc_setAssociatedObject(task, &taskKey, taskValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
         
         
         log::messageln("created task session: %x", task);
         log::messageln("created task session: %x", task);