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__) */
|