Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import "OnlineStatus.h"
- #import "AFNetworkReachabilityManager.h"
- @implementation OnlineStatus {
- bool _connected;
- NSMutableArray *_subscribers;
- }
- + (id)sharedInstance {
- static OnlineStatus *instance = nil;
- @synchronized (self) {
- if(instance == nil) {
- instance = [[self alloc] init];
- }
- }
- return instance;
- }
- -(id)init {
- self = [super init];
- if(self) {
- _subscribers = [NSMutableArray new];
- [self setup];
- NSString *status = _connected ? @"Yes" : @"No";
- NSLog(@"OnlineStatus Listener initialized. Online: %@", status);
- }
- return self;
- }
- - (void)setup {
- [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
- [self handleOnlineStatusChanged:status];
- }];
- [[AFNetworkReachabilityManager sharedManager] startMonitoring];
- _connected = [AFNetworkReachabilityManager sharedManager].reachable;
- }
- - (bool)isOnline {
- return _connected;
- }
- + (bool)isOnline {
- return [[self sharedInstance] isOnline];
- }
- - (void)handleOnlineStatusChanged:(AFNetworkReachabilityStatus)status {
- bool oldStatus = _connected;
- switch (status) {
- case AFNetworkReachabilityStatusNotReachable:
- NSLog(@"OnlineStatus: No Internet Connection");
- _connected = NO;
- break;
- case AFNetworkReachabilityStatusReachableViaWiFi:
- NSLog(@"OnlineStatus: WIFI");
- _connected = YES;
- break;
- case AFNetworkReachabilityStatusReachableViaWWAN:
- NSLog(@"OnlineStatus: 3G");
- _connected = YES;
- break;
- default:
- NSLog(@"OnlineStatus: Unkown network status");
- _connected = NO;
- break;
- }
- if(oldStatus != _connected) {
- for(id<OnlineStatusSubscriber> subscriber in _subscribers) {
- [subscriber onlineStatus:self statusChangedTo:_connected];
- }
- }
- }
- - (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
- [_subscribers addObject:subscriber];
- }
- - (void)unsubscribe:(id<OnlineStatusSubscriber>)subscriber {
- [_subscribers removeObject:subscriber];
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment