Skip to content

Commit 1ec53d4

Browse files
bensalilijamesdarrachequesne
authored andcommitted
[fix] Fix Websocket implementation in React Native (#607)
As `self` is undefined in React Native.
1 parent 696c7e7 commit 1ec53d4

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

lib/transports/websocket.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ var parseqs = require('parseqs');
88
var inherit = require('component-inherit');
99
var yeast = require('yeast');
1010
var debug = require('debug')('engine.io-client:websocket');
11+
1112
var BrowserWebSocket, NodeWebSocket;
12-
if (typeof self === 'undefined') {
13+
14+
if (typeof WebSocket !== 'undefined') {
15+
BrowserWebSocket = WebSocket;
16+
} else if (typeof self !== 'undefined') {
17+
BrowserWebSocket = self.WebSocket || self.MozWebSocket;
18+
} else {
1319
try {
1420
NodeWebSocket = require('ws');
1521
} catch (e) { }
16-
} else {
17-
BrowserWebSocket = self.WebSocket || self.MozWebSocket;
1822
}
1923

2024
/**
@@ -23,7 +27,7 @@ if (typeof self === 'undefined') {
2327
* interface exposed by `ws` for Node-like environment.
2428
*/
2529

26-
var WebSocket = BrowserWebSocket || NodeWebSocket;
30+
var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
2731

2832
/**
2933
* Module exports.
@@ -47,7 +51,7 @@ function WS (opts) {
4751
this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
4852
this.protocols = opts.protocols;
4953
if (!this.usingBrowserWebSocket) {
50-
WebSocket = NodeWebSocket;
54+
WebSocketImpl = NodeWebSocket;
5155
}
5256
Transport.call(this, opts);
5357
}
@@ -107,7 +111,12 @@ WS.prototype.doOpen = function () {
107111
}
108112

109113
try {
110-
this.ws = this.usingBrowserWebSocket && !this.isReactNative ? (protocols ? new WebSocket(uri, protocols) : new WebSocket(uri)) : new WebSocket(uri, protocols, opts);
114+
this.ws =
115+
this.usingBrowserWebSocket && !this.isReactNative
116+
? protocols
117+
? new WebSocketImpl(uri, protocols)
118+
: new WebSocketImpl(uri)
119+
: new WebSocketImpl(uri, protocols, opts);
111120
} catch (err) {
112121
return this.emit('error', err);
113122
}
@@ -280,5 +289,5 @@ WS.prototype.uri = function () {
280289
*/
281290

282291
WS.prototype.check = function () {
283-
return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
292+
return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
284293
};

0 commit comments

Comments
 (0)