annotate ServerComms.mm @ 44:a1e75b94c505

Snap to eval points. Double tap to go to preset (doesn't quite work yet). Coloured locks. Changed Question 2. Fixed some leaks.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Mon, 22 Apr 2013 18:32:34 +0100
parents 79c129e500e1
children 0d3a993405e4
rev   line source
rt300@29 1 //
rt300@29 2 // ServerComms.m
rt300@30 3 // httpPost
rt300@29 4 //
rt300@30 5 // Created by Robert Tubb on 24/02/2013.
rt300@30 6 // Copyright (c) 2013 Robert Tubb. All rights reserved.
rt300@29 7 //
rt300@29 8
rt300@29 9 #import "ServerComms.h"
rt300@30 10 #import "eventLogger.h"
rt300@30 11
rt300@30 12 extern EventLogger eventLogger;
rt300@29 13
rt300@29 14 @implementation ServerComms
rt300@30 15 //
rt300@31 16 -(id)init{
rt300@31 17 self = [super init];
rt300@31 18 if(self != nil){
rt300@31 19 self.requestInProgress = NO;
rt300@31 20 }
rt300@31 21 return self;
rt300@31 22 }
rt300@41 23 //-------------------------------------------------------------------------------
rt300@30 24 // asynchronous one
rt300@30 25 -(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data{
rt300@30 26
rt300@30 27 if(self.requestInProgress){
rt300@30 28 return NO;
rt300@30 29 }
rt300@30 30 self.currentRequestType = type;
rt300@30 31 NSString *localServerURL = @"http://127.0.0.1:8080/testservice/";
rt300@30 32 NSString *webServerURL = @"http://www.isophonics.net/datacollector/";
rt300@30 33
rt300@32 34 NSString *urls = [webServerURL stringByAppendingString:type];
rt300@30 35 NSURL *url = [NSURL URLWithString:urls];
rt300@30 36
rt300@30 37
rt300@30 38 // request object
rt300@30 39 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
rt300@30 40
rt300@30 41 // the data
rt300@30 42 NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]];
rt300@30 43 NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
rt300@30 44 // length of data
rt300@30 45 NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
rt300@30 46
rt300@30 47 // request properties/header fields
rt300@30 48 [request setHTTPMethod:@"POST"];
rt300@30 49 [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
rt300@30 50 [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
rt300@30 51 [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
rt300@30 52 [request setHTTPBody:postData ];
rt300@30 53
rt300@30 54 NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
rt300@44 55 [theConnection release];
rt300@30 56 self.requestInProgress = YES;
rt300@30 57 return YES;
rt300@30 58 // asynchronous one??
rt300@29 59 }
rt300@30 60 //--------------------------------------------------------------------
rt300@30 61
rt300@30 62 // schncronous
rt300@30 63 -(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data{
rt300@30 64 BOOL success;
rt300@29 65
rt300@30 66 NSString *localServerURL = @"http://127.0.0.1:8080/testservice/";
rt300@30 67 NSString *webServerURL = @"http://www.isophonics.net/datacollector/";
rt300@30 68
rt300@32 69 NSString *urls = [webServerURL stringByAppendingString:type];
rt300@30 70 NSURL *url = [NSURL URLWithString:urls];
rt300@30 71
rt300@30 72
rt300@30 73 // request object
rt300@30 74 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
rt300@30 75
rt300@30 76 // the data
rt300@30 77 NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]];
rt300@30 78 NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
rt300@30 79 // length of data
rt300@30 80 NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
rt300@30 81
rt300@30 82 // request properties/header fields
rt300@29 83 [request setHTTPMethod:@"POST"];
rt300@30 84 [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
rt300@30 85 [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
rt300@30 86 [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
rt300@30 87 [request setHTTPBody:postData ];
rt300@29 88
rt300@30 89 NSURLResponse* response;
rt300@30 90 NSError* error = nil;
rt300@30 91 NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
rt300@30 92
rt300@30 93 NSString *responseDataString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
rt300@29 94
rt300@30 95 //NSString* responseDataString = [NSString stringWithUTF8String: ];
rt300@32 96 NSLog(@"sync req. data %@", responseDataString);
rt300@30 97 [self.data appendData:result];
rt300@29 98
rt300@30 99 if([responseDataString isEqualToString:@"testConnection:OK"]){
rt300@30 100
rt300@30 101 eventLogger.testConnectionOK();
rt300@36 102 [responseDataString release];
rt300@30 103 success = true;
rt300@30 104 }else if([responseDataString isEqualToString:@"questionnaire:OK"]){
rt300@30 105 eventLogger.questionnaireOK();
rt300@30 106 success = true;
rt300@30 107 }else if([responseDataString isEqualToString:@"eventlog:OK"]){
rt300@30 108 // call eventLogger eventlogUploadOK
rt300@30 109 eventLogger.eventlogOK();
rt300@30 110 success = true;
rt300@30 111 }else{
rt300@30 112 success = false;
rt300@31 113 if([type isEqualToString:@"testConnection"]) eventLogger.testConnectionNotOK();
rt300@31 114 if([type isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK();
rt300@31 115 if([type isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK();
rt300@30 116 }
rt300@29 117
rt300@30 118 // else check error??
rt300@30 119
rt300@30 120 // check result
rt300@30 121 self.requestInProgress = NO;
rt300@30 122 return success;
rt300@30 123 }
rt300@30 124 //-------------------------------------------------------------------------------------------------
rt300@30 125
rt300@30 126 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
rt300@30 127 [self.data setLength:0];
rt300@30 128 NSLog(@"didReceiveResponse : %@",response);
rt300@29 129 }
rt300@29 130
rt300@30 131 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
rt300@30 132 NSString *responseDataString = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
rt300@30 133
rt300@30 134 //NSString* responseDataString = [NSString stringWithUTF8String: ];
rt300@31 135 NSLog(@" %@ didRecieveData %@",self.currentRequestType, responseDataString);
rt300@30 136 [self.data appendData:d];
rt300@30 137
rt300@30 138 if([responseDataString isEqualToString:@"testConnection:OK"]){
rt300@29 139
rt300@30 140 eventLogger.testConnectionOK();
rt300@36 141 [responseDataString release];
rt300@30 142 }else if([responseDataString isEqualToString:@"questionnaire:OK"]){
rt300@30 143 eventLogger.questionnaireOK();
rt300@30 144 }else if([responseDataString isEqualToString:@"eventlog:OK"]){
rt300@30 145 // call eventLogger eventlogUploadOK
rt300@30 146 eventLogger.eventlogOK();
rt300@31 147 }else{
rt300@31 148 if([self.currentRequestType isEqualToString:@"testConnection"]) eventLogger.testConnectionNotOK();
rt300@31 149 if([self.currentRequestType isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK();
rt300@31 150 if([self.currentRequestType isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK();
rt300@30 151 }
rt300@29 152 }
rt300@41 153 //-------------------------------------------------------------------------------
rt300@30 154 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
rt300@31 155
rt300@30 156 NSLog(@"fail with error");
rt300@31 157 if([self.currentRequestType isEqualToString:@"testConnection"]) {
rt300@31 158 UIAlertView * av = [ [UIAlertView alloc] initWithTitle:NSLocalizedString(@"Sorry", @"")
rt300@31 159 message:[error localizedDescription]
rt300@31 160 delegate:nil
rt300@31 161 cancelButtonTitle:NSLocalizedString(@"OK", @"")
rt300@31 162 otherButtonTitles:nil ];
rt300@31 163 [av show];
rt300@31 164 eventLogger.testConnectionNotOK();
rt300@31 165
rt300@31 166 }
rt300@31 167 if([self.currentRequestType isEqualToString:@"eventlog"]) eventLogger.eventlogNotOK();
rt300@31 168 if([self.currentRequestType isEqualToString:@"questionnaire"]) eventLogger.questionnaireNotOK();
rt300@30 169 self.requestInProgress = NO;
rt300@30 170 // we won't know what kind of request method this was...
rt300@29 171 }
rt300@41 172 //-------------------------------------------------------------------------------
rt300@30 173 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
rt300@30 174 NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
rt300@30 175
rt300@30 176 // Do anything you want with it
rt300@30 177 NSLog(@"response text: %@",responseText);
rt300@36 178 [responseText release];
rt300@36 179
rt300@30 180 self.requestInProgress = NO;
rt300@30 181
rt300@29 182 }
rt300@41 183 //-------------------------------------------------------------------------------
rt300@30 184 // Handle basic authentication challenge if needed
rt300@30 185 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
rt300@30 186 NSString *username = @"username";
rt300@30 187 NSString *password = @"password";
rt300@30 188
rt300@30 189 NSURLCredential *credential = [NSURLCredential credentialWithUser:username
rt300@30 190 password:password
rt300@30 191 persistence:NSURLCredentialPersistenceForSession];
rt300@30 192 [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
rt300@30 193 }
rt300@30 194 /*
rt300@30 195 - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse{
rt300@30 196
rt300@30 197 }
rt300@29 198 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{
rt300@29 199
rt300@29 200 }
rt300@30 201 */
rt300@41 202 //-------------------------------------------------------------------------------
rt300@29 203 @end