Mercurial > hg > soniczoomios
view eventLogger.h @ 24:a4908ad8c78e
Top and bottom toolbars. Intro page.
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Fri, 01 Feb 2013 11:16:56 +0000 |
parents | 8c0783739337 |
children | f42a00e3f22d |
line wrap: on
line source
// // eventLogger.h // oscSenderExample // // Created by Robert Tubb on 05/11/2012. // // // This class handle everything to do with loggin user actions, // uploading logs to server, and storing locally if not uploaded #ifndef __oscSenderExample__eventLogger__ #define __oscSenderExample__eventLogger__ #define EVENT_LOG_FILENAME "log.json" #define SERVER_URL "http://127.0.0.1:8080/testservice/" #include "ofMain.h" #include "ofxiPhone.h" #include "2dvector.h" #include "ofxiPhoneExtras.h" #include <sys/time.h> #include <iostream> #include <string> #include <cstring> #include <map> #include "2dvector.h" #include "json.h" #include "testApp.h" #import "usernameAlertViewController.h" // can add but don't change ordering - this will invalidate logs #define PROGRAM_VERSION 1.0 enum leventType {SAVE_PRESET, SAVE_DESET, SCROLL, ZOOM, SCROLL_STOPPED, ZOOM_STOPPED, SNAPPED_TO_PRESET, CHANGE_SLIDER, SWAP_VIEW, SET_MIN_ZOOM, SET_MAX_ZOOM}; //--------------------------------------------------------------------------- class lEvent{ public: // try and make this as compact as possible. leventType eventType; double val1; // x coord, scale if zoom double val2; // y coord, 0 if zoom int sliderID; long long eventTime; lEvent(leventType eType, double v1 = 0.0, double v2 = 0.0,int sID = 0){ eventType = eType; val1 = v1; val2 = v2; sliderID = sID; double timemsd = [NSDate timeIntervalSinceReferenceDate]; eventTime = (unsigned long long)(timemsd*1000); } lEvent(const Json::Value &jevt){ // constructor takes "jsonToEvent" readfile function role eventType = (leventType)jevt["eventType"].asInt(); val1 = jevt["val1"].asFloat(); val2 = jevt["val2"].asFloat(); sliderID = jevt["sliderID"].asInt(); eventTime = jevt["eventTime"].asLargestInt(); // TODO what happens if we try to read one that isn't there? } Json::Value eventToJson(){ Json::Value jevt; jevt["eventType"] = eventType; jevt["val1"] = val1; jevt["val2"] = val2; jevt["sliderID"] = sliderID; jevt["eventTime"] = eventTime; return jevt; } }; //--------------------------------------------------------------------------- // streams no longer used inline istream& operator>>(istream & is, lEvent& e){ is.setf(ios_base::fixed,ios_base::floatfield); is.precision(1); char delim; int eType; is >> eType >> delim >> e.val1 >> delim >> e.val2 >> delim >> e.sliderID; e.eventType = (leventType)eType; return is; } //--------------------------------------------------------------------------- inline ostream& operator<<(ostream & os, const lEvent& e){ os.setf(ios_base::fixed,ios_base::floatfield); os.precision(1); os << e.eventType << ',' << e.val1 << ',' << e.val2 << ',' << e.sliderID << '\n'; return os; } //--------------------------------------------------------------------------- class EventLogger{ public: bool loggingEnabled; bool serverConnectionOK; unsigned int deviceID; // unique get something from hardware?? unsigned int totalInteractionTime, sessionTime, sessionStartTime; string userName; // not unique EventLogger(); void init(); void exitAndSave(); void setUsername(const char *u); void logEvent(const leventType& evtType,const TwoVector& centre = TwoVector(), const double& scale = 1.0, const int& sliderID = -1, const double& sliderVal = 0.0); void questionnaireAnswersObtained(vector<int> answers); private: // what we need... /* time, type, value */ vector<lEvent> theEvents; // values applicable to all events unsigned int nextUploadQty; ofxiPhoneDeviceType iOSdeviceType; bool testConnection(); vector<int> questionnaireAnswers; bool questionnaireCompleted; bool questionnaireUploaded; void checkLogFile(); bool uploadEventLog(); void firstEverAppOpen(); void readJsonToLog(const string &jsonFile); bool uploadQuestionnaire(); bool sendToServer(string functionName, Json::Value jsonData); Json::Value logsToJson(); Json::Value questionnaireToJson(); void printAll(){ cout << "ALL LOGGED EVENTS!: \n"; vector<lEvent>::iterator evIter; for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){ cout << *evIter; } }; }; //--------------------------------------------------------------------------- #endif /* defined(__oscSenderExample__eventLogger__) */