annotate eventLogger.h @ 8:e2c6cfe8c6b7

JSON logs and presets.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Thu, 10 Jan 2013 18:24:26 +0000
parents 845ea04f8e33
children 346807b47860
rev   line source
rt300@0 1 //
rt300@0 2 // eventLogger.h
rt300@0 3 // oscSenderExample
rt300@0 4 //
rt300@0 5 // Created by Robert Tubb on 05/11/2012.
rt300@0 6 //
rt300@0 7 //
rt300@0 8 // This class handle everything to do with loggin user actions,
rt300@0 9 // uploading logs to server, and storing locally if not uploaded
rt300@0 10
rt300@0 11 #ifndef __oscSenderExample__eventLogger__
rt300@0 12 #define __oscSenderExample__eventLogger__
rt300@0 13
rt300@8 14 #define EVENT_LOG_FILENAME "log.json"
rt300@1 15
rt300@4 16 #include "ofMain.h"
rt300@4 17 #include "ofxiPhone.h"
rt300@4 18 #include "2dvector.h"
rt300@4 19 #include "ofxiPhoneExtras.h"
rt300@4 20 #include <sys/time.h>
rt300@4 21 #include <iostream>
rt300@4 22 #include <string>
rt300@4 23 #include <map>
rt300@4 24 #include "2dvector.h"
rt300@8 25 #include "json.h"
rt300@8 26
rt300@8 27 #import "iViewController.h"
rt300@8 28
rt300@8 29
rt300@8 30
rt300@5 31 enum leventType {SAVE_PRESET, SAVE_DESET, SCROLL, SCROLL_STOPPED, ZOOM, CHANGE_SLIDER, SWAP_VIEW, SET_MIN_ZOOM, SET_MAX_ZOOM};
rt300@1 32
rt300@8 33 //---------------------------------------------------------------------------
rt300@8 34
rt300@4 35 class lEvent{
rt300@5 36 public:
rt300@1 37 // try and make this as compact as possible.
rt300@4 38 leventType eventType;
rt300@1 39 double val1; // x coord, scale if zoom
rt300@1 40 double val2; // y coord, 0 if zoom
rt300@4 41 int sliderID;
rt300@8 42 lEvent(leventType eType, double v1 = 0.0, double v2 = 0.0,int sID = 0){
rt300@5 43 eventType = eType;
rt300@5 44 val1 = v1;
rt300@5 45 val2 = v2;
rt300@5 46 sliderID = sID;
rt300@5 47 }
rt300@8 48 lEvent(const Json::Value &jevt){
rt300@8 49 eventType = (leventType)jevt["eventType"].asInt();
rt300@8 50 val1 = jevt["val1"].asFloat();
rt300@8 51 val2 = jevt["val2"].asFloat();
rt300@8 52 sliderID = jevt["sliderID"].asInt();
rt300@8 53 }
rt300@8 54 Json::Value eventToJson(){
rt300@8 55 Json::Value jevt;
rt300@8 56 jevt["eventType"] = eventType;
rt300@8 57 jevt["val1"] = val1;
rt300@8 58 jevt["val2"] = val2;
rt300@8 59 jevt["sliderID"] = sliderID;
rt300@8 60 return jevt;
rt300@8 61 }
rt300@5 62 };
rt300@5 63 //---------------------------------------------------------------------------
rt300@8 64 // streams no longer used
rt300@5 65 inline istream& operator>>(istream & is, lEvent& e){
rt300@5 66 is.setf(ios_base::fixed,ios_base::floatfield);
rt300@5 67 is.precision(1);
rt300@4 68
rt300@5 69 char delim;
rt300@5 70 int eType;
rt300@0 71
rt300@5 72 is >> eType >> delim >> e.val1 >> delim >> e.val2 >> delim >> e.sliderID;
rt300@5 73
rt300@5 74 e.eventType = (leventType)eType;
rt300@5 75
rt300@5 76 return is;
rt300@5 77 }
rt300@4 78
rt300@5 79 //---------------------------------------------------------------------------
rt300@5 80 inline ostream& operator<<(ostream & os, const lEvent& e){
rt300@5 81 os.setf(ios_base::fixed,ios_base::floatfield);
rt300@5 82 os.precision(1);
rt300@5 83
rt300@5 84 os << e.eventType << ',' << e.val1 << ',' << e.val2 << ',' << e.sliderID << '\n';
rt300@5 85
rt300@5 86 return os;
rt300@7 87 }
rt300@5 88 //---------------------------------------------------------------------------
rt300@4 89
rt300@0 90 class EventLogger{
rt300@0 91 public:
rt300@0 92 // what we need...
rt300@0 93 /*
rt300@0 94 time, type, value
rt300@0 95 */
rt300@5 96 bool loggingEnabled;
rt300@5 97
rt300@4 98 vector<lEvent> theEvents;
rt300@0 99
rt300@8 100
rt300@8 101 // values applicable to all events
rt300@8 102 unsigned int deviceID; // unique get something from hardware??
rt300@7 103 unsigned int totalInteractionTime, sessionTime, sessionStartTime;
rt300@8 104 string userName; // not unique
rt300@8 105 unsigned int nextUploadQty;
rt300@1 106 EventLogger();
rt300@7 107 void init();
rt300@8 108 void setUsername(const char *u);
rt300@5 109 void logEvent(const leventType& evtType,const TwoVector& centre = TwoVector(), const double& scale = 1.0, const int& sliderID = -1, const double& sliderVal = 0.0);
rt300@5 110 void logEvent(const leventType& evtType,const int& sliderID, const double& sliderVal);
rt300@1 111 void sendHttp();
rt300@7 112 void checkLogFile();
rt300@8 113 bool attemptUpload();
rt300@7 114 void firstEverAppOpen();
rt300@8 115 void readJsonToLog(const string &jsonFile);
rt300@7 116 void exitAndSave();
rt300@8 117 Json::Value logsToJson();
rt300@5 118 void printAll(){
rt300@5 119 cout << "ALL LOGGED EVENTS!: \n";
rt300@5 120 vector<lEvent>::iterator evIter;
rt300@5 121 for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){
rt300@5 122 cout << *evIter;
rt300@5 123
rt300@5 124 }
rt300@5 125 };
rt300@0 126 };
rt300@0 127
rt300@0 128
rt300@8 129 //---------------------------------------------------------------------------
rt300@8 130
rt300@5 131
rt300@0 132 #endif /* defined(__oscSenderExample__eventLogger__) */