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

52 lines
1.2 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() {
try {
return require('uws');
} catch(e) {
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) => {
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);
}
}