Marek Kotewicz
10 years ago
2 changed files with 70 additions and 15 deletions
@ -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; |
||||
|
} |
||||
|
})(); |
Loading…
Reference in new issue