From 1aa8825c9df504b10e11d8bb2f61180c267ee1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Otero?= Date: Thu, 2 Nov 2017 11:04:46 +0100 Subject: [PATCH 1/3] Added support for shutting down server and bonjour service - Added support for attaching an onError callback to the printer to catch initialization problems. --- lib/bind.js | 26 +++++++++++++++++++++++++- lib/printer.js | 3 +++ package.json | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/bind.js b/lib/bind.js index 3bee4c2..a5160a5 100644 --- a/lib/bind.js +++ b/lib/bind.js @@ -3,6 +3,7 @@ var util = require('util') var os = require('os') var http = require('http') +var serverDestroy = require('server-destroy'); var Bonjour = require('bonjour') var ipp = require('ipp-encoder') var debug = require('debug')(require('../package').name) @@ -21,12 +22,35 @@ module.exports = function (printer) { else server.on('listening', onlistening) } else { server = printer.server = http.createServer(onrequest) + server.on('error', onerror) server.listen(printer.port, onlistening) } + // Enable destroy method in http server + serverDestroy(server) + + // Enhance printer object + printer.destroy = destroy + return printer - function onrequest (req, res) { + function onerror(err) { + if (printer.onerror) { + return printer.onerror(err) + } + + throw err + } + + function destroy() { + printer.stop() + bonjour.destroy() + server.destroy() + + debug('Printer server destroyed') + } + + function onrequest(req, res) { debug('HTTP request: %s %s', req.method, req.url) if (req.method !== 'POST') { diff --git a/lib/printer.js b/lib/printer.js index cd9b8b6..79bdbc3 100644 --- a/lib/printer.js +++ b/lib/printer.js @@ -32,6 +32,9 @@ function Printer (opts) { this.server = opts.server this.fallback = opts.fallback + // Events + this.onerror = opts.onerror + bind(this) } diff --git a/package.json b/package.json index c54967f..8a98860 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "pump": "^1.0.1", "rc": "^1.1.6", "readable-stream": "^2.0.5", + "server-destroy": "^1.0.1", "unique-concat": "^0.2.2" }, "devDependencies": { From 9d895dffb45b55e32189e6f86db8606124a5d0cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Otero?= Date: Thu, 2 Nov 2017 11:24:43 +0100 Subject: [PATCH 2/3] Updated README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7aa521b..c41167b 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ string or an object containing: be necessary in a perfect world, but some versions of Windows doesn't like connecting to a server running a different version of the IPP protocol than it self (default: `true`) +- `onerror` - Function. Callback for catching [`http.Server`](https://nodejs.org/api/http.html#http_class_http_server) errors. Useful for catching server initialization errors if there are network or configuration problems. Note that the IPP standard specifies port 631 as the default IPP port, but most IPP clients are fine with connecting to another port. @@ -165,6 +166,14 @@ An array of all jobs handled by the printer. An instance of [`http.Server`](https://nodejs.org/api/http.html#http_class_http_server). +#### `printer.destroy` + +A function to shut down the printer server and bonjour service. + +```js +printer.destroy(); +``` + ### Class: Job A job is a readable stream containing the document to be printed. In From cb53d87dad8b2443b264ea9868b0bfb223a948e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Otero?= Date: Fri, 3 Nov 2017 09:40:57 +0100 Subject: [PATCH 3/3] Fixed linting problems --- lib/bind.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/bind.js b/lib/bind.js index a5160a5..6c1159c 100644 --- a/lib/bind.js +++ b/lib/bind.js @@ -3,7 +3,7 @@ var util = require('util') var os = require('os') var http = require('http') -var serverDestroy = require('server-destroy'); +var serverDestroy = require('server-destroy') var Bonjour = require('bonjour') var ipp = require('ipp-encoder') var debug = require('debug')(require('../package').name) @@ -34,7 +34,7 @@ module.exports = function (printer) { return printer - function onerror(err) { + function onerror (err) { if (printer.onerror) { return printer.onerror(err) } @@ -42,7 +42,7 @@ module.exports = function (printer) { throw err } - function destroy() { + function destroy () { printer.stop() bonjour.destroy() server.destroy() @@ -50,7 +50,7 @@ module.exports = function (printer) { debug('Printer server destroyed') } - function onrequest(req, res) { + function onrequest (req, res) { debug('HTTP request: %s %s', req.method, req.url) if (req.method !== 'POST') {