aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarek Kotewicz <marek.kotewicz@gmail.com>2015-01-22 03:29:02 +0800
committerMarek Kotewicz <marek.kotewicz@gmail.com>2015-01-22 03:29:02 +0800
commit0d2cccc2ce88753a22ed60b74f50a376750d6483 (patch)
treedfac89690d428f4bf3ddd9d24a96535b7fcd9b86 /lib
parente1fcffcc810bdf6a116cc12e21c5a8750cb86d23 (diff)
downloaddexon-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.js66
-rw-r--r--lib/providermanager.js14
-rw-r--r--lib/web3.js96
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);