UNPKG

yjs-server

Version:

An extensible websocket server for the Yjs collaborative editing framework. Compatible with y-websocket.

41 lines (40 loc) 1.15 kB
import { CloseReason } from './types.js'; import { CONNECTING, invariant, OPEN } from './internal.js'; export const send = (conn, m) => { try { invariant(conn.readyState === OPEN || conn.readyState === CONNECTING, 'conn is not open'); conn.send(m, (err) => { if (err) conn.close(CloseReason.INTERNAL_ERROR); }); } catch (e) { conn.close(CloseReason.INTERNAL_ERROR); } }; export const keepAlive = (conn, pingTimeout, logger) => { let isAlive = true; const pingInterval = setInterval(() => { try { if (isAlive) { isAlive = false; conn.ping(); } else { clearInterval(pingInterval); conn.terminate(); } } catch (err) { logger.error({ err }, 'error during keep alive'); conn.terminate(); clearInterval(pingInterval); } }, pingTimeout); conn.on('pong', () => { isAlive = true; }); conn.addEventListener('close', () => { clearInterval(pingInterval); }); };