Skip to content

Commit 6747bef

Browse files
author
yizhuo
committed
fix multi-client & add timestamp
1 parent 33c1c3a commit 6747bef

File tree

6 files changed

+99
-66
lines changed

6 files changed

+99
-66
lines changed

app.js

+29
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ app.use(async (ctx, next) => {
2121
ctx.response.set('X-Response-Time', `${execTime}ms`);
2222
});
2323

24+
// parse user from cookie:
25+
app.use(async (ctx, next) => {
26+
ctx.state.user = parseUser(ctx.cookies.get('name') || '');
27+
await next();
28+
});
29+
2430
// static file support:
2531
if (! isProduction) {
2632
let staticFiles = require('./static-files');
@@ -41,3 +47,26 @@ app.use(controller());
4147

4248
app.listen(3000);
4349
console.log('app started at port 3000...');
50+
51+
function parseUser(obj) {
52+
if (!obj) {
53+
return;
54+
}
55+
//console.log('try parse: ' + obj);
56+
let s = '';
57+
if (typeof obj === 'string') {
58+
s = obj;
59+
} else if (obj.headers) {
60+
let cookies = new Cookies(obj, null);
61+
s = cookies.get('name');
62+
}
63+
if (s) {
64+
try {
65+
let user = JSON.parse(Buffer.from(s, 'base64').toString());
66+
//console.log(`User: ${user.mturkID}, ID: ${user.video_order}`);
67+
return user;
68+
} catch (e) {
69+
// ignore
70+
}
71+
}
72+
}

controllers/start.js

+53-58
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,92 @@
11
// start test:
22
var getOder = require('../models/random')
33
var fs = require('fs')
4-
var video_order =[];
5-
var survey = [];
6-
var result = [];
7-
var count = 1;
8-
var timeoutObj;
94
var video_url = "https://github.com/eastOffice/QoEProject/raw/master/videos/";
105

11-
var post_start = async (ctx, next) => {
12-
console.log(count);
13-
if(count != 1) {
146

15-
ctx.render('wait.html', {
16-
title:'Please wait'
17-
});
18-
}
19-
else {
20-
timeoutObj = setTimeout(function() {
21-
count = 1;
22-
console.log('Time out, reset web page!');
23-
}, 600000);
24-
// may be set a timer here
25-
// best sol is to use multi-process
26-
var mturkID = ctx.request.body.MTurkID;
27-
var device = ctx.request.body.device;
28-
var age = ctx.request.body.age;
29-
console.log(mturkID, device, age);
7+
var post_start = async (ctx, next) => {
8+
var mturkID = ctx.request.body.MTurkID;
9+
var device = ctx.request.body.device;
10+
var age = ctx.request.body.age;
11+
var video_order = getOder(1,13);
12+
console.log(mturkID, device, age);
13+
var start = new Date().getTime();
3014

31-
survey.push(mturkID, device, age);
15+
let user = {
16+
mturkID : mturkID,
17+
device : device,
18+
age : age,
19+
video_order : video_order,
20+
count : 1,
21+
result : [],
22+
time :[],
23+
start: start
24+
};
25+
let value = Buffer.from(JSON.stringify(user)).toString('base64');
26+
ctx.cookies.set('name', value);
27+
var video_src = video_url + video_order[0] + ".mp4";
28+
// https://github.com/michaelliao/learn-javascript/raw/master/video/vscode-nodejs.mp4
29+
// very interesting url!
3230

33-
// var video_src = "../videos/" + video_order[0] + ".mp4";
34-
//var video_src = "./videos/" + "xuefeng" + ".mp4";
35-
video_order = getOder(1,13);
36-
var video_src = video_url + video_order[0] + ".mp4";
37-
// https://github.com/michaelliao/learn-javascript/raw/master/video/vscode-nodejs.mp4
38-
// very interesting url!
39-
//console.log(video_src);
4031

41-
ctx.render('video.html', {
42-
title: '1/13', video_src : video_src
43-
});
44-
}
32+
ctx.render('video.html', {
33+
title: '1/13', video_src : video_src
34+
});
4535
}
4636

4737
var post_grade= async (ctx, next) => {
48-
var title = count + "/13";
38+
var user = ctx.state.user;
39+
var title = user.count + "/13";
4940
ctx.render('grade.html', {
50-
title: title, count: count
41+
title: title, count: user.count
5142
});
5243
}
5344

5445

5546
var post_back2video = async (ctx, next) => {
56-
//var video_order = require('./start.js').video_order;
57-
var video_src = video_url + video_order[count - 1] + ".mp4";
58-
var title = count +"/13";
47+
var user = ctx.state.user;
48+
var video_src = video_url + user.video_order[user.count - 1] + ".mp4";
49+
var title = user.count +"/13";
5950
ctx.render('video.html', {
6051
title: title, video_src: video_src
6152
});
6253
}
6354
var post_next = async (ctx, next) => {
64-
//var video_order = require('./start.js').video_order;
65-
//var result = require('./start.js').result;
55+
var user = ctx.state.user;
6656
var grade = ctx.request.body.sentiment;
67-
result.push(grade);
68-
if(count < 13) {
69-
var video_src = video_url + video_order[count] + ".mp4";
70-
count = count + 1;
71-
var title = count +"/13";
57+
user.result.push(grade);
58+
var end = new Date().getTime();
59+
var exe_time = end - user.start;
60+
user.time.push(exe_time);
61+
user.start = end;
62+
if(user.count < 13) {
63+
var video_src = video_url + user.video_order[user.count] + ".mp4";
64+
user.count = user.count + 1;
65+
var title = user.count +"/13";
7266

67+
// set new cookie
68+
let value = Buffer.from(JSON.stringify(user)).toString('base64');
69+
ctx.cookies.set('name', value);
7370
ctx.render('video.html', {
7471
title: title, video_src: video_src
7572
});
7673
}
7774
else {
78-
console.log(result);
79-
var filename = "./results/" + survey[0] + ".txt";
75+
console.log(user.result);
76+
var filename = "./results/" + user.mturkID + ".txt";
8077
var write_data = [];
81-
for(var i in video_order) {
82-
write_data[video_order[i] - 1] = result[i];
78+
var write_time = [];
79+
for(var i in user.video_order) {
80+
write_data[user.video_order[i] - 1] = user.result[i];
81+
write_time[user.video_order[i] - 1] = user.time[i];
8382
}
84-
fs.writeFile(filename, survey + '\n' + write_data , function(err) {
83+
fs.writeFile(filename, write_data + '\n'+ write_time + '\n' + user.mturkID + '\n' + user.device + '\n' + user.age , function(err) {
8584
if(err) {
8685
return console.log(err);
8786
}
8887
});
89-
// re initialize
90-
count = 1;
91-
result =[];
92-
survey =[];
93-
video_order =[];
94-
clearTimeout(timeoutObj);
88+
// clear cookie
89+
ctx.cookies.set('name','');
9590

9691
var return_code = "0lMq2GKqLDSUgYAGc=";
9792
ctx.render('ending.html', {

results/123.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
3,2,3,3,3,4,2,3,4,3,4,3,1
2+
123
3+
Desktop / Laptop
4+
39 - 45

results/AA514789.txt

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
4,3,2,2,3,3,3,3,3,3,3,3,3
2+
2119,1843,2033,1894,1851,2357,3612,2417,2563,2051,2122,3002,2269
3+
AA514789
4+
Desktop / Laptop
5+
18 - 24

results/test.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
test,Desktop / Laptop,18 - 24
2-
2,3,3,2,3,3,4,3,2,2,3,2,2
1+
test,Desktop / Laptop,18 - 24,test,Desktop / Laptop,18 - 24,test,Desktop / Laptop,18 - 24,test,Desktop / Laptop,18 - 24
2+
4,4,3,3,3,2,2,2,2,1,1,4,3

views/grade.html

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
<div class="col-md-6 col-md-offset-3" style="text-align:center">
33
<h2>Please decide to which extent you agree with the following statement:</h2>
44
<h2>A web page that loads at the speed shown in the video provides a satisfactory experience.</h2>
5-
<p>Progress: {{count}} / 13</p>
5+
<h3>Progress: {{count}} / 13</h3>
66
</div>
77

88
<div class="col-md-6 col-md-offset-3">
99
<form action= "next" method="POST" style="text-align:center">
1010
<div class="btn-group-vertical" data-toggle="buttons" id="Inputs">
11-
<label class="btn btn-default"><input id="StronglyPositive" name="sentiment" required="" type="radio" value="5" />Strongly Agree
11+
<label class="btn btn-default"><input id="StronglyPositive" name="sentiment" required="" type="radio" value="5" /><h4>Strongly Agree</h4>
1212
</label>
13-
<label class="btn btn-default"><input id="Positive" name="sentiment" required="" type="radio" value="4" />Agree
13+
<label class="btn btn-default"><input id="Positive" name="sentiment" required="" type="radio" value="4" /><h4>Agree</h4>
1414
</label>
15-
<label class="btn btn-default"><input id="Neutral" name="sentiment" required="" type="radio" value="3" />Neutral
15+
<label class="btn btn-default"><input id="Neutral" name="sentiment" required="" type="radio" value="3" /><h4>Neutral</h4>
1616
</label>
17-
<label class="btn btn-default"> <input id="Negative" name="sentiment" required="" type="radio" value="2" />Disagree
17+
<label class="btn btn-default"> <input id="Negative" name="sentiment" required="" type="radio" value="2" /><h4>Disagree</h4>
1818
</label>
19-
<label class="btn btn-default"> <input id="StronglyNegative" name="sentiment" required="" type="radio" value="1" />Strongly Disagree
19+
<label class="btn btn-default"> <input id="StronglyNegative" name="sentiment" required="" type="radio" value="1" /><h4>Strongly Disagree</h4>
2020
</label>
2121
</div>
2222
</br></br>

0 commit comments

Comments
 (0)