diff --git a/assets/bin/osx/iguana b/assets/bin/osx/iguana index db74a8b..6b74375 100755 Binary files a/assets/bin/osx/iguana and b/assets/bin/osx/iguana differ diff --git a/assets/bin/osx/komodo-cli b/assets/bin/osx/komodo-cli index 2f8261d..1e9abec 100755 Binary files a/assets/bin/osx/komodo-cli and b/assets/bin/osx/komodo-cli differ diff --git a/assets/bin/osx/komodod b/assets/bin/osx/komodod index 8e0354e..c81c257 100755 Binary files a/assets/bin/osx/komodod and b/assets/bin/osx/komodod differ diff --git a/assets/bin/osx/libgcc_s.1.dylib b/assets/bin/osx/libgcc_s.1.dylib old mode 100755 new mode 100644 diff --git a/assets/bin/osx/libgomp.1.dylib b/assets/bin/osx/libgomp.1.dylib old mode 100755 new mode 100644 diff --git a/assets/bin/osx/libstdc++.6.dylib b/assets/bin/osx/libstdc++.6.dylib old mode 100755 new mode 100644 diff --git a/gui/init.js b/gui/init.js index cffd8c8..251c7f4 100644 --- a/gui/init.js +++ b/gui/init.js @@ -15,6 +15,11 @@ $(document).ready(function() { if (appConf && !appConf.manualIguanaStart) { StartIguana(); } + /*if (appConf && appConf.forks && appConf.forks.basilisk) { + setTimeout(function() { + StartBasiliskInstance(); + }, 4000); + }*/ var portcheck; @@ -25,7 +30,6 @@ $(document).ready(function() { if (result !== 'error') { stopcheck(); - StartIguana_Cache(); $('#loading_status_text').text('Connecting to Basilisk Network...'); EDEX_DEXgetinfoAll(appConf.skipBasiliskNetworkCheck, appConf.minNotaries); } diff --git a/gui/loading.js b/gui/loading.js index ec9fe16..90701db 100644 --- a/gui/loading.js +++ b/gui/loading.js @@ -65,18 +65,28 @@ function StartIguana() { }); } -function StartIguana_Cache() { - ajax_data = { 'name': 'IGUANA_CACHE' }; - var start_iguana_cache= $.ajax({ - type: 'POST', - data: JSON.stringify(ajax_data), - url: 'http://127.0.0.1:17777/shepherd/forks', - contentType: 'application/json', // send as JSON - }) - start_iguana_cache.done(function(data) { - _data = JSON.parse(data); - console.log(_data.result); - sessionStorage.setItem('IguanaCachePort', _data.result); +function StartBasiliskInstance() { + var ajax_data = { 'name': 'basilisk'}; + + console.log(ajax_data); + $.ajax({ + type: 'POST', + data: JSON.stringify(ajax_data), + url: 'http://127.0.0.1:17777/shepherd/forks', + dataType: 'xml/html/script/json', // expected format for response + contentType: 'application/json', // send as JSON + success: function(data, textStatus, jqXHR) { + var AjaxOutputData = JSON.parse(data); + console.log('== Shepherd Forks Data OutPut =='); + console.log(AjaxOutputData); + }, + error: function(xhr, textStatus, error) { + console.log(xhr.statusText); + if ( xhr.readyState == 0 ) { + } + console.log(textStatus); + console.log(error); + } }); } diff --git a/main.js b/main.js index ce3cdc5..68b30d7 100644 --- a/main.js +++ b/main.js @@ -21,7 +21,7 @@ var express = require('express'), pm2 = require('pm2'), cluster = require('cluster'), numCPUs = require('os').cpus().length, - coincli = require('./private/coincli.js'), + kmdcli = require('./private/kmdcli.js'), ipc = require('electron').ipcMain; Promise = require('bluebird'); @@ -240,35 +240,14 @@ function createLoadingWindow() { } }); - /* - * var ipc = require('electron').ipcRenderer; - * ipc.once('coincliReply', function(event, response){ - * console.log(response); - * }); - * ipc.send('InvokeCoinCliAction', '{"cli":"kmd","command":"getinfo"}'); - */ - - ipc.on('InvokeCoinCliAction', function(event, data){ - console.log(JSON.stringify(data)); - console.log(data.cli) - console.log(data.command) - - if (data.cli == 'kmd') { - coincli.kmdcommand(data.command, function(err, command) { - //console.log(command); - var result = command; - event.sender.send('coincliReply', result); - }); - } - if (data.cli == 'zec') { - coincli.zeccommand(data.command, function(err, command) { - //console.log(command); - var result = command; - event.sender.send('coincliReply', result); - }); - } +ipc.on('invokeAction', function(event, data){ + //console.log(data); + kmdcli.command(data, function(err, command) { + //console.log(command); + var result = command; + event.sender.send('kmdcliReply', result); }); - +}); //ca333 todo - add os detector to use correct binary - so we can use the same bundle on ALL OS platforms /*if (os.platform() === 'win32') { process.chdir(iguanaDir); diff --git a/private/coincli.js b/private/kmdcli.js similarity index 86% rename from private/coincli.js rename to private/kmdcli.js index 327a06f..ffc9572 100644 --- a/private/coincli.js +++ b/private/kmdcli.js @@ -50,13 +50,12 @@ console.log(komodocliBin) * The **komodo-cli** command is used to get komodo api calls answer. * * @private - * @category coincli + * @category kmdcli * */ -var coincli = module.exports = { +var kmdcli = module.exports = { exec: child_process.exec, - kmdcommand: kmdcommand, - zeccommand: zeccommand + command: command }; /** @@ -64,11 +63,11 @@ var coincli = module.exports = { * * @private * @static - * @category coincli + * @category kmdcli * @param {function} callback The callback function. * */ -function parse_coincli_commands(callback) { +function parse_kmdcli_commands(callback) { return function(error, stdout, stderr) { if (error) callback(error, stderr); else callback(error, stdout); @@ -81,13 +80,13 @@ function parse_coincli_commands(callback) { * * @private * @static - * @category coincli + * @category kmdcli * @param {function} callback The callback function. * @example * - * var coincli = require('./coincli'); + * var kmdcli = require('./kmdcli'); * - * coincli.kmdcommand('getinfo', function(err, command) { + * kmdcli.command('getinfo', function(err, command) { * console.log(command); * }); * @@ -119,18 +118,9 @@ function parse_coincli_commands(callback) { * } * */ - - -function kmdcommand(kmd_command, callback) { +function command(kmd_command, callback) { if (callback) { return this.exec(komodocliBin + " " + kmd_command, - parse_coincli_commands(callback)); - } -} - -function zeccommand(zec_command, callback) { - if (callback) { - return this.exec(zcashcliBin + " " + zec_command, - parse_coincli_commands(callback)); + parse_kmdcli_commands(callback)); } } diff --git a/routes/cache.js b/routes/cache.js index 08c2c72..5b04c45 100644 --- a/routes/cache.js +++ b/routes/cache.js @@ -22,15 +22,12 @@ cache.get = function(req, res, next) { res.end(JSON.stringify(errorObj)); } else { - //var parsedJSON = 'JPARSE';//'JSON parse error'; - try { - var parsedJSON = JSON.parse(data); - - var successObj = { - 'msg': 'success', - 'result': parsedJSON - }; + var parsedJSON = JSON.parse(data), + successObj = { + 'msg': 'success', + 'result': parsedJSON + }; res.end(JSON.stringify(successObj)); } catch (e) { @@ -340,7 +337,7 @@ cache.one = function(req, res, next) { } }); - function execDEXRequests(address, coin) { + function execDEXRequests(coin, address) { let dexUrls = { 'listunspent': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listunspent?userpass=' + sessionKey + '&symbol=' + coin + '&address=' + address, 'listtransactions': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listtransactions?userpass=' + sessionKey + '&count=100&skip=0&symbol=' + coin + '&address=' + address, @@ -359,6 +356,7 @@ cache.one = function(req, res, next) { } console.log(coin + ' address ' + address); + if (!outObj.basilisk[coin][address]) { outObj.basilisk[coin][address] = {}; writeCache(); @@ -540,7 +538,7 @@ cache.one = function(req, res, next) { } }); async.each(outObj.basilisk[coin].addresses, function(address) { - execDEXRequests(address, coin); + execDEXRequests(coin, address); }); } @@ -548,7 +546,7 @@ cache.one = function(req, res, next) { if (addresses) { parseAddresses(coin, addresses); } else { - var tempUrl = 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/bitcoinrpc/getaddressesbyaccount?userpass=' + sessionKey + '&coin=' + coin + '&account=*'; + var tempUrl = 'http://' + cache.appConfig.host + ':' + cache.appConfig.iguanaCorePort /*iguanaCorePort*/ + '/api/bitcoinrpc/getaddressesbyaccount?userpass=' + sessionKey + '&coin=' + coin + '&account=*'; request({ url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl, method: 'GET' @@ -579,7 +577,7 @@ cache.one = function(req, res, next) { }); if (coin === 'all') { - var tempUrl = 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/InstantDEX/allcoins?userpass=' + sessionKey; + var tempUrl = 'http://' + cache.appConfig.host + ':' + /*iguanaCorePort*/ cache.appConfig.iguanaCorePort + '/api/InstantDEX/allcoins?userpass=' + sessionKey; request({ url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl, method: 'GET' diff --git a/routes/shepherd.js b/routes/shepherd.js index 578051b..db4080b 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -23,7 +23,7 @@ Promise = require('bluebird'); const fixPath = require('fix-path'); var ps = require('ps-node'), setconf = require('../private/setconf.js'), - coincli = require('../private/coincli.js'), + kmdcli = require('../private/kmdcli.js'), assetChainPorts = require('./ports.js') shepherd = express.Router(), iguanaInstanceRegistry = {}; @@ -91,13 +91,17 @@ shepherd.appConfig = { }, "killIguanaOnStart": true, "dev": false, - "v2": false + "v2": false, + "forks": { + "basilisk": false, + "all": false + } }; -shepherd.quitKomodod = function() { +shepherd.quitKomodod = function(chain) { // exit komodod gracefully - console.log('exec ' + komodocliBin + ' stop'); - exec(komodocliBin + ' stop', function(error, stdout, stderr) { + console.log('exec ' + komodocliBin + (chain ? ' ac_name=' + chain : '') + ' stop'); + exec(komodocliBin + (chain ? ' ac_name=' + chain : '') + ' stop', function(error, stdout, stderr) { console.log('stdout: ' + stdout) console.log('stderr: ' + stderr) if (error !== null) { @@ -228,6 +232,62 @@ shepherd.setIO = function(io) { cache.setVar('iguanaDir', iguanaDir); cache.setVar('appConfig', shepherd.appConfig); +/* + * type: GET + * + */ +shepherd.get('/forks/restart', function(req, res, next) { + var _pmid = req.query.pmid; + + pm2.connect(function(err) { + if (err) { + console.error(err); + } + + pm2.restart(_pmid, function(err, ret) { + if (err) { + console.error(err); + } + pm2.disconnect(); + + var successObj = { + 'msg': 'success', + 'result': 'restarted' + }; + + res.end(JSON.stringify(successObj)); + }); + }); +}); + +/* + * type: GET + * + */ +shepherd.get('/forks/stop', function(req, res, next) { + var _pmid = req.query.pmid; + + pm2.connect(function(err) { + if (err) { + console.error(err); + } + + pm2.stop(_pmid, function(err, ret) { + if (err) { + console.error(err); + } + pm2.disconnect(); + + var successObj = { + 'msg': 'success', + 'result': 'stopped' + }; + + res.end(JSON.stringify(successObj)); + }); + }); +}); + /* * type: GET * @@ -246,7 +306,8 @@ shepherd.get('/forks', function(req, res, next) { * params: name */ shepherd.post('/forks', function(req, res, next) { - const name = req.body.name; + const mode = req.body.mode, + coin = req.body.coin, port = shepherd.appConfig.iguanaCorePort; portscanner.findAPortNotInUse(port, port + 100, '127.0.0.1', function(error, _port) { @@ -259,12 +320,18 @@ shepherd.post('/forks', function(req, res, next) { console.log('iguana core fork port ' + _port); pm2.start({ script: iguanaBin, // path to binary - name: 'IGUANA ' + _port + ' ' + name, + name: 'IGUANA ' + _port + ' ' + mode + ' / ' + coin, exec_mode : 'fork', args: ['-port=' + _port], cwd: iguanaDir //set correct iguana directory }, function(err, apps) { - iguanaInstanceRegistry[_port] = name; + iguanaInstanceRegistry[_port] = { + 'mode': mode, + 'coin': coin, + 'pid': apps[0].process.pid, + 'pmid': apps[0].pm2_env.pm_id + }; + cache.setVar('iguanaInstances', iguanaInstanceRegistry); var successObj = { 'msg': 'success', @@ -311,7 +378,7 @@ shepherd.delete('/groom', function(req, res, next) { * type: POST * params: filename, payload */ -shepherd.post('/groom', function(req, res) { +shepherd.post('/groom', function(req, res, next) { cache.groomPost(req, res, next); }); @@ -713,7 +780,12 @@ function herder(flock, data) { args: ['-port=' + shepherd.appConfig.iguanaCorePort], cwd: iguanaDir //set correct iguana directory }, function(err, apps) { - iguanaInstanceRegistry[shepherd.appConfig.iguanaCorePort] = 'main'; + iguanaInstanceRegistry[shepherd.appConfig.iguanaCorePort] = { + 'mode': 'main', + 'coin': 'none', + 'pid': apps[0].process.pid, + 'pmid': apps[0].pm2_env.pm_id + }; pm2.disconnect(); // Disconnect from PM2 if (err) { throw err; @@ -1071,8 +1143,8 @@ function setConf(flock) { function getConf(flock) { var komodoDir = '', - ZcashDir = '', - DaemonConfPath = ''; + ZcashDir = '', + DaemonConfPath = ''; console.log(flock);