Server-class is functional
[gopher-lib.git] / example-server.js
1 /*jslint node: true */
2 /*jshint esversion: 6 */
3
4 const Server = require('./server');
5 const Common = require('./common');
6 const Resource = Common.Resource;
7
8
9 const server = new Server(7000, 'localhost');
10
11 server.listen(() => {
12     console.log('Server ready');
13 });
14
15 const preLog = (req, rep)=>{
16     console.log('Incoming connection (' + req.serial + ') from ' + rep.socket.remoteAddress + ' requesting: "' + req.selector + '"');
17     if(!req.handler) {
18         console.log('NOTE: No handler found for selector, default error-message is sent to client.');
19     }
20 };
21
22 const postLog = (req, rep)=>{
23     console.log('Ended connection (' + req.serial + ') bytes sent: ' + rep.socket.bytesWritten);
24 };
25
26 const myHandler = (request, rep)=>{
27     var remoteAddress = rep.socket.remoteAddress;
28     var now = new Date();
29
30     rep.menuItem( {name: 'Why hello there '+remoteAddress, type:'i'});
31     rep.menuItem( {name: 'Lovely that you dropped by '+now, type:'i'});
32     if(request.query) {
33         rep.menuItem( {name: 'You wanted to search "'+request.query+'".', type:'i'});
34     }
35     rep.menuItem( {name: 'Back to index', type:'1'});
36
37     rep.end();
38 };
39
40 server.addPreHandler(preLog);
41 server.addPostHandler(postLog);
42
43 server.addMenu('')
44     .addEntry({name: '+--------------------------+', type:'i'})
45     .addEntry({name: '| A gopher-server in node! |', type:'i'})
46     .addEntry({name: '+--------------------------+', type:'i'})
47     .addEntry({name: ' ', type:'i'})
48     .addEntry({name: 'Dynamically generated menu!', type: '1', selector:'/userHandler'})
49     .addEntry({name: 'Send query', type: '7', selector:'/userHandler'})
50     .addEntry({name: 'Directory Index', type: '1', selector:'/dirIndex'})
51     .addEntry({name: 'External Site', type: '1', host: 'dusted.dk', port: 70});
52
53 server.addHandler('/userHandler', myHandler);
54 server.addDir('/dirIndex', './');