http provider

This commit is contained in:
Marek Kotewicz 2014-10-22 11:38:33 +02:00
parent eef4cd1b64
commit 5cd93a0618
2 changed files with 70 additions and 15 deletions

52
http.js Normal file
View File

@ -0,0 +1,52 @@
(function () {
var HttpProvider = function (host) {
this.handlers = [];
this.host = host;
};
//TODO unify the format of object passed to 'send method'
function formatJsonRpcObject(object) {
return {
jsonrpc: '2.0',
method: object.call,
params: object.args,
id: object._id
}
};
//TODO unify the format of output messages, maybe there should be objects instead
function formatJsonRpcMessage(message) {
var object = JSON.parse(message);
return JSON.stringify({
_id: object.id,
data: object.result
});
};
HttpProvider.prototype.send = function (payload) {
var data = formatJsonRpcObject(payload);
var request = new XMLHttpRequest();
request.open("POST", this.host, true);
request.send(JSON.stringify(data));
var self = this;
request.onreadystatechange = function () {
if (request.readyState === 4) {
self.handlers.forEach(function (handler) {
handler.call(self, formatJsonRpcMessage(request.responseText));
});
}
}
};
Object.defineProperty(HttpProvider.prototype, "onmessage", {
set: function (handler) {
this.handlers.push(handler);
}
});
if (typeof(web3) !== "undefined" && web3.providers !== undefined) {
web3.providers.HttpProvider = HttpProvider;
}
})();

33
main.js
View File

@ -49,37 +49,40 @@
eth: { eth: {
prototype: Object(), prototype: Object(),
//TODO solve the issue with numberOrHash impl
block: function(numberOrHash) { block: function(numberOrHash) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
/* var args = typeof numberOrHash === "string" ? [0, numberOrHash] : [numberOrHash, ""];
var func; web3.provider.send({call: "block", args: args}, function(block) {
if(typeof numberOrHash == "string") {
func = "getBlockByHash";
} else {
func = "getBlockByNumber";
}
*/
web3.provider.send({call: /*func*/"block", args: [numberOrHash]}, function(block) {
if(block) if(block)
resolve(block); resolve(block);
else else
reject("not found"); reject("not found");
}); });
}); });
}, },
transaction: function(numberOrHash, nth) { transaction: function(numberOrHash, nth) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
reject("`transaction` not yet implemented") var args = typeof numberOrHash === "string" ? [0, numberOrHash, nth] : [numberOrHash, "", nth];
web3.provider.send({call: "transaction", args: args}, function(block) {
if(block)
resolve(block);
else
reject("not found");
});
}); });
}, },
uncle: function(numberOrHash, nth) { uncle: function(numberOrHash, nth) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
reject("`uncle` not yet implemented") var args = typeof numberOrHash === "string" ? [0, numberOrHash, nth] : [numberOrHash, "", nth];
web3.provider.send({call: "uncle", args: args}, function(block) {
if(block)
resolve(block);
else
reject("not found");
});
}); });
}, },
@ -128,7 +131,7 @@
return Promise.all(promises).then(function() { return Promise.all(promises).then(function() {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
params.data = params.data.join(""); params.data = params.data.join("");
web3.provider.send({call: "transact", args: ["0x"+params]}, function(data) { web3.provider.send({call: "transact", args: [params]}, function(data) {
if(data[1]) if(data[1])
reject(data[0]); reject(data[0]);
else else