1+ import { loadAdapter } from '../Adapters/AdapterLoader' ;
2+ import { WSAdapter } from '../Adapters/WebSocketServer/WSAdapter' ;
13import 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' ;
75
86export class ParseWebSocketServer {
97 server : Object ;
108
119 constructor (
1210 server : any ,
1311 onConnect : Function ,
14- websocketTimeout : number = 10 * 1000
12+ config
1513 ) {
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 = ( ) => {
1921 logger . info ( 'Parse LiveQuery Server starts running' ) ;
20- } ) ;
21- wss . on ( 'connection' , ws => {
22+ } ;
23+ wss . onConnection = ( ws ) => {
2224 onConnect ( new ParseWebSocket ( ws ) ) ;
2325 // Send ping to client periodically
2426 const pingIntervalId = setInterval ( ( ) => {
@@ -27,24 +29,29 @@ export class ParseWebSocketServer {
2729 } else {
2830 clearInterval ( pingIntervalId ) ;
2931 }
30- } , websocketTimeout ) ;
31- } ) ;
32+ } , config . websocketTimeout || 10 * 1000 ) ;
33+ } ;
34+ wss . start ( ) ;
3235 this . server = wss ;
3336 }
37+
38+ close ( ) {
39+ if ( this . server && this . server . close ) {
40+ this . server . close ( ) ;
41+ }
42+ }
3443}
3544
36- export class ParseWebSocket {
45+ export class ParseWebSocket extends events . EventEmitter {
3746 ws : any ;
3847
3948 constructor ( ws : any ) {
49+ super ( ) ;
50+ ws . onmessage = ( request ) => this . emit ( 'message' , request ) ;
51+ ws . onclose = ( ) => this . emit ( 'disconnect' ) ;
4052 this . ws = ws ;
4153 }
4254
43- on ( type : string , callback ) : void {
44- const wsType = typeMap . has ( type ) ? typeMap . get ( type ) : type ;
45- this . ws . on ( wsType , callback ) ;
46- }
47-
4855 send ( message : any ) : void {
4956 this . ws . send ( message ) ;
5057 }
0 commit comments