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@16
|
27 #import "usernameAlertViewController.h"
|
rt300@16
|
28
|
rt300@8
|
29
|
rt300@9
|
30 // can add but don't change ordering - this will invalidate logs
|
rt300@9
|
31 enum leventType {SAVE_PRESET,
|
rt300@9
|
32 SAVE_DESET,
|
rt300@9
|
33 SCROLL,
|
rt300@9
|
34 SCROLL_STOPPED,
|
rt300@9
|
35 ZOOM,
|
rt300@9
|
36 CHANGE_SLIDER,
|
rt300@9
|
37 SWAP_VIEW,
|
rt300@9
|
38 SET_MIN_ZOOM,
|
rt300@9
|
39 SET_MAX_ZOOM};
|
rt300@1
|
40
|
rt300@8
|
41 //---------------------------------------------------------------------------
|
rt300@8
|
42
|
rt300@4
|
43 class lEvent{
|
rt300@5
|
44 public:
|
rt300@1
|
45 // try and make this as compact as possible.
|
rt300@4
|
46 leventType eventType;
|
rt300@1
|
47 double val1; // x coord, scale if zoom
|
rt300@1
|
48 double val2; // y coord, 0 if zoom
|
rt300@4
|
49 int sliderID;
|
rt300@9
|
50 long long eventTime;
|
rt300@8
|
51 lEvent(leventType eType, double v1 = 0.0, double v2 = 0.0,int sID = 0){
|
rt300@5
|
52 eventType = eType;
|
rt300@5
|
53 val1 = v1;
|
rt300@5
|
54 val2 = v2;
|
rt300@5
|
55 sliderID = sID;
|
rt300@9
|
56
|
rt300@9
|
57 double timemsd = [NSDate timeIntervalSinceReferenceDate];
|
rt300@9
|
58 eventTime = (unsigned long long)(timemsd*1000);
|
rt300@9
|
59
|
rt300@5
|
60 }
|
rt300@8
|
61 lEvent(const Json::Value &jevt){
|
rt300@9
|
62 // constructor takes "jsonToEvent" readfile function role
|
rt300@8
|
63 eventType = (leventType)jevt["eventType"].asInt();
|
rt300@8
|
64 val1 = jevt["val1"].asFloat();
|
rt300@8
|
65 val2 = jevt["val2"].asFloat();
|
rt300@8
|
66 sliderID = jevt["sliderID"].asInt();
|
rt300@9
|
67 eventTime = jevt["eventTime"].asLargestInt();
|
rt300@9
|
68
|
rt300@15
|
69 // TODO what happens if we try to read one that isn't there?
|
rt300@15
|
70
|
rt300@8
|
71 }
|
rt300@8
|
72 Json::Value eventToJson(){
|
rt300@8
|
73 Json::Value jevt;
|
rt300@8
|
74 jevt["eventType"] = eventType;
|
rt300@8
|
75 jevt["val1"] = val1;
|
rt300@8
|
76 jevt["val2"] = val2;
|
rt300@8
|
77 jevt["sliderID"] = sliderID;
|
rt300@9
|
78 jevt["eventTime"] = eventTime;
|
rt300@8
|
79 return jevt;
|
rt300@8
|
80 }
|
rt300@5
|
81 };
|
rt300@5
|
82 //---------------------------------------------------------------------------
|
rt300@8
|
83 // streams no longer used
|
rt300@5
|
84 inline istream& operator>>(istream & is, lEvent& e){
|
rt300@5
|
85 is.setf(ios_base::fixed,ios_base::floatfield);
|
rt300@5
|
86 is.precision(1);
|
rt300@4
|
87
|
rt300@5
|
88 char delim;
|
rt300@5
|
89 int eType;
|
rt300@0
|
90
|
rt300@5
|
91 is >> eType >> delim >> e.val1 >> delim >> e.val2 >> delim >> e.sliderID;
|
rt300@5
|
92
|
rt300@5
|
93 e.eventType = (leventType)eType;
|
rt300@5
|
94
|
rt300@5
|
95 return is;
|
rt300@5
|
96 }
|
rt300@4
|
97
|
rt300@5
|
98 //---------------------------------------------------------------------------
|
rt300@5
|
99 inline ostream& operator<<(ostream & os, const lEvent& e){
|
rt300@5
|
100 os.setf(ios_base::fixed,ios_base::floatfield);
|
rt300@5
|
101 os.precision(1);
|
rt300@5
|
102
|
rt300@5
|
103 os << e.eventType << ',' << e.val1 << ',' << e.val2 << ',' << e.sliderID << '\n';
|
rt300@5
|
104
|
rt300@5
|
105 return os;
|
rt300@7
|
106 }
|
rt300@5
|
107 //---------------------------------------------------------------------------
|
rt300@4
|
108
|
rt300@0
|
109 class EventLogger{
|
rt300@0
|
110 public:
|
rt300@14
|
111 bool loggingEnabled;
|
rt300@14
|
112 bool internetConnectionOK;
|
rt300@14
|
113 unsigned int deviceID; // unique get something from hardware??
|
rt300@14
|
114 unsigned int totalInteractionTime, sessionTime, sessionStartTime;
|
rt300@14
|
115 string userName; // not unique
|
rt300@14
|
116
|
rt300@14
|
117 EventLogger();
|
rt300@14
|
118 void init();
|
rt300@14
|
119 void exitAndSave();
|
rt300@14
|
120 void setUsername(const char *u);
|
rt300@14
|
121 void logEvent(const leventType& evtType,const TwoVector& centre = TwoVector(), const double& scale = 1.0, const int& sliderID = -1, const double& sliderVal = 0.0);
|
rt300@14
|
122
|
rt300@14
|
123
|
rt300@14
|
124 private:
|
rt300@0
|
125 // what we need...
|
rt300@0
|
126 /*
|
rt300@0
|
127 time, type, value
|
rt300@0
|
128 */
|
rt300@14
|
129
|
rt300@14
|
130
|
rt300@4
|
131 vector<lEvent> theEvents;
|
rt300@0
|
132
|
rt300@16
|
133
|
rt300@14
|
134 // values applicable to all events
|
rt300@14
|
135
|
rt300@14
|
136 unsigned int nextUploadQty;
|
rt300@14
|
137
|
rt300@8
|
138
|
rt300@14
|
139
|
rt300@9
|
140 bool testConnection();
|
rt300@14
|
141
|
rt300@9
|
142
|
rt300@1
|
143 void sendHttp();
|
rt300@7
|
144 void checkLogFile();
|
rt300@8
|
145 bool attemptUpload();
|
rt300@7
|
146 void firstEverAppOpen();
|
rt300@8
|
147 void readJsonToLog(const string &jsonFile);
|
rt300@14
|
148
|
rt300@8
|
149 Json::Value logsToJson();
|
rt300@5
|
150 void printAll(){
|
rt300@5
|
151 cout << "ALL LOGGED EVENTS!: \n";
|
rt300@5
|
152 vector<lEvent>::iterator evIter;
|
rt300@5
|
153 for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){
|
rt300@5
|
154 cout << *evIter;
|
rt300@5
|
155
|
rt300@5
|
156 }
|
rt300@5
|
157 };
|
rt300@0
|
158 };
|
rt300@0
|
159
|
rt300@0
|
160
|
rt300@8
|
161 //---------------------------------------------------------------------------
|
rt300@8
|
162
|
rt300@5
|
163
|
rt300@0
|
164 #endif /* defined(__oscSenderExample__eventLogger__) */
|