Thorbjorn_Steen

Video App OnlineStatus Class

Aug 14th, 2018
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #import "OnlineStatus.h"
  2. #import "AFNetworkReachabilityManager.h"
  3.  
  4.  
  5. @implementation OnlineStatus {
  6.     bool _connected;
  7.     NSMutableArray *_subscribers;
  8. }
  9.  
  10. + (id)sharedInstance {
  11.     static OnlineStatus *instance = nil;
  12.     @synchronized (self) {
  13.         if(instance == nil) {
  14.             instance = [[self alloc] init];
  15.         }
  16.     }
  17.     return instance;
  18. }
  19.  
  20. -(id)init {
  21.     self = [super init];
  22.     if(self) {
  23.         _subscribers = [NSMutableArray new];
  24.  
  25.         [self setup];
  26.  
  27.         NSString *status = _connected ? @"Yes" : @"No";
  28.         NSLog(@"OnlineStatus Listener initialized. Online: %@", status);
  29.     }
  30.     return self;
  31. }
  32.  
  33. - (void)setup {
  34.     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  35.         [self handleOnlineStatusChanged:status];
  36.     }];
  37.         [[AFNetworkReachabilityManager sharedManager] startMonitoring];
  38.  
  39.     _connected = [AFNetworkReachabilityManager sharedManager].reachable;
  40. }
  41.  
  42. - (bool)isOnline {
  43.     return _connected;
  44. }
  45.  
  46. + (bool)isOnline {
  47.     return [[self sharedInstance] isOnline];
  48. }
  49.  
  50. - (void)handleOnlineStatusChanged:(AFNetworkReachabilityStatus)status {
  51.     bool oldStatus = _connected;
  52.     switch (status) {
  53.         case AFNetworkReachabilityStatusNotReachable:
  54.             NSLog(@"OnlineStatus: No Internet Connection");
  55.             _connected = NO;
  56.             break;
  57.         case AFNetworkReachabilityStatusReachableViaWiFi:
  58.             NSLog(@"OnlineStatus: WIFI");
  59.  
  60.             _connected = YES;
  61.             break;
  62.         case AFNetworkReachabilityStatusReachableViaWWAN:
  63.             NSLog(@"OnlineStatus: 3G");
  64.             _connected = YES;
  65.             break;
  66.         default:
  67.             NSLog(@"OnlineStatus: Unkown network status");
  68.             _connected = NO;
  69.             break;
  70.     }
  71.  
  72.     if(oldStatus != _connected) {
  73.         for(id<OnlineStatusSubscriber> subscriber in _subscribers) {
  74.             [subscriber onlineStatus:self statusChangedTo:_connected];
  75.         }
  76.     }
  77. }
  78.  
  79. - (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
  80.     [_subscribers addObject:subscriber];
  81. }
  82.  
  83. - (void)unsubscribe:(id<OnlineStatusSubscriber>)subscriber {
  84.     [_subscribers removeObject:subscriber];
  85. }
  86.  
  87. @end
Advertisement
Add Comment
Please, Sign In to add comment