123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- export default function ReconnectingWebSocket(url, protocols) {
- console.log(url)
- protocols = protocols || []
-
- this.debug = false
- this.reconnectInterval = 1000
- this.timeoutInterval = 2000
- var self = this
- var ws
- var forcedClose = false
- var timedOut = false
- this.url = url
- this.protocols = protocols
- this.readyState = WebSocket.CONNECTING
- this.URL = url
- this.onopen = function (event) {
- }
- this.onclose = function (event) {
- }
- this.onconnecting = function (event) {
- }
- this.onmessage = function (event) {
- }
- this.onerror = function (event) {
- }
- function connect(reconnectAttempt) {
- ws = new WebSocket(url, protocols)
- console.log(123)
- self.onconnecting()
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'attempt-connect', url)
- }
- var localWs = ws
- var timeout = setTimeout(function () {
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'connection-timeout', url)
- }
- timedOut = true
- localWs.close()
- timedOut = false
- }, self.timeoutInterval)
- ws.onopen = function (event) {
- clearTimeout(timeout)
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'onopen', url)
- }
- self.readyState = WebSocket.OPEN
- reconnectAttempt = false
- self.onopen(event)
- }
- ws.onclose = function (event) {
- clearTimeout(timeout)
- ws = null
- if (forcedClose) {
- self.readyState = WebSocket.CLOSED
- self.onclose(event)
- } else {
- self.readyState = WebSocket.CONNECTING
- self.onconnecting()
- if (!reconnectAttempt && !timedOut) {
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'onclose', url)
- }
- self.onclose(event)
- }
- setTimeout(function () {
- connect(true)
- }, self.reconnectInterval)
- }
- }
- ws.onmessage = function (event) {
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'onmessage', url, event.data)
- }
- self.onmessage(event)
- }
- ws.onerror = function (event) {
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'onerror', url, event)
- }
- self.onerror(event)
- }
- }
- connect(url)
- this.send = function (data) {
- if (ws) {
- if (self.debug || ReconnectingWebSocket.debugAll) {
- console.debug('ReconnectingWebSocket', 'send', url, data)
- }
- return ws.send(data)
- } else {
- throw 'INVALID_STATE_ERR : Pausing to reconnect websocket'
- }
- }
- this.close = function () {
- forcedClose = true
- if (ws) {
- ws.close()
- }
- }
-
- this.refresh = function () {
- if (ws) {
- ws.close()
- }
- }
- }
- ReconnectingWebSocket.debugAll = false
|