Skip to content

Commit ef80b55

Browse files
committed
added missing server script
1 parent c22b7ce commit ef80b55

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

demo-server/server.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
var http = require("http");
2+
var fs = require("fs");
3+
var path = require("path");
4+
5+
function start(port, logger) {
6+
7+
var outDir = path.join(__dirname, "uploads");
8+
var server = http.createServer(function(request, response) {
9+
try {
10+
var Throttle = require("stream-throttle").Throttle;
11+
12+
var fileName = request.headers["file-name"];
13+
if (logger) {
14+
logger.log(request.method + "Request! Content-Length: " + request.headers["content-length"] + ", file-name: " + fileName);
15+
logger.dir(request.headers);
16+
}
17+
18+
var out = path.join(outDir, "upload-" + new Date().getTime() + "-" + fileName);
19+
if (logger) {
20+
logger.log("Output in: " + out);
21+
}
22+
23+
var total = request.headers["content-length"];
24+
var current = 0;
25+
26+
var shouldFail = request.headers["should-fail"];
27+
28+
// throttle write speed to 4MB/s
29+
request.pipe(new Throttle({ rate: 1024 * 4096 })).pipe(fs.createWriteStream(out, { flags: 'w', encoding: null, fd: null, mode: 0666 }));
30+
31+
request.on('data', function(chunk) {
32+
current += chunk.length;
33+
34+
if (shouldFail && (current / total > 0.25)) {
35+
if (logger) {
36+
logger.log("Error ");
37+
}
38+
var body = "Denied!";
39+
response.writeHead(408, "Die!", { "Content-Type": "text/plain", "Content-Length": body.length, "Connection": "close" });
40+
response.write(body);
41+
response.end();
42+
shouldFail = false;
43+
if (logger) {
44+
logger.log("Terminated with error: [" + out + "]: " + current + " / " + total + " " + Math.floor(100 * current / total) + "%");
45+
}
46+
} else {
47+
if (logger) {
48+
logger.log("Data [" + out + "]: " + current + " / " + total + " " + Math.floor(100 * current / total) + "%");
49+
}
50+
}
51+
});
52+
53+
request.on('end', function () {
54+
setTimeout(function() {
55+
if (logger) {
56+
logger.log("Done (" + out + ")");
57+
}
58+
var body = "Upload complete!";
59+
response.writeHead(200, "Done!", { "Content-Type": "text/plain", "Content-Length": body.length });
60+
response.write(body);
61+
response.end();
62+
}, 1000);
63+
});
64+
65+
if (logger) {
66+
request.on('error', function(e) {
67+
logger.log('error!');
68+
logger.log(e);
69+
});
70+
}
71+
} catch(e) {
72+
if (logger) {
73+
logger.log(e);
74+
}
75+
throw e;
76+
}
77+
});
78+
79+
server.listen(port);
80+
if (logger) {
81+
logger.log("Server is listening on: " + port);
82+
logger.log("Uploads are saved to: " + outDir);
83+
}
84+
85+
return {
86+
close: function() {
87+
server.close();
88+
}
89+
}
90+
}
91+
exports.start = start;
92+
93+
if (process.argv.length === 3) {
94+
var port = parseInt(process.argv[2]);
95+
start(port, console);
96+
}

0 commit comments

Comments
 (0)