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