1
+ import { loadAdapter } from '../Adapters/AdapterLoader' ;
2
+ import { WSAdapter } from '../Adapters/WebSocketServer/WSAdapter' ;
1
3
import logger from '../logger' ;
2
-
3
- const typeMap = new Map ( [ [ 'disconnect' , 'close' ] ] ) ;
4
- const getWS = function ( ) {
5
- return require ( 'ws' ) ;
6
- } ;
4
+ import events from 'events' ;
7
5
8
6
export class ParseWebSocketServer {
9
7
server : Object ;
10
8
11
9
constructor (
12
10
server : any ,
13
11
onConnect : Function ,
14
- websocketTimeout : number = 10 * 1000
12
+ config
15
13
) {
16
- const WebSocketServer = getWS ( ) . Server ;
17
- const wss = new WebSocketServer ( { server : server } ) ;
18
- wss . on ( 'listening' , ( ) => {
14
+ config . server = server ;
15
+ const wss = loadAdapter (
16
+ config . wssAdapter ,
17
+ WSAdapter ,
18
+ config ,
19
+ ) ;
20
+ wss . onListen = ( ) => {
19
21
logger . info ( 'Parse LiveQuery Server starts running' ) ;
20
- } ) ;
21
- wss . on ( 'connection' , ws => {
22
+ } ;
23
+ wss . onConnection = ( ws ) => {
22
24
onConnect ( new ParseWebSocket ( ws ) ) ;
23
25
// Send ping to client periodically
24
26
const pingIntervalId = setInterval ( ( ) => {
@@ -27,24 +29,29 @@ export class ParseWebSocketServer {
27
29
} else {
28
30
clearInterval ( pingIntervalId ) ;
29
31
}
30
- } , websocketTimeout ) ;
31
- } ) ;
32
+ } , config . websocketTimeout || 10 * 1000 ) ;
33
+ } ;
34
+ wss . start ( ) ;
32
35
this . server = wss ;
33
36
}
37
+
38
+ close ( ) {
39
+ if ( this . server && this . server . close ) {
40
+ this . server . close ( ) ;
41
+ }
42
+ }
34
43
}
35
44
36
- export class ParseWebSocket {
45
+ export class ParseWebSocket extends events . EventEmitter {
37
46
ws : any ;
38
47
39
48
constructor ( ws : any ) {
49
+ super ( ) ;
50
+ ws . onmessage = ( request ) => this . emit ( 'message' , request ) ;
51
+ ws . onclose = ( ) => this . emit ( 'disconnect' ) ;
40
52
this . ws = ws ;
41
53
}
42
54
43
- on ( type : string , callback ) : void {
44
- const wsType = typeMap . has ( type ) ? typeMap . get ( type ) : type ;
45
- this . ws . on ( wsType , callback ) ;
46
- }
47
-
48
55
send ( message : any ) : void {
49
56
this . ws . send ( message ) ;
50
57
}
0 commit comments