const fs = require('fs'); const net = require('net'); const path = require('path'); const { jpegSplitter } = require('./phone_module'); const MARKER = path.join(__dirname, '..', '..', '.audio_bridge'); const bridgePort = () => { try { const port = Number(String(fs.readFileSync(MARKER, 'utf8')).trim()); return Number.isFinite(port) && port > 0 ? port : 0; } catch (_) { return 0; } }; module.exports = () => ({ available: () => bridgePort() > 0, open({ onJpeg, onEnd }) { const port = bridgePort(); if (!port) return null; let ended = false; const finish = () => { if (ended) return; ended = true; try { onEnd(); } catch (_) {} }; const sock = net.connect(port, '127.0.0.1'); sock.setNoDelay(true); sock.on('error', finish); sock.on('close', finish); sock.on('connect', () => sock.write('C')); sock.on('data', jpegSplitter((jpeg) => { if (!ended) onJpeg(jpeg); })); return { stop() { ended = true; try { sock.destroy(); } catch (_) {} } }; } });