This repository has been archived on 2023-11-14. You can view files and clone it, but cannot push or open issues/pull-requests.
viscord/packages/server/src/index.ts

55 lines
1.2 KiB
TypeScript

import { WebSocketServer } from 'ws';
import router from './routers/root';
const wss = new WebSocketServer({
port: 3000,
}, () => {
console.log('ws chat server started on dev.valnet.xyz');
});
wss.on('connection', (ws) => {
ws.on('message', async (str) => {
try {
const message = JSON.parse(str.toString());
if(typeof message.action !== 'string') {
console.warn('invalid JSON message');
return;
}
const {action, data} = message;
try {
const _return = await (router(action, data) as unknown as Promise<any>);
if(_return) {
ws.send(JSON.stringify(_return));
}
} catch(e) {
console.warn(`error in action ${action}`);
console.error(e);
}
} catch (e) {
console.warn('JSON parse failed on message');
console.error(e);
}
});
});
export function send(client: any, action: string, data?: any) {
client.send(JSON.stringify({action, data}));
}
export function broadcast(action: string, data?: any) {
for(const client of wss.clients) {
send(client, action, data);
}
}
export default wss;
// -------------
import { update } from './db/migrate';
try {
update();
} catch (e) {
console.error(e);
}