yjs-server
Version:
An extensible websocket server for the Yjs collaborative editing framework. Compatible with y-websocket.
41 lines (40 loc) • 1.15 kB
JavaScript
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);
});
};