diff --git a/app/modules/bma/lib/bma.ts b/app/modules/bma/lib/bma.ts index d3a2967c7a23808d0c9adff2b65901cf704a2eb0..6569d3f6033116de7690f40efddc798608fd1f5c 100644 --- a/app/modules/bma/lib/bma.ts +++ b/app/modules/bma/lib/bma.ts @@ -10,6 +10,7 @@ import {TransactionBinding} from "./controllers/transactions" import {UDBinding} from "./controllers/uds" import {PeerDTO} from "../../../lib/dto/PeerDTO" import {BlockDTO} from "../../../lib/dto/BlockDTO" +import {OtherConstants} from "../../../lib/other_constants" const co = require('co'); const es = require('event-stream'); @@ -132,16 +133,24 @@ export const bma = function(server:Server, interfaces:NetworkInterface[], httpLo }); wssPeer.broadcast = (data:any) => wssPeer.clients.forEach((client:any) => client.send(data)); - // Forward blocks & peers + // Forward current HEAD change server - .pipe(es.mapSync(function(data:any) { - try { - // Broadcast block - if (data.joiners) { - currentBlock = data; + .on('bcEvent', (e) => { + if (e.bcEvent === OtherConstants.BC_EVENT.HEAD_CHANGED || e.bcEvent === OtherConstants.BC_EVENT.SWITCHED) { + try { + // Broadcast block + currentBlock = e.block; const blockDTO:BlockDTO = BlockDTO.fromJSONObject(currentBlock) wssBlock.broadcast(JSON.stringify(block2HttpBlock(blockDTO))) + } catch (e) { + logger && logger.error('error on ws mapSync:', e); } + } + }) + // Forward peers documents + server + .pipe(es.mapSync(function(data:any) { + try { // Broadcast peer if (data.endpoints) { const peerDTO = PeerDTO.fromJSONObject(data)