forked from joewalnes/reconnecting-websocket
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreconnecting-websocket.min.js
1 lines (1 loc) · 3.42 KB
/
reconnecting-websocket.min.js
1
!function(e,n){"function"==typeof define&&define.amd?define([],n):"undefined"!=typeof module&&module.exports?module.exports=n():e.ReconnectingWebSocket=n()}(this,function(){function e(n,t,o){function c(e,n){var t=document.createEvent("CustomEvent");return t.initCustomEvent(e,!1,!1,n),t}var i={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3,maxReconnectAttempts:null,binaryType:"blob"};o||(o={});for(var r in i)"undefined"!=typeof o[r]?this[r]=o[r]:this[r]=i[r];this.url=n,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var s,u=this,a=!1,d=!1,l=document.createElement("div");l.addEventListener("open",function(e){u.onopen(e)}),l.addEventListener("close",function(e){u.onclose(e)}),l.addEventListener("connecting",function(e){u.onconnecting(e)}),l.addEventListener("message",function(e){u.onmessage(e)}),l.addEventListener("error",function(e){u.onerror(e)}),this.addEventListener=l.addEventListener.bind(l),this.removeEventListener=l.removeEventListener.bind(l),this.dispatchEvent=l.dispatchEvent.bind(l),this.open=function(n){if(s=new WebSocket(u.url,t||[]),s.binaryType=this.binaryType,n){if(this.maxReconnectAttempts&&this.reconnectAttempts>this.maxReconnectAttempts)return}else l.dispatchEvent(c("connecting")),this.reconnectAttempts=0;(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",u.url);var o=s,i=setTimeout(function(){(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",u.url),d=!0,o.close(),d=!1},u.timeoutInterval);s.onopen=function(t){clearTimeout(i),(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","onopen",u.url),u.protocol=s.protocol,u.readyState=WebSocket.OPEN,u.reconnectAttempts=0;var o=c("open");o.isReconnect=n,n=!1,l.dispatchEvent(o)},s.onclose=function(t){if(clearTimeout(i),s=null,a)u.readyState=WebSocket.CLOSED,l.dispatchEvent(c("close"));else{u.readyState=WebSocket.CONNECTING;var o=c("connecting");o.code=t.code,o.reason=t.reason,o.wasClean=t.wasClean,l.dispatchEvent(o),n||d||((u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","onclose",u.url),l.dispatchEvent(c("close")));var i=u.reconnectInterval*Math.pow(u.reconnectDecay,u.reconnectAttempts);setTimeout(function(){u.reconnectAttempts++,u.open(!0)},i>u.maxReconnectInterval?u.maxReconnectInterval:i)}},s.onmessage=function(n){(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",u.url,n.data);var t=c("message");t.data=n.data,l.dispatchEvent(t)},s.onerror=function(n){(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","onerror",u.url,n),l.dispatchEvent(c("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(n){if(!s)throw"INVALID_STATE_ERR : Pausing to reconnect websocket";(u.debug||e.debugAll)&&console.debug("ReconnectingWebSocket","send",u.url,n),this.waitForConnection(function(){return s.send(n)},1e3)},this.waitForConnection=function(e,n){if(1===s.readyState)e();else{var t=this;setTimeout(function(){t.waitForConnection(e,n)},n)}},this.close=function(e,n){"undefined"==typeof e&&(e=1e3),a=!0,s&&s.close(e,n)},this.refresh=function(){s&&s.close()}}if("WebSocket"in window)return e.prototype.onopen=function(e){},e.prototype.onclose=function(e){},e.prototype.onconnecting=function(e){},e.prototype.onmessage=function(e){},e.prototype.onerror=function(e){},e.debugAll=!1,e.CONNECTING=WebSocket.CONNECTING,e.OPEN=WebSocket.OPEN,e.CLOSING=WebSocket.CLOSING,e.CLOSED=WebSocket.CLOSED,e});