All files / src server.js

95% Statements 19/20
100% Branches 0/0
87.5% Functions 7/8
100% Lines 18/18

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