Mercurial > hg > soniczoomios
diff eventLogger.mm @ 27:ae4d2c3ce5e0
Details. Zoom trailing finger move sorted. Qs rephrased.
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Wed, 13 Feb 2013 17:03:56 +0000 |
parents | f42a00e3f22d |
children | e2c62db1e265 |
line wrap: on
line diff
--- a/eventLogger.mm Fri Feb 01 18:31:43 2013 +0000 +++ b/eventLogger.mm Wed Feb 13 17:03:56 2013 +0000 @@ -20,12 +20,13 @@ serverConnectionOK = false; questionnaireCompleted = false; questionnaireUploaded = false; - - + currentHTTPRequestID = -1; + logUploadInProgress = false; ofxiPhoneDeviceType iOSdeviceType = ofxiPhoneGetDeviceType(); cout << "Device: " << iOSdeviceType << '\n'; nextUploadQty = UPLOAD_CHUNK_SIZE; // amount of data uploaded is always more than UPLOAD_CHUNK_SIZE events + } //--------------------------------------------------------------------------- // draw() - show path of last N scroll events - can be scrubbed along? @@ -50,15 +51,15 @@ } //--------------------------------------------------------------------------- -bool EventLogger::uploadQuestionnaire(){ +void EventLogger::uploadQuestionnaire(){ // show indicator cout << "^^^^^^^^ UPLOADING QUESTIONNAIRE ^^^^^^^^ \n"; - questionnaireUploaded = sendToServer("questionnaire", questionnaireToJson()); - return questionnaireUploaded; + sendToServer("questionnaire", questionnaireToJson(), true); + } //--------------------------------------------------------------------------- -bool EventLogger::sendToServer(string functionName, Json::Value jsonData){ +bool EventLogger::sendToServer(string functionName, Json::Value jsonData, bool async = false){ bool sent; string request; @@ -72,25 +73,63 @@ Json::FastWriter writer; string jsontext = writer.write( jsonData ); + // remove newline if (!jsontext.empty() && jsontext[jsontext.length()-1] == '\n') { jsontext.erase(jsontext.length()-1); } request.append(jsontext); + + if(!async){ + ofURLFileLoader fileLoader; + ofHttpResponse resp; + resp = fileLoader.get(request); - ofURLFileLoader fileLoader; - ofHttpResponse resp; - resp = fileLoader.get(request); - //fileLoader.getAsync(request); - cout << "HTTP STATUS " << resp.status << "\n"; - cout << "HTTP ERROR " << resp.error << "\n"; - cout << "HTTP DATA " << resp.data << "\n"; // ofBuffer + cout << "HTTP STATUS " << resp.status << "\n"; + cout << "HTTP ERROR " << resp.error << "\n"; + cout << "HTTP DATA " << resp.data << "\n"; // ofBuffer + + stringstream response; + response << resp.data; + + if (resp.status == 200){ + if(response.str() == "OK"){ + + sent = true; + }else{ + // not ok + // problem serverside + sent = false; + } + }else{ + + sent = false; + // SHOW AN ALERT TO USER? + } + + return sent; + }else{ // async + ofURLFileLoader fileLoader; + currentHTTPRequestID = ofLoadURLAsync(request, functionName); + ofRegisterURLNotification(this); + + return true; // ??? + } +} +//----------------------------- +void EventLogger::urlResponse(ofHttpResponse & response){ + cout << "gotHTTPRequestStatus\n"; + cout << "HTTP REQUEST NAME " << response.request.name << "\n"; + cout << "HTTP STATUS " << response.status << "\n"; + cout << "HTTP ERROR " << response.error << "\n"; + cout << "HTTP DATA " << response.data << "\n"; // ofBuffer - stringstream response; - response << resp.data; + bool sent; + stringstream respStr; + respStr << response.data; - if (resp.status == 200){ - if(response.str() == "OK"){ + if (response.status == 200){ + if(respStr.str() == "OK"){ sent = true; }else{ @@ -103,7 +142,36 @@ sent = false; // SHOW AN ALERT TO USER? } - return sent; + + // now do request specific stuff + if(response.request.name == "eventlog"){ + if(!sent){ + // try later + nextUploadQty += UPLOAD_CHUNK_SIZE; + }else{ + + // if success - clear memory + theEvents.clear(); + cout << "UPLOAD SUCCESS\n"; + nextUploadNumber++; + } + logUploadInProgress = false; + }else if(response.request.name == "questionnaire"){ + if(sent){ + questionnaireUploaded = true; + }else{ + questionnaireUploaded = false; // will try next time... when? + } + }else if(response.request.name == "testConnection"){ + + if (sent){ + cout << "^^^^^^^^ server connection OK ^^^^^^^^ \n"; + serverConnectionOK = true; + }else{ + cout << "server connection ERROR \n"; + } + } + } //--------------------------------------------------------------------------- bool EventLogger::testConnection(){ @@ -111,12 +179,8 @@ root["test"] = "test"; - serverConnectionOK = sendToServer("testConnection", root); - if (serverConnectionOK){ - cout << "^^^^^^^^ server connection OK ^^^^^^^^ \n"; - }else{ - cout << "server connection ERROR \n"; - } + sendToServer("testConnection", root, true); + } //--------------------------------------------------------------------------- void EventLogger::readJsonToLog(const string &jsonFile){ @@ -179,9 +243,9 @@ const Json::Value jlogs = root["events"]; for ( int index = 0; index < jlogs.size(); ++index ) theEvents.push_back(lEvent(jlogs[index])); - if(theEvents.size() > nextUploadQty){ + if(theEvents.size() > nextUploadQty && ! logUploadInProgress){ //try to upload - uploadEventLog(); + uploadEventLog(true); } // TODO if the total interaction time is greater than a certain amount && no questions answered - questionnaire time! cout << "Total interaction time: " << savedInteractionTime << '\n'; @@ -192,26 +256,31 @@ //--------------------------------------------------------------------------- -bool EventLogger::uploadEventLog(){ +bool EventLogger::uploadEventLog(bool async){ // show indicator - + logUploadInProgress = true; cout << "^^^^^^^^ ATTEMPTING TO UPLOAD " << theEvents.size() << " EVENTS ^^^^^^^^ .\n"; - - bool logUploaded = sendToServer("eventlog", logsToJson()); - if(!logUploaded){ - // try later - nextUploadQty += UPLOAD_CHUNK_SIZE; + if(!async){ + bool success = sendToServer("eventlog", logsToJson(), async); + if(!success){ + // try later + nextUploadQty += UPLOAD_CHUNK_SIZE; + }else{ + + // if success - clear memory + theEvents.clear(); + cout << "UPLOAD SUCCESS\n"; + nextUploadNumber++; + } + logUploadInProgress = false; + return success; }else{ - - // if success - clear memory - theEvents.clear(); - cout << "UPLOAD SUCCESS\n"; - nextUploadNumber++; + sendToServer("eventlog", logsToJson(), async); } - return logUploaded; - } //---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- //void EventLogger::deleteLogFile(){ //--------------------------------------------------------------------------- @@ -228,6 +297,17 @@ consentGiven = false; } +void EventLogger::newUser(){ + cout<<"setup new user\n"; + nextUploadNumber = 0; + deviceID = ofGetSystemTimeMicros(); + savedInteractionTime = 0; + questionnaireCompleted = false; + questionnaireUploaded = false; + consentGiven = true; // other wise we wouldn't be doing this + ((testApp *)ofGetAppPtr())->introHidden(true); // hacky + +} //--------------------------------------------------------------------------- // called from alertView OK in iViewController void EventLogger::setUsername(const char *u){ @@ -283,9 +363,9 @@ theEvents.push_back(lEvent(evtType)); break; } - if(theEvents.size() > nextUploadQty){ - //try to upload - uploadEventLog(); + if(theEvents.size() > nextUploadQty && !logUploadInProgress){ + //try to upload asynchronously + uploadEventLog(true); } //sessionTime = (ofGetSystemTime() - sessionStartTime); totalInteractionTime = savedInteractionTime + (ofGetSystemTime() - sessionStartTime); @@ -303,7 +383,7 @@ logEvent(CONSENT_DENIED); Json::Value jlogs = logsToJson(); // try to upload TODO (no - might hang and prevent exit???) - uploadEventLog(); + uploadEventLog(true); return; } logEvent(APP_EXITED); @@ -312,7 +392,8 @@ string fname = ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME; // try to upload TODO (no - might hang and prevent exit???) - uploadEventLog(); + // do it async because event list needs to be cleared to prevent saving on device + uploadEventLog(false); // write to file // json without the logs that were uploaded!