From e4564960100f497895c29225e173cf2056188316 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sun, 5 Apr 2020 18:09:42 +0100 Subject: [PATCH] LND Sockets added --- src/server.js | 23 ++++++++------- src/sockets.js | 76 ++++++++++++++++++++++++++++---------------------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/server.js b/src/server.js index 1afa8104..b08c5d8e 100644 --- a/src/server.js +++ b/src/server.js @@ -207,17 +207,17 @@ const server = program => { const CA = LightningServices.servicesConfig.lndCertPath const CA_KEY = CA.replace('cert', 'key') - const createServer = async () => { + const createServer = () => { try { - if (LightningServices.servicesConfig.lndCertPath && program.usetls) { - const [key, cert] = await Promise.all([ - FS.readFile(CA_KEY), - FS.readFile(CA) - ]) - const httpsServer = Https.createServer({ key, cert }, app) + // if (LightningServices.servicesConfig.lndCertPath && program.usetls) { + // const [key, cert] = await Promise.all([ + // FS.readFile(CA_KEY), + // FS.readFile(CA) + // ]) + // const httpsServer = Https.createServer({ key, cert }, app) - return httpsServer - } + // return httpsServer + // } const httpServer = Http.Server(app) return httpServer @@ -236,7 +236,10 @@ const server = program => { const io = require('socket.io')(serverInstance) - const Sockets = require('./sockets')(io, lnd) + const Sockets = require('./sockets')( + io, + LightningServices.services.lightning + ) require('./routes')(app, defaults, Sockets, { serverHost: module.serverHost, diff --git a/src/sockets.js b/src/sockets.js index 2e41ad0f..628fbe2c 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -5,41 +5,49 @@ const logger = require("winston"); module.exports = ( /** @type {import('socket.io').Server} */ io, - lnd, + lightning, ) => { - const Mediator = require("../services/gunDB/Mediator/index.js"); - const EventEmitter = require("events"); - - class MySocketsEvents extends EventEmitter {} - - const mySocketsEvents = new MySocketsEvents(); - - // register the lnd invoices listener - const registerLndInvoiceListener = socket => { - socket._invoiceListener = { - dataReceived(data) { - socket.emit("invoice", data); + + const onNewInvoice = socket => { + const stream = lightning.subscribeInvoice({}); + stream.on("data", data => { + socket.emit("invoice:new", data) + }) + stream.on("end", () => { + logger.info("New invoice stream ended, starting a new one...") + onNewInvoice(socket); + }) + stream.on("error", err => { + logger.error("New invoice stream error:", err); + }) + stream.on("status", status => { + logger.error("New invoice stream status:", status); + if (status.code === 14) { + onNewInvoice(socket); } - }; - lnd.registerInvoiceListener(socket._invoiceListener); - }; - - // unregister the lnd invoices listener - const unregisterLndInvoiceListener = socket => { - lnd.unregisterInvoiceListener(socket._invoiceListener); - }; - - // register the socket listeners - const registerSocketListeners = socket => { - registerLndInvoiceListener(socket); - }; - - // unregister the socket listeners - const unregisterSocketListeners = socket => { - unregisterLndInvoiceListener(socket); - }; + }) + } + const onNewTransaction = socket => { + const stream = lightning.subscribeTransaction({}); + stream.on("data", data => { + socket.emit("transaction:new", data) + }) + stream.on("end", () => { + logger.info("New invoice stream ended, starting a new one...") + onNewTransaction(socket); + }) + stream.on("error", err => { + logger.error("New invoice stream error:", err); + }) + stream.on("status", status => { + logger.error("New invoice stream status:", status); + if (status.code === 14) { + onNewTransaction(socket); + } + }) + } io.on("connection", socket => { logger.info(`io.onconnection`) @@ -78,15 +86,15 @@ module.exports = ( // this is where we create the websocket connection // with the GunDB service. Mediator.createMediator(socket); - registerSocketListeners(socket); + onNewInvoice(socket); + onNewTransaction(socket); /** listening if client has disconnected */ socket.on("disconnect", () => { - unregisterSocketListeners(socket); logger.info("client disconnected (id=" + socket.id + ")."); }); } }) - return mySocketsEvents; + return io; };