diff --git a/protocol.js b/protocol.js index 3a531cc..6ab5fb8 100644 --- a/protocol.js +++ b/protocol.js @@ -1,10 +1,13 @@ //var logger = require('winston'); var logger = require('./logger'); // Importa el logger configurado -var SerialPort = require('serialport'); +var config = require('./config'); +var SerialPort = require('serialport'); //Para producion +//var SerialPort = require('./simulacion/fakeSerialAdapter'); //Para testear en consola llamando simultaneamente node protocol.js y node simulacion/simulacion.js + + // Internal Dependencies -var config = require('./config'); var token = require('./constants'); var codec = require('./codec'); var app = require('./app'); diff --git a/simulacion/fakeSerialAdapter.js b/simulacion/fakeSerialAdapter.js new file mode 100644 index 0000000..f65856d --- /dev/null +++ b/simulacion/fakeSerialAdapter.js @@ -0,0 +1,14 @@ +const createVirtualSerialPair = require('./virtualLink'); + +const pair = createVirtualSerialPair(); + +class SerialPortWrapper { + + constructor() { + return pair.portA; // protocol.js usa este + } +} + +// exportamos también el otro extremo +module.exports = SerialPortWrapper; +module.exports.simulatorPort = pair.portB; \ No newline at end of file diff --git a/simulacion/fakeSerialPort.js b/simulacion/fakeSerialPort.js new file mode 100644 index 0000000..23db415 --- /dev/null +++ b/simulacion/fakeSerialPort.js @@ -0,0 +1,66 @@ + +const token = require('../constants'); +const EventEmitter = require('events'); +class FakeSerialPort extends EventEmitter{ + + constructor(name) { + super(); + this.name = name; + this.peer = null; + this.handlers = {}; + this.options = { baudRate : 9600, dataBits : 8, parity : 'none', stopBits : 1 }; + setTimeout(() => this.emit('open'), 100); + } + + on(event, cb) { + this.handlers[event] = cb; + } + connect(peer) { + this.peer = peer; + } + emit(event, data) { + if (this.handlers[event]) { + this.handlers[event](data); + } + } + + write(data) { + console.log("[APP] WRITE ->", JSON.stringify(data)); + + // 👇 SIMULACIÓN DEL EQUIPO + simulateAnalyzerResponse.call(this, data); + } +} + +function simulateAnalyzerResponse(data) { + + // ENQ recibido → responder ACK + if (data === token.ENQ) { + + console.log("🧪 ANALYZER <- ENQ"); + console.log("🧪 ANALYZER -> ACK"); + + setTimeout(() => { + this.emit('data', token.ACK); + }, 500); + } + + // Mensaje ASTM recibido → ACK + else if (data.startsWith(token.STX)) { + + console.log("🧪 ANALYZER <- ASTM MESSAGE"); + + setTimeout(() => { + this.emit('data', token.ACK); + }, 500); + } + + // Fin transmisión + else if (data === token.EOT) { + + console.log("🧪 ANALYZER <- EOT"); + } +} + + +module.exports = FakeSerialPort; \ No newline at end of file diff --git a/simulacion/simulator.js b/simulacion/simulator.js new file mode 100644 index 0000000..3cc831a --- /dev/null +++ b/simulacion/simulator.js @@ -0,0 +1,50 @@ +const SerialAdapter = require('./fakeSerialAdapter'); +const port = SerialAdapter.simulatorPort; + +const token = { + ENQ: String.fromCharCode(5), + ACK: String.fromCharCode(6), + EOT: String.fromCharCode(4), + STX: String.fromCharCode(2) +}; + +port.on('open', () => { + console.log("SIMULADOR CONECTADO"); +}); + +port.on('data', buffer => { + + const data = buffer.toString('ascii'); + + console.log("HOST → EQUIPO:", JSON.stringify(data)); + + //----------------------------------- + // RESPUESTAS ASTM DEL EQUIPO + //----------------------------------- + + // 1️⃣ Host quiere iniciar sesión + if (data === token.ENQ) { + console.log("EQUIPO → ACK"); + + setTimeout(() => { + port.write(token.ACK); + }, 200); // pequeño delay realista + return; + } + + // 2️⃣ Host envía mensaje ASTM + if (data.startsWith(token.STX)) { + console.log("EQUIPO → ACK (mensaje recibido)"); + + setTimeout(() => { + port.write(token.ACK); + }, 150); + return; + } + + // 3️⃣ Fin transmisión + if (data === token.EOT) { + console.log("EQUIPO → sesión finalizada"); + return; + } +}); \ No newline at end of file diff --git a/simulacion/virtualLink.js b/simulacion/virtualLink.js new file mode 100644 index 0000000..b015359 --- /dev/null +++ b/simulacion/virtualLink.js @@ -0,0 +1,14 @@ +const FakeSerialPort = require('./fakeSerialPort'); + +function createVirtualSerialPair() { + + const portA = new FakeSerialPort("APP"); + const portB = new FakeSerialPort("SIMULATOR"); + + portA.connect(portB); + portB.connect(portA); + + return { portA, portB }; +} + +module.exports = createVirtualSerialPair; \ No newline at end of file