diff options
author | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-01-22 03:29:02 +0800 |
---|---|---|
committer | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-01-22 03:29:02 +0800 |
commit | 0d2cccc2ce88753a22ed60b74f50a376750d6483 (patch) | |
tree | dfac89690d428f4bf3ddd9d24a96535b7fcd9b86 /lib | |
parent | e1fcffcc810bdf6a116cc12e21c5a8750cb86d23 (diff) | |
download | dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar.gz dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar.bz2 dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar.lz dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar.xz dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.tar.zst dexon-0d2cccc2ce88753a22ed60b74f50a376750d6483.zip |
http sync api
Diffstat (limited to 'lib')
-rw-r--r-- | lib/httpsync.js | 66 | ||||
-rw-r--r-- | lib/providermanager.js | 14 | ||||
-rw-r--r-- | lib/web3.js | 96 |
3 files changed, 132 insertions, 44 deletions
diff --git a/lib/httpsync.js b/lib/httpsync.js new file mode 100644 index 000000000..20bdbd1a2 --- /dev/null +++ b/lib/httpsync.js @@ -0,0 +1,66 @@ +/* + This file is part of ethereum.js. + + ethereum.js is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ethereum.js is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with ethereum.js. If not, see <http://www.gnu.org/licenses/>. +*/ +/** @file httpsync.js + * @authors: + * Marek Kotewicz <marek@ethdev.com> + * Marian Oancea <marian@ethdev.com> + * @date 2014 + */ + +var HttpSyncProvider = function (host) { + this.handlers = []; + this.host = host; +}; + +/// Transforms inner message to proper jsonrpc object +/// @param inner message object +/// @returns jsonrpc object +function formatJsonRpcObject(object) { + return { + jsonrpc: '2.0', + method: object.call, + params: object.args, + id: object._id + }; +} + +/// Transforms jsonrpc object to inner message +/// @param incoming jsonrpc message +/// @returns inner message object +function formatJsonRpcMessage(message) { + var object = JSON.parse(message); + + return { + _id: object.id, + data: object.result, + error: object.error + }; +} + +HttpSyncProvider.prototype.send = function (payload) { + var data = formatJsonRpcObject(payload); + + var request = new XMLHttpRequest(); + request.open('POST', this.host, false); + request.send(JSON.stringify(data)); + + // check request.status + return request.responseText; +}; + +module.exports = HttpSyncProvider; + diff --git a/lib/providermanager.js b/lib/providermanager.js index f79a9b087..83ea9417b 100644 --- a/lib/providermanager.js +++ b/lib/providermanager.js @@ -56,21 +56,17 @@ var ProviderManager = function() { }; /// sends outgoing requests, if provider is not available, enqueue the request -ProviderManager.prototype.send = function(data, cb) { +ProviderManager.prototype.send = function(data) { data._id = this.id; - if (cb) { - web3._callbacks[data._id] = cb; - } data.args = data.args || []; this.id++; - if(this.provider !== undefined) { - this.provider.send(data); - } else { - console.warn("provider is not set"); - this.queued.push(data); + if (this.provider === undefined) { + console.error("provider is not set"); } + + return this.provider.send(data); }; /// setups provider, which will be used for sending messages diff --git a/lib/web3.js b/lib/web3.js index f071eea49..58bcc0c3f 100644 --- a/lib/web3.js +++ b/lib/web3.js @@ -169,22 +169,32 @@ var shhWatchMethods = function () { var setupMethods = function (obj, methods) { methods.forEach(function (method) { obj[method.name] = function () { - return flattenPromise(Array.prototype.slice.call(arguments)).then(function (args) { - var call = typeof method.call === "function" ? method.call(args) : method.call; - return {call: call, args: args}; - }).then(function (request) { - return new Promise(function (resolve, reject) { - web3.provider.send(request, function (err, result) { - if (!err) { - resolve(result); - return; - } - reject(err); - }); - }); - }).catch(function(err) { - console.error(err); + var args = Array.prototype.slice.call(arguments); + var call = typeof method.call === 'function' ? method.call(args) : method.call; + var result = web3.provider.send({ + call: call, + args: args }); + + result = JSON.parse(result); + return result.result; + + //return flattenPromise(Array.prototype.slice.call(arguments)).then(function (args) { + //var call = typeof method.call === "function" ? method.call(args) : method.call; + //return {call: call, args: args}; + //}).then(function (request) { + //return new Promise(function (resolve, reject) { + //web3.provider.send(request, function (err, result) { + //if (!err) { + //resolve(result); + //return; + //} + //reject(err); + //}); + //}); + //}).catch(function(err) { + //console.error(err); + //}); }; }); }; @@ -195,31 +205,47 @@ var setupProperties = function (obj, properties) { properties.forEach(function (property) { var proto = {}; proto.get = function () { - return new Promise(function(resolve, reject) { - web3.provider.send({call: property.getter}, function(err, result) { - if (!err) { - resolve(result); - return; - } - reject(err); - }); + var result = web3.provider.send({ + call: property.getter }); + + result = JSON.parse(result); + return result.result; + + + //return new Promise(function(resolve, reject) { + //web3.provider.send({call: property.getter}, function(err, result) { + //if (!err) { + //resolve(result); + //return; + //} + //reject(err); + //}); + //}); }; if (property.setter) { proto.set = function (val) { - return flattenPromise([val]).then(function (args) { - return new Promise(function (resolve) { - web3.provider.send({call: property.setter, args: args}, function (err, result) { - if (!err) { - resolve(result); - return; - } - reject(err); - }); - }); - }).catch(function (err) { - console.error(err); + var result = web3.provider.send({ + call: property.setter, + args: [val] }); + + result = JSON.parse(result); + return result.result; + + //return flattenPromise([val]).then(function (args) { + //return new Promise(function (resolve) { + //web3.provider.send({call: property.setter, args: args}, function (err, result) { + //if (!err) { + //resolve(result); + //return; + //} + //reject(err); + //}); + //}); + //}).catch(function (err) { + //console.error(err); + //}); }; } Object.defineProperty(obj, property.name, proto); |