README
Install
npm install ws-http
Example
./server.js
const wsHttp = require('ws-http');
const server = new wsHttp.Server('./root');
server.on('ping', (client, ...data) => {
client.reply('pong', ...data);
});
server.ready(80);
./root/index.html
<head>
<script src="./client.js"></script>
<script defer src="./index.js"></script>
</head>
<body></body>
./root/client.js
const __ = {
client: (init) => {
if (init === true) console.log('[socket] attempting to connect...');
else console.log('[socket] attempting to reconnect...');
__.socket = new WebSocket(`ws://${location.hostname}${location.port}`);
__.socket.addEventListener('open', () => {
if (init === true) console.log('[socket] connection established.');
else console.log('[socket] connection restored.');
});
__.socket.addEventListener('close', () => {
console.log('[socket] connection lost.');
setTimeout(__.client, 1e3);
});
__.socket.addEventListener('message', (event) => {
try {
const message = JSON.parse(event.data);
__.fire(__.store, message.event, ...message.data);
} catch (error) {}
});
},
fire: (store, event, ...data) => {
return (store[event] || (store[event] = [])).filter((x) => x).map((listener) => listener(...data));
},
on: (store, event, listener) => {
return (store[event] || (store[event] = [])).push(listener);
},
socket: null,
store: {}
};
__.client(true);
window.client = {
/** @param {string} event @param {...any} data */
send: (event, ...data) => {
if (__.socket) return __.socket.send(JSON.stringify({ event: event, data: data }));
},
/** @param {string} event @param {function} listener */
on: (event, listener) => {
return __.on(__.store, event, listener);
}
};
./root/index.js
setInterval(() => client.send('ping', 'lorem ipsum', 123), 1e3);
client.on('pong', console.log);