-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathserver.js
More file actions
27 lines (26 loc) · 1.05 KB
/
server.js
File metadata and controls
27 lines (26 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const { Server } = require('net');
const Request = require('./lib/request');
const {processRequest} = require('./app');
const handleConnection = function (socket) {
const remote = `${socket.remoteAddress}:${socket.remotePort}`;
console.warn('new connection', remote);
socket.setEncoding('utf8');
socket.on('close', (hadError) => console.warn(`${remote} closed ${hadError ? 'with error' : ''}`));
socket.on('end', () => console.warn(`${remote} ended`));
socket.on('error', (err) => console.error('socket error', err));
socket.on('drain', () => console.warn(`${remote} drained`));
socket.on('data', (text) => {
console.warn(`${remote} data:\n`);
const req = Request.parse(text);
const res = processRequest(req);
res.writeTo(socket);
});
}
const main = (port=4000) => {
const server = new Server();
server.on('error', err => console.error('server error', err));
server.on('connection', handleConnection);
server.on('listening', () => console.warn('started listening', server.address()));
server.listen(port);
}
main(process.argv[2]);