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@1
|
14
|
rt300@4
|
15 #include "ofMain.h"
|
rt300@4
|
16 #include "ofxiPhone.h"
|
rt300@4
|
17 #include "2dvector.h"
|
rt300@4
|
18 #include "ofxiPhoneExtras.h"
|
rt300@4
|
19 #include <sys/time.h>
|
rt300@4
|
20 #include <iostream>
|
rt300@4
|
21 #include <string>
|
rt300@4
|
22 #include <map>
|
rt300@4
|
23 #include "2dvector.h"
|
rt300@5
|
24 enum leventType {SAVE_PRESET, SAVE_DESET, SCROLL, SCROLL_STOPPED, ZOOM, CHANGE_SLIDER, SWAP_VIEW, SET_MIN_ZOOM, SET_MAX_ZOOM};
|
rt300@1
|
25
|
rt300@4
|
26 class lEvent{
|
rt300@5
|
27 public:
|
rt300@1
|
28 // try and make this as compact as possible.
|
rt300@4
|
29 leventType eventType;
|
rt300@1
|
30 double val1; // x coord, scale if zoom
|
rt300@1
|
31 double val2; // y coord, 0 if zoom
|
rt300@4
|
32 int sliderID;
|
rt300@5
|
33 lEvent(leventType eType, double v1, double v2 = 0.0,int sID = 0){
|
rt300@5
|
34 eventType = eType;
|
rt300@5
|
35 val1 = v1;
|
rt300@5
|
36 val2 = v2;
|
rt300@5
|
37 sliderID = sID;
|
rt300@5
|
38 }
|
rt300@5
|
39 };
|
rt300@5
|
40 //---------------------------------------------------------------------------
|
rt300@5
|
41 inline istream& operator>>(istream & is, lEvent& e){
|
rt300@5
|
42 is.setf(ios_base::fixed,ios_base::floatfield);
|
rt300@5
|
43 is.precision(1);
|
rt300@4
|
44
|
rt300@5
|
45 char delim;
|
rt300@5
|
46 int eType;
|
rt300@0
|
47
|
rt300@5
|
48 is >> eType >> delim >> e.val1 >> delim >> e.val2 >> delim >> e.sliderID;
|
rt300@5
|
49
|
rt300@5
|
50 e.eventType = (leventType)eType;
|
rt300@5
|
51
|
rt300@5
|
52 return is;
|
rt300@5
|
53 }
|
rt300@4
|
54
|
rt300@5
|
55 //---------------------------------------------------------------------------
|
rt300@5
|
56 inline ostream& operator<<(ostream & os, const lEvent& e){
|
rt300@5
|
57 os.setf(ios_base::fixed,ios_base::floatfield);
|
rt300@5
|
58 os.precision(1);
|
rt300@5
|
59
|
rt300@5
|
60 os << e.eventType << ',' << e.val1 << ',' << e.val2 << ',' << e.sliderID << '\n';
|
rt300@5
|
61
|
rt300@5
|
62 return os;
|
rt300@7
|
63 }
|
rt300@5
|
64 //---------------------------------------------------------------------------
|
rt300@4
|
65
|
rt300@0
|
66 class EventLogger{
|
rt300@0
|
67 public:
|
rt300@0
|
68 // what we need...
|
rt300@0
|
69 /*
|
rt300@0
|
70 time, type, value
|
rt300@0
|
71 */
|
rt300@5
|
72 bool loggingEnabled;
|
rt300@5
|
73
|
rt300@4
|
74 vector<lEvent> theEvents;
|
rt300@0
|
75
|
rt300@7
|
76 unsigned int deviceID; // get something from hardware??
|
rt300@7
|
77 unsigned int totalInteractionTime, sessionTime, sessionStartTime;
|
rt300@7
|
78 string userName;
|
rt300@1
|
79
|
rt300@1
|
80 EventLogger();
|
rt300@7
|
81 void init();
|
rt300@7
|
82
|
rt300@5
|
83 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
|
84 void logEvent(const leventType& evtType,const int& sliderID, const double& sliderVal);
|
rt300@1
|
85 void sendHttp();
|
rt300@7
|
86 void checkLogFile();
|
rt300@7
|
87 void attemptUpload();
|
rt300@7
|
88 void firstEverAppOpen();
|
rt300@7
|
89 void exitAndSave();
|
rt300@5
|
90 void printAll(){
|
rt300@5
|
91 cout << "ALL LOGGED EVENTS!: \n";
|
rt300@5
|
92 vector<lEvent>::iterator evIter;
|
rt300@5
|
93 for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){
|
rt300@5
|
94 cout << *evIter;
|
rt300@5
|
95
|
rt300@5
|
96 }
|
rt300@5
|
97 };
|
rt300@0
|
98 };
|
rt300@0
|
99
|
rt300@0
|
100
|
rt300@5
|
101
|
rt300@5
|
102
|
rt300@0
|
103 #endif /* defined(__oscSenderExample__eventLogger__) */
|