diff --git a/lib/jsonrpc.js b/lib/jsonrpc.js index 05c69b0..510467d 100644 --- a/lib/jsonrpc.js +++ b/lib/jsonrpc.js @@ -12,118 +12,117 @@ var Client = function(port, host, user, password) { this.host = host; this.user = user; this.password = password; +}; - this.call = function(method, params, callback, errback, path) { +Client.prototype.call = function(method, params, callback, errback, path) { + var time = Date.now(); + var requestJSON; - var time = Date.now(); - var requestJSON; - - if (Array.isArray(method)) { - // multiple rpc batch call - requestJSON = []; - method.forEach(function(batchCall, i) { - requestJSON.push({ - id: time + '-' + i, - method: batchCall.method, - params: batchCall.params - }); - }); - } else { - // single rpc call - requestJSON = { - id: time, - method: method, - params: params - }; - } - - // First we encode the request into JSON - var requestJSON = JSON.stringify(requestJSON); - - // prepare request options - var requestOptions = { - host: host, - port: port, - method: 'POST', - path: path || '/', - headers: { - 'Host': host, - 'Content-Length': requestJSON.length - } - }; - - // use HTTP auth if user and password set - if (user && password) { - requestOptions.auth = this.user + ':' + this.password; - } - - // Now we'll make a request to the server - var request = http.request(requestOptions); - - request.on('error', errback); - - request.on('response', function(response) { - // We need to buffer the response chunks in a nonblocking way. - var buffer = ''; - response.on('data', function(chunk) { - buffer = buffer + chunk; - }); - // When all the responses are finished, we decode the JSON and - // depending on whether it's got a result or an error, we call - // emitSuccess or emitError on the promise. - response.on('end', function() { - var err; - - try { - var decoded = JSON.parse(buffer); - } catch (e) { - if (response.statusCode !== 200) { - err = new Error('Invalid params, response status code: ' + response.statusCode); - err.code = -32602; - errback(err); - } else { - err = new Error('Problem parsing JSON response from server'); - err.code = -32603; - errback(err); - } - return; - } - - if (!Array.isArray(decoded)) { - decoded = [decoded]; - } - - // iterate over each response, normally there will be just one - // unless a batch rpc call response is being processed - decoded.forEach(function(decodedResponse, i) { - if (decodedResponse.hasOwnProperty('error') && decodedResponse.error != null) { - if (errback) { - err = new Error(decodedResponse.error.message || ''); - if (decodedResponse.error.code) { - err.code = decodedResponse.error.code; - } - errback(err); - } - } else if (decodedResponse.hasOwnProperty('result')) { - if (callback) { - callback(decodedResponse.result); - } - } else { - if (errback) { - err = new Error(decodedResponse.error.message || ''); - if (decodedResponse.error.code) { - err.code = decodedResponse.error.code; - } - errback(err); - } - } - }); - + if (Array.isArray(method)) { + // multiple rpc batch call + requestJSON = []; + method.forEach(function(batchCall, i) { + requestJSON.push({ + id: time + '-' + i, + method: batchCall.method, + params: batchCall.params }); }); - request.end(requestJSON); + } else { + // single rpc call + requestJSON = { + id: time, + method: method, + params: params + }; + } + + // First we encode the request into JSON + var requestJSON = JSON.stringify(requestJSON); + + // prepare request options + var requestOptions = { + host: this.host, + port: this.port, + method: 'POST', + path: path || '/', + headers: { + 'Host': this.host, + 'Content-Length': requestJSON.length + } }; -} + + // use HTTP auth if user and password set + if (this.user && this.password) { + requestOptions.auth = this.user + ':' + this.password; + } + + // Now we'll make a request to the server + var request = http.request(requestOptions); + + request.on('error', errback); + + request.on('response', function(response) { + // We need to buffer the response chunks in a nonblocking way. + var buffer = ''; + response.on('data', function(chunk) { + buffer = buffer + chunk; + }); + // When all the responses are finished, we decode the JSON and + // depending on whether it's got a result or an error, we call + // emitSuccess or emitError on the promise. + response.on('end', function() { + var err; + + try { + var decoded = JSON.parse(buffer); + } catch (e) { + if (response.statusCode !== 200) { + err = new Error('Invalid params, response status code: ' + response.statusCode); + err.code = -32602; + errback(err); + } else { + err = new Error('Problem parsing JSON response from server'); + err.code = -32603; + errback(err); + } + return; + } + + if (!Array.isArray(decoded)) { + decoded = [decoded]; + } + + // iterate over each response, normally there will be just one + // unless a batch rpc call response is being processed + decoded.forEach(function(decodedResponse, i) { + if (decodedResponse.hasOwnProperty('error') && decodedResponse.error != null) { + if (errback) { + err = new Error(decodedResponse.error.message || ''); + if (decodedResponse.error.code) { + err.code = decodedResponse.error.code; + } + errback(err); + } + } else if (decodedResponse.hasOwnProperty('result')) { + if (callback) { + callback(decodedResponse.result); + } + } else { + if (errback) { + err = new Error(decodedResponse.error.message || ''); + if (decodedResponse.error.code) { + err.code = decodedResponse.error.code; + } + errback(err); + } + } + }); + + }); + }); + request.end(requestJSON); +}; //===----------------------------------------------------------------------===// // Server