Source: services/server.js

'use strict'
var log = require('an-log')('$server')
var constantes = require('../constantes')

/**
 * Service de gestion du serveur HTTP
 * @namespace $server
 */
module.exports = function ($settings, $rail) {
  var _http

  /**
   * Déparrage du serveur.
   *
   * @param callback next callback de retour
   * @memberof $server
   */
  function start (next) {
    var port = $settings.get('$server.port', 3000)
    // 5 min max par défaut, lassi doit couper avant
    // +1000 pour laisser lassi prendre la main sur un timeout de 5min
    var maxTimeout = $settings.get('$server.maxTimeout', constantes.maxTimeout)
    _http = require('http').Server($rail.get())
    _http.timeout = maxTimeout
    lassi.emit('httpReady', _http)
    _http.listen(port, function () {
      log('started', 'on port', port.toString().blue, 'with pid ' + process.pid + ' and timeout ' + maxTimeout + 'ms')
      next()
    })
  }

  /**
   * Arrêt du serveur http
   * @param {function} [next] callback appelé avec une éventuelle erreur
   */
  function stop (next) {
    if (_http) {
      _http.close(function (error) {
        if (error) console.error(error.stack || error)
        log('closed')
        if (next) next(error)
      })
    } else {
      const error = new Error('Http server already closed or never started')
      if (next) next(error)
      else console.error(error)
    }
  }

  return {
    start: start,
    stop: stop
  }
}