node-thermal-printer
Version:
Print on Epson, Star, Tranca, Daruma, Brother and Custom thermal printers with Node.js
84 lines (74 loc) • 2.24 kB
JavaScript
const Net = require('net');
const Interface = require('./interface');
class Network extends Interface {
constructor (host, port, options) {
super();
options = options || {};
this.debug = options.debug || false;
this.timeout = options.timeout || 3000;
this.host = host;
this.port = port || 9100;
}
async isPrinterConnected () {
return new Promise((resolve) => {
const networkConnection = Net.connect(
{
host: this.host,
port: this.port,
timeout: this.timeout,
},
() => {
resolve(true);
networkConnection.destroy();
},
);
networkConnection.on('error', (error) => {
if (this.debug) console.error('Printer network connection error:', error);
resolve(false);
networkConnection.destroy();
});
networkConnection.on('timeout', () => {
if (this.debug) console.error('Printer network connection timeout.');
resolve(false);
networkConnection.destroy();
});
});
}
async execute (buffer, options = { waitForResponse: false }) {
return new Promise((resolve, reject) => {
const name = `${this.host}:${this.port}`;
const networkConnection = Net.connect(
{
host: this.host,
port: this.port,
timeout: this.timeout,
},
() => {
networkConnection.write(buffer, null, () => {
if (this.debug) console.log(`Data sent to printer: ${name}`, buffer);
if (!options.waitForResponse) {
networkConnection.destroy();
resolve();
}
});
}
);
networkConnection.on('data', function (data) {
if (options.waitForResponse) {
if (this.debug) console.log('Received data:', data.toString("hex"));
resolve(data);
networkConnection.destroy();
}
});
networkConnection.on('error', (error) => {
reject(error);
networkConnection.destroy();
});
networkConnection.on('timeout', () => {
reject(new Error('Socket timeout'));
networkConnection.destroy();
});
});
}
}
module.exports = Network;