152 lines
5.0 KiB
Objective-C
152 lines
5.0 KiB
Objective-C
//
|
|
// WebserviceClient.m
|
|
// ipbc-Client
|
|
//
|
|
// Created by Gerrit Linnemann on 28.10.13.
|
|
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
|
//
|
|
|
|
#import "WebserviceClient.h"
|
|
#import "WebServiceConstants.h"
|
|
#import "Reachability.h"
|
|
|
|
@implementation WebserviceClient
|
|
|
|
-(void)awakeFromNib {
|
|
updateTimer = [NSTimer scheduledTimerWithTimeInterval: 4
|
|
target: self
|
|
selector: @selector(tick:)
|
|
userInfo: nil
|
|
repeats: YES];
|
|
|
|
isRequestRunning = NO;
|
|
|
|
isNetworkAvailable = NO;
|
|
[self checkNetworkAvailability];
|
|
}
|
|
|
|
- (void)tick:(NSTimer *)theTimer {
|
|
if(isNetworkAvailable && !isRequestRunning) {
|
|
[self updateDomain];
|
|
} else {
|
|
// else for logging only
|
|
|
|
if(!isNetworkAvailable) {
|
|
NSLog(@"no ip update, 'cause network unavailable");
|
|
}
|
|
if(isRequestRunning) {
|
|
NSLog(@"no ip update, 'cause of active request");
|
|
}
|
|
}
|
|
}
|
|
|
|
-(BOOL)updateDomain {
|
|
usersIPv4 = [self fetchIPv4];
|
|
NSString *storedIPv4 = [[NSUserDefaults standardUserDefaults] stringForKey:@"value.ip.ipv4"];
|
|
if(storedIPv4 == nil) {
|
|
[[NSUserDefaults standardUserDefaults] setObject:usersIPv4 forKey:@"value.ip.ipv4"];
|
|
}
|
|
|
|
BOOL updateResult = NO;
|
|
|
|
if([self checkUpdateNeeded]) {
|
|
NSLog(@"update resource: %@", WS_RESOURCE);
|
|
updateResult = [self doWebServiceUpdate];
|
|
} else {
|
|
NSLog(@"no update needed");
|
|
}
|
|
|
|
return updateResult;
|
|
}
|
|
|
|
-(void)checkNetworkAvailability {
|
|
// Allocate a reachability object
|
|
Reachability* reach = [Reachability reachabilityWithHostname:WS_BASE];
|
|
|
|
// Set the blocks
|
|
reach.reachableBlock = ^(Reachability*reach)
|
|
{
|
|
NSLog(@"%@ REACHABLE", WS_BASE);
|
|
isNetworkAvailable = YES;
|
|
};
|
|
|
|
reach.unreachableBlock = ^(Reachability*reach)
|
|
{
|
|
NSLog(@"%@ UNREACHABLE", WS_BASE);
|
|
isNetworkAvailable = NO;
|
|
};
|
|
|
|
// Start the notifier, which will cause the reachability object to retain itself!
|
|
[reach startNotifier];
|
|
}
|
|
|
|
-(BOOL)checkUpdateNeeded {
|
|
NSString *storedIPv4 = [[NSUserDefaults standardUserDefaults] stringForKey:@"value.ip.ipv4"];
|
|
NSString *fetchedIPv4 = usersIPv4;
|
|
//return YES;
|
|
if(storedIPv4 == nil) {
|
|
NSLog(@"stored IPv4 NULL");
|
|
return YES;
|
|
} else if(fetchedIPv4 == nil) {
|
|
NSLog(@"fetched IPv4 NULL");
|
|
return NO;
|
|
} else {
|
|
BOOL changed = ![storedIPv4 isEqualToString:fetchedIPv4];
|
|
NSLog(@"compare stored %@ with %@. Changed: %@", storedIPv4, fetchedIPv4, (changed ? @"yes" : @"no"));
|
|
return changed;
|
|
}
|
|
}
|
|
|
|
-(BOOL)doWebServiceUpdate {
|
|
isRequestRunning = YES;
|
|
|
|
NSString *settingTempName = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.name"];
|
|
NSString *settingTempToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.token"];
|
|
|
|
if([settingTempName length] > 0 && [settingTempToken length] > 0) {
|
|
NSLog(@"update ip to %@", usersIPv4);
|
|
|
|
NSURL *url = [NSURL URLWithString:WS_RESOURCE];
|
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
|
|
[request setHTTPMethod:@"POST"];
|
|
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
|
|
|
NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys:
|
|
settingTempName, @"domain",
|
|
settingTempToken, @"token",
|
|
nil];
|
|
NSError *error;
|
|
NSData *postData = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error];
|
|
[request setHTTPBody:postData];
|
|
|
|
/*NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
|
|
NSString *strData = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
|
|
NSLog(@"resultData: %@", strData);*/
|
|
|
|
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *resultData, NSError *error) {
|
|
NSString *strData = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
|
|
NSLog(@"resultData: %@", strData);
|
|
|
|
// locally save posted ip
|
|
[[NSUserDefaults standardUserDefaults] setObject:usersIPv4 forKey:@"value.ip.ipv4"];
|
|
|
|
isRequestRunning = NO;
|
|
}];
|
|
|
|
return YES;
|
|
} else {
|
|
return NO;
|
|
}
|
|
}
|
|
|
|
-(NSString *)fetchIPv4 {
|
|
NSURL *myIpAdress = [NSURL URLWithString:WS_GET_USERS_IP_SERVICE];
|
|
NSString *contentOfURL = [NSString stringWithContentsOfURL:myIpAdress encoding:NSUTF8StringEncoding error:NULL];
|
|
NSString *contentTrimmed = [contentOfURL stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
|
|
|
//NSLog(@"fetched IPv4: %@", contentTrimmed);
|
|
return contentTrimmed;
|
|
}
|
|
|
|
@end
|