diff --git a/bin/client.js b/bin/client.js new file mode 100644 index 00000000..30b61c88 --- /dev/null +++ b/bin/client.js @@ -0,0 +1,24 @@ +'use strict'; + +var socket = require('socket.io-client')('http://localhost:3000'); +socket.on('connect', function(){ + console.log('connected'); +}); + +socket.on('disconnect', function(){ + console.log('disconnected'); +}); + +var message = { + command: 'getOutputs', + params: ['1HTxCVrXuthad6YW5895K98XmVsdMvvBSw', true] +}; + +socket.emit('message', message, function(response) { + if(response.error) { + console.log('Error', response.error); + return; + } + + console.log(response.result); +}); \ No newline at end of file diff --git a/bin/start-node.js b/bin/start-node.js index bfcafcc3..3f18e8fc 100644 --- a/bin/start-node.js +++ b/bin/start-node.js @@ -2,7 +2,7 @@ var BitcoinNode = require('..').Node; var chainlib = require('chainlib'); -var io = require('socket.io'); +var io = require('socket.io')(3000); var log = chainlib.log; log.debug = function() {}; @@ -34,14 +34,50 @@ node.on('ready', function() { var name = data[0]; var instance = data[1]; var method = data[2]; - methodsMap[name] = function() { - return method.apply(instance, arguments); + var args = data[3]; + methodsMap[name] = { + fn: function() { + return method.apply(instance, arguments); + }, + args: args }; }); - socket.on('message', function(message) { + socket.on('message', function(message, socketCallback) { if (methodsMap[message.command]) { - methodsMap[message.command](message.params); + var params = message.params; + + if(!params || !params.length) { + params = []; + } + + if(params.length !== methodsMap[message.command].args) { + return socketCallback({ + error: 'Expected ' + methodsMap[message.command].args + ' parameters' + }); + } + + var callback = function(err, result) { + console.log('callback called'); + console.log(err, result); + var response = {}; + if(err) { + response.error = err; + } + + if(result) { + response.result = result; + } + + socketCallback(response); + }; + + params = params.concat(callback); + methodsMap[message.command].fn.apply(this, params); + } else { + socketCallback({ + error: 'Method Not Found' + }); } }); @@ -57,7 +93,9 @@ node.on('ready', function() { events.forEach(function(event) { bus.on(event.name, function(data) { - socket.emit(event.name, data); + if(socket.connected) { + socket.emit(event.name, data); + } }); }); diff --git a/lib/bus.js b/lib/bus.js index aaf1da33..d1d0ecca 100644 --- a/lib/bus.js +++ b/lib/bus.js @@ -40,4 +40,8 @@ Bus.prototype.unsubscribe = function(name) { } }; +Bus.prototype.close = function() { + // TODO Unsubscribe from all events +}; + module.exports = Bus;