diff options
author | obscuren <geffobscura@gmail.com> | 2014-10-21 06:15:10 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-10-21 06:15:10 +0800 |
commit | 74cab14b8d208d8c822eb6a1cbea8a9e6cffb544 (patch) | |
tree | 2af80c49109a74e40635fc2e8404dbc8d64a329f | |
parent | c8aa5feb1487d3e7c0ea0f2233912afdbd5306d2 (diff) | |
download | dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar.gz dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar.bz2 dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar.lz dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar.xz dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.tar.zst dexon-74cab14b8d208d8c822eb6a1cbea8a9e6cffb544.zip |
Moved WebSocketProvider
-rw-r--r-- | websocket.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/websocket.js b/websocket.js new file mode 100644 index 000000000..e06d127e8 --- /dev/null +++ b/websocket.js @@ -0,0 +1,51 @@ +(function() { + var WebSocketProvider = function(host) { + // onmessage handlers + this.handlers = []; + // queue will be filled with messages if send is invoked before the ws is ready + this.queued = []; + this.ready = false; + + this.ws = new WebSocket(host); + + var self = this; + this.ws.onmessage = function(event) { + for(var i = 0; i < self.handlers.length; i++) { + self.handlers[i].call(self, event.data, event) + } + }; + + this.ws.onopen = function() { + self.ready = true; + + for(var i = 0; i < self.queued.length; i++) { + // Resend + self.send(self.queued[i]); + } + }; + }; + WebSocketProvider.prototype.send = function(payload) { + if(this.ready) { + var data = JSON.stringify(payload); + + this.ws.send(data); + } else { + this.queued.push(payload); + } + }; + + WebSocketProvider.prototype.onMessage = function(handler) { + this.handlers.push(handler); + }; + + WebSocketProvider.prototype.unload = function() { + this.ws.close(); + }; + Object.defineProperty(WebSocketProvider.prototype, "onmessage", { + set: function(provider) { this.onMessage(provider); } + }); + + if(typeof(web3) !== "undefined" && web3.providers !== undefined) { + web3.WebSocketProvider = WebSocketProvider; + } +})(); |