Files
kami-parse-server/src/LiveQuery/ParseWebSocketServer.js

52 lines
1.1 KiB
JavaScript
Raw Normal View History

import logger from '../logger';
2016-03-10 14:27:00 -08:00
2016-12-07 15:17:05 -08:00
const typeMap = new Map([['disconnect', 'close']]);
const getWS = function(){
return require('ws');
};
2016-03-10 14:27:00 -08:00
export class ParseWebSocketServer {
server: Object;
constructor(
server: any,
onConnect: Function,
websocketTimeout: number = 10 * 1000
) {
const WebSocketServer = getWS().Server;
2016-12-07 15:17:05 -08:00
const wss = new WebSocketServer({ server: server });
2016-03-10 14:27:00 -08:00
wss.on('listening', () => {
logger.info('Parse LiveQuery Server starts running');
2016-03-10 14:27:00 -08:00
});
wss.on('connection', ws => {
2016-03-10 14:27:00 -08:00
onConnect(new ParseWebSocket(ws));
// Send ping to client periodically
2016-12-07 15:17:05 -08:00
const pingIntervalId = setInterval(() => {
2016-03-10 14:27:00 -08:00
if (ws.readyState == ws.OPEN) {
ws.ping();
} else {
clearInterval(pingIntervalId);
}
}, websocketTimeout);
});
this.server = wss;
}
}
export class ParseWebSocket {
ws: any;
constructor(ws: any) {
this.ws = ws;
}
on(type: string, callback): void {
2016-12-07 15:17:05 -08:00
const wsType = typeMap.has(type) ? typeMap.get(type) : type;
2016-03-10 14:27:00 -08:00
this.ws.on(wsType, callback);
}
send(message: any): void {
2016-03-10 14:27:00 -08:00
this.ws.send(message);
}
}