2018-07-20 12:21:23 +00:00
|
|
|
const async = require('async');
|
|
|
|
const utils = require('../../utils/utils.js');
|
|
|
|
const constants = require('../../constants');
|
|
|
|
const BlockchainProcessLauncher = require('./blockchainProcessLauncher');
|
|
|
|
|
|
|
|
class BlockchainModule {
|
|
|
|
|
|
|
|
constructor(embark, options) {
|
|
|
|
this.logger = embark.logger;
|
|
|
|
this.events = embark.events;
|
|
|
|
this.blockchainConfig = embark.config.blockchainConfig;
|
|
|
|
this.contractsConfig = embark.config.contractsConfig;
|
|
|
|
this.embark = embark;
|
|
|
|
this.locale = options.locale;
|
|
|
|
this.isDev = options.isDev;
|
|
|
|
|
|
|
|
this.registerBlockchainProcess();
|
|
|
|
}
|
|
|
|
|
|
|
|
registerBlockchainProcess() {
|
|
|
|
const self = this;
|
|
|
|
this.events.request('processes:register', 'blockchain', (cb) => {
|
|
|
|
console.dir("gonna check node connection");
|
|
|
|
self.assertNodeConnection(true, (connected) => {
|
|
|
|
if (connected === undefined) {
|
|
|
|
console.dir("result is undefined");
|
|
|
|
} else {
|
|
|
|
console.dir("result is " + connected.toString());
|
|
|
|
}
|
|
|
|
//if (!err) return cb();
|
|
|
|
if (connected) return cb();
|
|
|
|
console.dir("blockchain not started, so gonna start one");
|
|
|
|
self.startBlockchainNode(cb);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
assertNodeConnection(noLogs, cb) {
|
|
|
|
if (typeof noLogs === 'function') {
|
|
|
|
cb = noLogs;
|
|
|
|
noLogs = false;
|
|
|
|
}
|
|
|
|
const self = this;
|
|
|
|
|
|
|
|
async.waterfall([
|
|
|
|
// check if web3 is set
|
|
|
|
//
|
|
|
|
function checkWeb3State(next) {
|
|
|
|
self.events.request("blockchain:web3:isReady", (connected) => {
|
|
|
|
console.dir("---> checking web3 state");
|
|
|
|
console.dir(connected.toString());
|
|
|
|
if (connected) {
|
|
|
|
return next(connected);
|
|
|
|
}
|
|
|
|
next();
|
2018-07-26 16:37:33 +00:00
|
|
|
});
|
2018-07-20 12:21:23 +00:00
|
|
|
},
|
|
|
|
function pingEndpoint(next) {
|
|
|
|
if (!self.contractsConfig || !self.contractsConfig.deployment || !self.contractsConfig.deployment.host) {
|
|
|
|
return next();
|
|
|
|
}
|
|
|
|
const {host, port, type, protocol} = self.contractsConfig.deployment;
|
|
|
|
utils.pingEndpoint(host, port, type, protocol, self.blockchainConfig.wsOrigins.split(',')[0], next);
|
|
|
|
}
|
2018-07-26 16:37:33 +00:00
|
|
|
], function (err, _result) {
|
2018-07-20 14:12:57 +00:00
|
|
|
if (err === true || err === undefined) {
|
2018-07-20 12:21:23 +00:00
|
|
|
return cb(true);
|
|
|
|
}
|
|
|
|
return cb(false);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
startBlockchainNode(callback) {
|
|
|
|
console.dir("||==> startBlockchainNode");
|
|
|
|
const self = this;
|
|
|
|
let blockchainProcess = new BlockchainProcessLauncher({
|
|
|
|
events: self.events,
|
|
|
|
logger: self.logger,
|
|
|
|
normalizeInput: utils.normalizeInput,
|
|
|
|
blockchainConfig: self.blockchainConfig,
|
|
|
|
locale: self.locale,
|
|
|
|
isDev: self.isDev
|
|
|
|
});
|
|
|
|
|
|
|
|
blockchainProcess.startBlockchainNode();
|
|
|
|
self.events.once(constants.blockchain.blockchainReady, () => {
|
|
|
|
console.dir("||==> blockchainReady");
|
|
|
|
callback();
|
|
|
|
});
|
|
|
|
self.events.once(constants.blockchain.blockchainExit, () => {
|
|
|
|
console.dir("||==> blockchainExit");
|
|
|
|
self.provider.stop();
|
|
|
|
callback();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = BlockchainModule;
|