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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | require('babel-register'); require('babel-polyfill'); const path = require('path'); const fs = require('fs'); const cmd = require('node-cmd'); const moment = require('moment'); const { parentPort, workerData } = require('worker_threads'); const { PATH_TEMP } = workerData; // Funcao de envio de mensagem utilizada para logging function sendMessage(message = '') { if (parentPort) parentPort.postMessage(message); } function finishWork() { sendMessage('done'); process.exit(0); } async function removeFile(filePath) { return new Promise((resolve, reject) => { fs.unlink(filePath, (err, data) => { if (err) { sendMessage(`REMOVE FILE ${err}`); resolve(err); } else { resolve(data); } }); }); } async function generateFile(fileName, label) { return new Promise((resolve, reject) => { const filePath = path.join(PATH_TEMP, fileName); fs.writeFile(filePath, label, 'utf8', (err) => { if (err) reject(err); else resolve(filePath); }); }); } function generatePrinterCommand(printer, filePath) { let printerParsed = printer; let splitedRemote = []; let host = ''; let printerName = ''; // Replace para evitar injecao de comando no servidor printerParsed = printerParsed.replace(/[^0-9a-zA-Z\.\-_/\\:]/g, ''); // Se conter contra barra ou barra, entao e endereco remoto const isRemote = printerParsed.includes('\\') || printerParsed.includes('/'); // Backend rondado no windows if (process.platform === 'win32') { // Faz o replace para barras do windows printerParsed = printerParsed.replace(/[\/]/g, '\\'); printerParsed = printerParsed.replace(/(\\\\)/g, ''); // Split em host e printerName splitedRemote = printerParsed.split('\\').filter((it) => it); if (isRemote) { host = splitedRemote[0]; printerName = splitedRemote[1]; // Comando type do windows envia a impressao para a printer return `type ${filePath} > \\\\${host}\\${printerName}`; } // Comando type do windows envia a impressao para a printer return `type ${filePath} > ${printerParsed[0]}`; } printerParsed = printerParsed.replace(/[\\]/g, '/'); printerParsed = printerParsed.replace(/(\/\/)/g, ''); // Split em host e printerName splitedRemote = printerParsed.split('/').filter((it) => it); /* if (isRemote) { host = splitedRemote[0]; printerName = splitedRemote[1]; // Comando lp do linux envia a impressao para a printer return `lp -d ${printerName} -h ${host} ${filePath}`; } */ printerName = splitedRemote[1]; // Comando lp do linux envia a impressao para a printer return `lp -d ${printerName} ${filePath}`; } (async () => { const { printer, label, type } = workerData; if (label && printer) { const file = `etiq_${type}_${moment().valueOf()}_${Math.floor( Math.random() * 1000 )}.tmp`; const filePath = await generateFile(file, label); try { const command = generatePrinterCommand(printer, filePath); const result = cmd.runSync(command); await removeFile(filePath); if (!result || (result && result.err)) { const errorStr = `COMMAND - ( ${command} ) | ERROR - ${result.err}`; sendMessage(errorStr); } } catch (error) { try { await removeFile(filePath); sendMessage(error.message); } catch (errFile) { sendMessage(errFile.message); } } } // Finalizado finishWork(); })(); |