Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 2x 2x 3x 9x 3x 2x 2x 1x | const
NetServer = require('net').Server,
Socket = require('./socket'),
ConnectionObserver = require('./connection-observer')
/**
* When a server needs to connect with another, one part must act as the
* listener. This class is representing that listener.
*
* @extends Socket
*/
class SocketServer extends Socket
{
/**
* @param {Logger} log
*/
static from(log)
{
const
netServer = new NetServer,
connectionObserver = ConnectionObserver.from(log),
server = new SocketServer(log, connectionObserver, netServer)
return server
}
/**
* @param {Logger} log
* @param {ConnectionObserver} connectionObserver
* @param {net.Server} server
*/
constructor(log, connectionObserver, server)
{
super(log, connectionObserver)
this.server = server
this.logServerEvents(server, log)
}
/**
* @param {number} port an unsigned integer
*/
listen(port)
{
this.server.listen(port)
this.attachConnectionEventToObserver(this.server, this.connectionObserver)
}
/**
* @protected
* @param {net.Server} server
* @param {Logger} log
*/
logServerEvents(server, log)
{
['close','connection','listening']
.forEach((event) => server.on(event, () => log.info(event)))
server.on('error', (...a) => log.info('error', ...a))
}
/**
* @protected
* @param {net.Server} server
* @param {ConnectionObserver} connectionObserver
*/
attachConnectionEventToObserver(server, connectionObserver)
{
const observer = connectionObserver
server.on('connection', observer.onConnection.bind(observer))
}
}
module.exports = SocketServer
|