Skip to content

Commit 64f359a

Browse files
committed
Add WebSocketController to CoreManager
Allows for swappable WebSocket implementation.
1 parent 2ea5a98 commit 64f359a

File tree

5 files changed

+54
-25
lines changed

5 files changed

+54
-25
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/CoreManager.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,14 @@ type HooksController = {
136136
update: (hook: mixed) => Promise;
137137
send: (method: string, path: string, body?: mixed) => Promise;
138138
};
139-
139+
type WebSocketController = {
140+
onopen: () => void;
141+
onmessage: (message: any) => void;
142+
onclose: () => void;
143+
onerror: (error: any) => void;
144+
send: (data: any) => void;
145+
close: () => void;
146+
}
140147
type Config = {
141148
AnalyticsController?: AnalyticsController,
142149
CloudController?: CloudController,
@@ -154,6 +161,7 @@ type Config = {
154161
LocalDatastoreController?: LocalDatastoreController,
155162
UserController?: UserController,
156163
HooksController?: HooksController,
164+
WebSocketController?: WebSocketController,
157165
};
158166

159167
const config: Config & { [key: string]: mixed } = {
@@ -370,6 +378,14 @@ module.exports = {
370378
return config['AsyncStorage'];
371379
},
372380

381+
setWebSocketController(controller: WebSocketController) {
382+
config['WebSocketController'] = controller;
383+
},
384+
385+
getWebSocketController(): WebSocketController {
386+
return config['WebSocketController'];
387+
},
388+
373389
setUserController(controller: UserController) {
374390
requireMethods('UserController', [
375391
'setCurrentUser',

src/LiveQueryClient.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ class LiveQueryClient extends EventEmitter {
238238
*
239239
*/
240240
open() {
241-
const WebSocketImplementation = this._getWebSocketImplementation();
241+
const WebSocketImplementation = CoreManager.getWebSocketController();
242242
if (!WebSocketImplementation) {
243243
this.emit(CLIENT_EMMITER_TYPES.ERROR, 'Can not find WebSocket implementation');
244244
return;
@@ -248,7 +248,6 @@ class LiveQueryClient extends EventEmitter {
248248
this.state = CLIENT_STATE.CONNECTING;
249249
}
250250

251-
// Get WebSocket implementation
252251
this.socket = new WebSocketImplementation(this.serverURL);
253252

254253
// Bind WebSocket callbacks
@@ -316,18 +315,6 @@ class LiveQueryClient extends EventEmitter {
316315
this.emit(CLIENT_EMMITER_TYPES.CLOSE);
317316
}
318317

319-
_getWebSocketImplementation(): any {
320-
if (process.env.PARSE_BUILD === 'node') {
321-
return require('ws');
322-
} else if (process.env.PARSE_BUILD === 'browser') {
323-
return typeof WebSocket === 'function' || typeof WebSocket === 'object' ? WebSocket : null;
324-
} else if (process.env.PARSE_BUILD === 'weapp') {
325-
return require('./Socket.weapp');
326-
} else if (process.env.PARSE_BUILD === 'react-native') {
327-
return WebSocket;
328-
}
329-
}
330-
331318
// ensure we start with valid state if connect is called again after close
332319
_handleReset() {
333320
this.attempts = 1;
@@ -463,4 +450,14 @@ class LiveQueryClient extends EventEmitter {
463450
}
464451
}
465452

453+
if (process.env.PARSE_BUILD === 'node') {
454+
CoreManager.setWebSocketController(require('ws'));
455+
} else if (process.env.PARSE_BUILD === 'browser') {
456+
CoreManager.setWebSocketController(typeof WebSocket === 'function' || typeof WebSocket === 'object' ? WebSocket : null);
457+
} else if (process.env.PARSE_BUILD === 'weapp') {
458+
CoreManager.setWebSocketController(require('./Socket.weapp'));
459+
} else if (process.env.PARSE_BUILD === 'react-native') {
460+
CoreManager.setWebSocketController(WebSocket);
461+
}
462+
466463
export default LiveQueryClient;

src/Socket.weapp.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ module.exports = class SocketWeapp {
2626
})
2727
}
2828

29-
send(msg) {
30-
wx.sendSocketMessage({
31-
data: msg
32-
})
29+
send(data) {
30+
wx.sendSocketMessage({ data });
31+
}
32+
33+
close() {
34+
wx.closeSocket();
3335
}
3436
}

src/__tests__/CoreManager-test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,4 +381,18 @@ describe('CoreManager', () => {
381381
CoreManager.setLocalDatastoreController(controller);
382382
expect(CoreManager.getLocalDatastoreController()).toBe(controller);
383383
});
384+
385+
it('can set and get WebSocketController', () => {
386+
const controller = {
387+
onopen: function() {},
388+
onmessage: function() {},
389+
onclose: function() {},
390+
onerror: function() {},
391+
send: function() {},
392+
close: function() {},
393+
};
394+
395+
CoreManager.setWebSocketController(controller);
396+
expect(CoreManager.getWebSocketController()).toBe(controller);
397+
});
384398
});

0 commit comments

Comments
 (0)