rt300@29: // rt300@29: // ServerComms.m rt300@30: // httpPost rt300@29: // rt300@30: // Created by Robert Tubb on 24/02/2013. rt300@30: // Copyright (c) 2013 Robert Tubb. All rights reserved. rt300@29: // rt300@29: rt300@29: #import "ServerComms.h" rt300@30: #import "eventLogger.h" rt300@30: rt300@30: extern EventLogger eventLogger; rt300@29: rt300@29: @implementation ServerComms rt300@30: // rt300@31: -(id)init{ rt300@31: self = [super init]; rt300@31: if(self != nil){ rt300@31: self.requestInProgress = NO; rt300@31: } rt300@31: return self; rt300@31: } rt300@41: //------------------------------------------------------------------------------- rt300@30: // asynchronous one rt300@30: -(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data{ rt300@30: rt300@30: if(self.requestInProgress){ rt300@30: return NO; rt300@30: } rt300@30: self.currentRequestType = type; rt300@30: NSString *localServerURL = @"http://127.0.0.1:8080/testservice/"; rt300@30: NSString *webServerURL = @"http://www.isophonics.net/datacollector/"; rt300@30: rt300@32: NSString *urls = [webServerURL stringByAppendingString:type]; rt300@30: NSURL *url = [NSURL URLWithString:urls]; rt300@30: rt300@30: rt300@30: // request object rt300@30: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; rt300@30: rt300@30: // the data rt300@30: NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]]; rt300@30: NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; rt300@30: // length of data rt300@30: NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; rt300@30: rt300@30: // request properties/header fields rt300@30: [request setHTTPMethod:@"POST"]; rt300@30: [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; rt300@30: [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; rt300@30: [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; rt300@30: [request setHTTPBody:postData ]; rt300@30: rt300@30: NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; rt300@44: [theConnection release]; rt300@30: self.requestInProgress = YES; rt300@30: return YES; rt300@30: // asynchronous one?? rt300@29: } rt300@30: //-------------------------------------------------------------------- rt300@30: rt300@30: // schncronous rt300@30: -(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data{ rt300@30: BOOL success; rt300@29: rt300@30: NSString *localServerURL = @"http://127.0.0.1:8080/testservice/"; rt300@30: NSString *webServerURL = @"http://www.isophonics.net/datacollector/"; rt300@30: rt300@32: NSString *urls = [webServerURL stringByAppendingString:type]; rt300@30: NSURL *url = [NSURL URLWithString:urls]; rt300@30: rt300@30: rt300@30: // request object rt300@30: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; rt300@30: rt300@30: // the data rt300@30: NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]]; rt300@30: NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; rt300@30: // length of data rt300@30: NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; rt300@30: rt300@30: // request properties/header fields rt300@29: [request setHTTPMethod:@"POST"]; rt300@30: [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; rt300@30: [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; rt300@30: [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; rt300@30: [request setHTTPBody:postData ]; rt300@29: rt300@30: NSURLResponse* response; rt300@30: NSError* error = nil; rt300@30: NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; rt300@30: rt300@30: NSString *responseDataString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; rt300@29: rt300@30: //NSString* responseDataString = [NSString stringWithUTF8String: ]; rt300@32: NSLog(@"sync req. data %@", responseDataString); rt300@30: [self.data appendData:result]; rt300@29: rt300@30: if([responseDataString isEqualToString:@"testConnection:OK"]){ rt300@30: rt300@30: eventLogger.testConnectionOK(); rt300@47: rt300@30: success = true; rt300@30: }else if([responseDataString isEqualToString:@"questionnaire:OK"]){ rt300@30: eventLogger.questionnaireOK(); rt300@47: rt300@30: success = true; rt300@30: }else if([responseDataString isEqualToString:@"eventlog:OK"]){ rt300@30: // call eventLogger eventlogUploadOK rt300@30: eventLogger.eventlogOK(); rt300@30: success = true; rt300@30: }else{ rt300@30: success = false; rt300@31: if([type isEqualToString:@"testConnection"]) eventLogger.testConnectionNotOK(); rt300@31: if([type isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK(); rt300@31: if([type isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK(); rt300@30: } rt300@29: rt300@30: // else check error?? rt300@30: rt300@30: // check result rt300@30: self.requestInProgress = NO; rt300@47: [responseDataString release]; rt300@30: return success; rt300@30: } rt300@30: //------------------------------------------------------------------------------------------------- rt300@30: rt300@30: - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { rt300@30: [self.data setLength:0]; rt300@30: NSLog(@"didReceiveResponse : %@",response); rt300@29: } rt300@29: rt300@30: - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { rt300@30: NSString *responseDataString = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]; rt300@30: rt300@30: //NSString* responseDataString = [NSString stringWithUTF8String: ]; rt300@31: NSLog(@" %@ didRecieveData %@",self.currentRequestType, responseDataString); rt300@30: [self.data appendData:d]; rt300@30: rt300@30: if([responseDataString isEqualToString:@"testConnection:OK"]){ rt300@29: rt300@30: eventLogger.testConnectionOK(); rt300@36: [responseDataString release]; rt300@30: }else if([responseDataString isEqualToString:@"questionnaire:OK"]){ rt300@30: eventLogger.questionnaireOK(); rt300@30: }else if([responseDataString isEqualToString:@"eventlog:OK"]){ rt300@30: // call eventLogger eventlogUploadOK rt300@30: eventLogger.eventlogOK(); rt300@31: }else{ rt300@31: if([self.currentRequestType isEqualToString:@"testConnection"]) eventLogger.testConnectionNotOK(); rt300@31: if([self.currentRequestType isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK(); rt300@31: if([self.currentRequestType isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK(); rt300@30: } rt300@29: } rt300@41: //------------------------------------------------------------------------------- rt300@30: - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { rt300@31: rt300@30: NSLog(@"fail with error"); rt300@31: if([self.currentRequestType isEqualToString:@"testConnection"]) { rt300@31: UIAlertView * av = [ [UIAlertView alloc] initWithTitle:NSLocalizedString(@"Sorry", @"") rt300@31: message:[error localizedDescription] rt300@31: delegate:nil rt300@31: cancelButtonTitle:NSLocalizedString(@"OK", @"") rt300@31: otherButtonTitles:nil ]; rt300@31: [av show]; rt300@31: eventLogger.testConnectionNotOK(); rt300@31: rt300@31: } rt300@31: if([self.currentRequestType isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK(); rt300@31: if([self.currentRequestType isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK(); rt300@30: self.requestInProgress = NO; rt300@30: // we won't know what kind of request method this was... rt300@29: } rt300@41: //------------------------------------------------------------------------------- rt300@30: - (void)connectionDidFinishLoading:(NSURLConnection *)connection { rt300@30: NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]; rt300@30: rt300@30: // Do anything you want with it rt300@30: NSLog(@"response text: %@",responseText); rt300@36: [responseText release]; rt300@36: rt300@30: self.requestInProgress = NO; rt300@30: rt300@29: } rt300@41: //------------------------------------------------------------------------------- rt300@30: // Handle basic authentication challenge if needed rt300@30: - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { rt300@30: NSString *username = @"username"; rt300@30: NSString *password = @"password"; rt300@30: rt300@30: NSURLCredential *credential = [NSURLCredential credentialWithUser:username rt300@30: password:password rt300@30: persistence:NSURLCredentialPersistenceForSession]; rt300@30: [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; rt300@30: } rt300@30: /* rt300@30: - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse{ rt300@30: rt300@30: } rt300@29: - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{ rt300@29: rt300@29: } rt300@30: */ rt300@41: //------------------------------------------------------------------------------- rt300@29: @end