const express = require('express'); const { createServer } = require('http'); const WebSocket = require('ws'); const path = require('path'); const MessageRouter = require('./lib/messageRouter'); const ConnectionManager = require('./lib/connectionManager'); const app = express(); app.use(express.static(path.join(__dirname, 'public'))); const server = createServer(app); const wss = new WebSocket.Server({ server }); const connectionManager = new ConnectionManager(); const messageRouter = new MessageRouter(connectionManager); wss.on('connection', (ws, req) => { const query = req.url?.split('?')[1]; const urlParams = new URLSearchParams(query); const username = urlParams.get('u'); if (!username) { ws.send(JSON.stringify({ error: true, message: "Use /?u=... to set a username" })); ws.close(); return; } if (!connectionManager.addUser(username, ws)) { ws.send(JSON.stringify({ error: true, message: "This user is currently online, pick another username" })); ws.close(); return; } console.log(`[Connection] User connected: ${username}`); ws.on('message', (data) => { try { const parsedData = JSON.parse(data.toString()); messageRouter.routeMessage(username, parsedData); } catch (err) { const errorMsg = { error: true, message: `Invalid JSON format: ${err.message}` }; ws.send(JSON.stringify(errorMsg)); } }); ws.on('close', () => { connectionManager.removeUser(username); console.log(`[Connection] User disconnected: ${username}`); }); ws.send(JSON.stringify({ error: false, message: `Connected as ${username}` })); }); server.listen(65010, 'localhost', () => { console.log(`[callback] started`); });