diff ServerComms.mm @ 0:a223551fdc1f

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