lipengwei
2020-07-07 bf3f86e66edcc22d787a99198118e7b2ad71ecd9
commit | author | age
6e1425 1 // AFNetworkReachabilityManager.h
633752 2 // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ )
6e1425 3 //
H 4 // Permission is hereby granted, free of charge, to any person obtaining a copy
5 // of this software and associated documentation files (the "Software"), to deal
6 // in the Software without restriction, including without limitation the rights
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 // copies of the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 // THE SOFTWARE.
21
22 #import <Foundation/Foundation.h>
23
24 #if !TARGET_OS_WATCH
25 #import <SystemConfiguration/SystemConfiguration.h>
26
27 typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
28     AFNetworkReachabilityStatusUnknown          = -1,
29     AFNetworkReachabilityStatusNotReachable     = 0,
30     AFNetworkReachabilityStatusReachableViaWWAN = 1,
31     AFNetworkReachabilityStatusReachableViaWiFi = 2,
32 };
33
34 NS_ASSUME_NONNULL_BEGIN
35
36 /**
37  `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.
38
39  Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability.
40
633752 41  See Apple's Reachability Sample Code ( https://developer.apple.com/library/ios/samplecode/reachability/ )
6e1425 42
H 43  @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined.
44  */
45 @interface AFNetworkReachabilityManager : NSObject
46
47 /**
48  The current network reachability status.
49  */
50 @property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
51
52 /**
53  Whether or not the network is currently reachable.
54  */
55 @property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;
56
57 /**
58  Whether or not the network is currently reachable via WWAN.
59  */
60 @property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;
61
62 /**
63  Whether or not the network is currently reachable via WiFi.
64  */
65 @property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;
66
67 ///---------------------
68 /// @name Initialization
69 ///---------------------
70
71 /**
72  Returns the shared network reachability manager.
73  */
74 + (instancetype)sharedManager;
75
76 /**
633752 77  Creates and returns a network reachability manager with the default socket address.
L 78  
79  @return An initialized network reachability manager, actively monitoring the default socket address.
80  */
81 + (instancetype)manager;
82
83 /**
6e1425 84  Creates and returns a network reachability manager for the specified domain.
H 85
86  @param domain The domain used to evaluate network reachability.
87
88  @return An initialized network reachability manager, actively monitoring the specified domain.
89  */
90 + (instancetype)managerForDomain:(NSString *)domain;
91
92 /**
93  Creates and returns a network reachability manager for the socket address.
94
633752 95  @param address The socket address (`sockaddr_in6`) used to evaluate network reachability.
6e1425 96
H 97  @return An initialized network reachability manager, actively monitoring the specified socket address.
98  */
99 + (instancetype)managerForAddress:(const void *)address;
100
101 /**
102  Initializes an instance of a network reachability manager from the specified reachability object.
103
104  @param reachability The reachability object to monitor.
105
106  @return An initialized network reachability manager, actively monitoring the specified reachability.
107  */
108 - (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;
633752 109
L 110 /**
111  *  Unavailable initializer
112  */
113 + (instancetype)new NS_UNAVAILABLE;
114
115 /**
116  *  Unavailable initializer
117  */
118 - (instancetype)init NS_UNAVAILABLE;
6e1425 119
H 120 ///--------------------------------------------------
121 /// @name Starting & Stopping Reachability Monitoring
122 ///--------------------------------------------------
123
124 /**
125  Starts monitoring for changes in network reachability status.
126  */
127 - (void)startMonitoring;
128
129 /**
130  Stops monitoring for changes in network reachability status.
131  */
132 - (void)stopMonitoring;
133
134 ///-------------------------------------------------
135 /// @name Getting Localized Reachability Description
136 ///-------------------------------------------------
137
138 /**
139  Returns a localized string representation of the current network reachability status.
140  */
141 - (NSString *)localizedNetworkReachabilityStatusString;
142
143 ///---------------------------------------------------
144 /// @name Setting Network Reachability Change Callback
145 ///---------------------------------------------------
146
147 /**
148  Sets a callback to be executed when the network availability of the `baseURL` host changes.
149
150  @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`.
151  */
152 - (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;
153
154 @end
155
156 ///----------------
157 /// @name Constants
158 ///----------------
159
160 /**
161  ## Network Reachability
162
163  The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses.
164
165  enum {
166  AFNetworkReachabilityStatusUnknown,
167  AFNetworkReachabilityStatusNotReachable,
168  AFNetworkReachabilityStatusReachableViaWWAN,
169  AFNetworkReachabilityStatusReachableViaWiFi,
170  }
171
172  `AFNetworkReachabilityStatusUnknown`
173  The `baseURL` host reachability is not known.
174
175  `AFNetworkReachabilityStatusNotReachable`
176  The `baseURL` host cannot be reached.
177
178  `AFNetworkReachabilityStatusReachableViaWWAN`
179  The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS.
180
181  `AFNetworkReachabilityStatusReachableViaWiFi`
182  The `baseURL` host can be reached via a Wi-Fi connection.
183
184  ### Keys for Notification UserInfo Dictionary
185
186  Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification.
187
188  `AFNetworkingReachabilityNotificationStatusItem`
189  A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification.
190  The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status.
191  */
192
193 ///--------------------
194 /// @name Notifications
195 ///--------------------
196
197 /**
198  Posted when network reachability changes.
199  This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability.
200
201  @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (`Prefix.pch`).
202  */
633752 203 FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification;
L 204 FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem;
6e1425 205
H 206 ///--------------------
207 /// @name Functions
208 ///--------------------
209
210 /**
211  Returns a localized string representation of an `AFNetworkReachabilityStatus` value.
212  */
633752 213 FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status);
6e1425 214
H 215 NS_ASSUME_NONNULL_END
216 #endif