Wuyx
2017-01-11 6c0388687ea77818dec125c356520e8a39bbcb5e
commit | author | age
3eceb5 1 //
W 2 //  VKHTTPOperation.h
3 //
4 //  Based on AFNetworking library.
5 //  https://github.com/AFNetworking/AFNetworking
6 //
7 //  Copyright (c) 2014 VK.com
8 //
9 //  Permission is hereby granted, free of charge, to any person obtaining a copy of
10 //  this software and associated documentation files (the "Software"), to deal in
11 //  the Software without restriction, including without limitation the rights to
12 //  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13 //  the Software, and to permit persons to whom the Software is furnished to do so,
14 //  subject to the following conditions:
15 //
16 //  The above copyright notice and this permission notice shall be included in all
17 //  copies or substantial portions of the Software.
18 //
19 //  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 //  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21 //  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22 //  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23 //  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 //  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
26 #import <Foundation/Foundation.h>
27 #import "VKOperation.h"
28
29 extern NSString *const VKNetworkingOperationDidStart;
30
31 @class VKRequest;
32
33 /**
34 VK URL operation subclassing NSOperation.
35 Based on AFNetworking library ( https://github.com/AFNetworking/AFNetworking )
36 */
37 @interface VKHTTPOperation : VKOperation <NSURLConnectionDataDelegate, NSURLConnectionDelegate, NSCoding, NSCopying>
38 @property(nonatomic, strong) VKRequest *loadingRequest;
39
40 /**
41 Creates new operation with prepared request.
42 @param request Prepared VK request to API
43 @return Initialized operation
44 */
45 + (instancetype)operationWithRequest:(VKRequest *)request;
46
47 ///-------------------------------
48 /// @name Accessing Run Loop Modes
49 ///-------------------------------
50
51 /**
52 The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`.
53 */
54 @property(nonatomic, strong) NSSet *runLoopModes;
55
56 ///-----------------------------------------
57 /// @name Getting URL Connection Information
58 ///-----------------------------------------
59
60 /**
61 The vk request initialized that operation
62 */
63 @property(readonly, nonatomic, weak) VKRequest *vkRequest;
64 /**
65 The request used by the operation's connection.
66 */
67 @property(readonly, nonatomic, strong) NSURLRequest *request;
68
69 /**
70 The error, if any, that occurred in the lifecycle of the request.
71 */
72 @property(readonly, nonatomic, strong) NSError *error;
73
74 ///----------------------------
75 /// @name Getting Response Data
76 ///----------------------------
77
78 /**
79 The data received during the request.
80 */
81 @property(readonly, nonatomic, strong) NSData *responseData;
82
83 /**
84 The string representation of the response data.
85 */
86 @property(readonly, nonatomic, copy) NSString *responseString;
87
88 /**
89 The json representation of the response data.
90 */
91 @property(readonly, nonatomic, copy) id responseJson;
92
93 /**
94 The last HTTP response received by the operation's connection.
95 */
96 @property(readonly, nonatomic, strong) NSHTTPURLResponse *response;
97
98 /**
99 The callback dispatch queue on success. If `NULL` (default), the main queue is used.
100 */
101 @property(nonatomic, assign) dispatch_queue_t successCallbackQueue;
102
103 /**
104 The callback dispatch queue on failure. If `NULL` (default), the main queue is used.
105 */
106 @property(nonatomic, assign) dispatch_queue_t failureCallbackQueue;
107
108 /**
109 Init this operation with URL request
110 @param urlRequest request to load
111 @return initialized operation
112 */
113 - (instancetype)initWithURLRequest:(NSURLRequest *)urlRequest;
114
115 /**
116 Pauses the execution of the request operation.
117
118 A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect.
119 */
120 - (void)pause;
121
122 /**
123 Whether the request operation is currently paused.
124
125 @return `YES` if the operation is currently paused, otherwise `NO`.
126 */
127 - (BOOL)isPaused;
128
129 /**
130 Resumes the execution of the paused request operation.
131
132 Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request.
133 */
134 - (void)resume;
135
136 ///----------------------------------------------
137 /// @name Configuring Backgrounding Task Behavior
138 ///----------------------------------------------
139
140 /**
141 Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task.
142
143 @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified.
144 */
145 - (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler;
146
147 /**
148 Sets a callback to be called when an undetermined number of bytes have been uploaded to the server.
149
150 @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread.
151 */
152 - (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block;
153
154 /**
155 Sets a callback to be called when an undetermined number of bytes have been downloaded from the server.
156
157 @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread.
158 */
159 - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block;
160
161 /**
162 Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed.
163
164 This method should be overridden in subclasses in order to specify the response object passed into the success block.
165
166 @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request.
167 @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request.
168 */
169 - (void)setCompletionBlockWithSuccess:(void (^)(VKHTTPOperation *operation, id responseObject))success
170                               failure:(void (^)(VKHTTPOperation *operation, NSError *error))failure;
171 @end
172