socked
Version:
Lightweight WebSocket client & server wrapper with reconnects, events, acks, and dev tools.
41 lines (31 loc) • 1.05 kB
JavaScript
import { WebSocketServer } from 'ws';
import { decodeMessage, encodeMessage } from './shared.js';
export function createServer(options = {}) {
const wss = new WebSocketServer(options);
wss.on('connection', (ws) => {
ws._listeners = {};
ws.on('message', (message) => {
const msg = decodeMessage(message);
if (msg && ws._listeners[msg.event]) {
ws._listeners[msg.event].forEach(fn => fn(msg.data));
if (msg.data && msg.data._ackId) {
ws.send(encodeMessage(`${msg.event}_ack_${msg.data._ackId}`, { status: 'received' }));
}
}
});
ws.emit = function(event, data) {
this.send(encodeMessage(event, data));
};
ws.onEvent = function(event, handler) {
if (!this._listeners[event]) this._listeners[event] = [];
this._listeners[event].push(handler);
};
if (wss._onConnect) {
wss._onConnect(ws);
}
});
wss.onClient = function(handler) {
this._onConnect = handler;
};
return wss;
}