UNPKG

botium-core

Version:
89 lines (78 loc) 2.23 kB
const dgram = require('dgram') const EventEmitter = require('events') function createErrorObject (err, message) { return { date: new Date(), error: err, message: message } } module.exports = class SyslogServer extends EventEmitter { constructor () { super() this.status = false this.server = null } start (options = { port: 514, address: '0.0.0.0', exclusive: true }, cb) { return new Promise((resolve, reject) => { if (this.status === true) { const errorObj = createErrorObject(null, 'NodeJS Syslog Server is already running!') if (cb) return cb(errorObj) return reject(errorObj) } else { this.server = dgram.createSocket('udp4') // Socket listening handler this.server.on('listening', () => { this.status = true this.emit('start') }) // Socket error handler this.server.on('error', (err) => { this.emit('error', err) }) // Socket message handler this.server.on('message', (msg, remote) => { const message = { date: new Date(), host: remote.address, message: msg.toString('utf8'), protocol: remote.family } this.emit('message', message) }) // Socket close handler this.server.on('close', () => { this.status = false this.emit('stop') }) this.server.bind(options, (err) => { if (err) { const errorObj = createErrorObject(err, 'NodeJS Syslog Server failed to start!') if (cb) return cb(errorObj) return reject(errorObj) } else { if (cb) return cb() return resolve() } }) } }) } stop (cb) { return new Promise((resolve, reject) => { try { this.server.close(() => { if (cb) return cb() return resolve() }) } catch (err) { const errorObj = createErrorObject(err, 'NodeJS Syslog Server is not running!') if (cb) return cb(errorObj) return reject(errorObj) } }) } isRunning () { return this.status } }