const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const { Server, Socket } = require("socket.io"); const { instrument } = require("@socket.io/admin-ui"); const io = new Server(server); class Client { constructor(login, password) { this.login = login; this.password = password; } } class Game { constructor(id, player1, player2) { this.id = id; this.player1 = player1; this.player2 = player2; this.turn = 1; this.board = [ [0, 0, 0], [0, 0, 0], [0, 0, 0] ]; } } /** @type {Client[]} */ let registeredClients = []; /** @type {Map} */ let onlineClients = new Map(); let games = []; app.get('/', (req, res) => { res.send('

Hello world

'); }); io.on('connection', (socket) => { console.log('someone connected'); socket.on('register', (login, password) => { console.log('user send register with login: ' + login + ' and password: ' + password); if (login.length < 3 || login.length > 20 || password.length < 3 || password.length > 20) { socket.emit('register', false, 'Login or password is too short or too long'); console.log('user tried to register with too short or too long login or password'); return; } if (registeredClients.find(client => client.login === login)) { socket.emit('register', false, 'User with this login already exists'); console.log('user tried to register with existing login'); return; } registeredClients.push(new Client(login, password)); onlineClients.set(socket, new Client(login, password)); socket.emit('register', true, 'User registered successfully'); console.log('user registered successfully'); }); socket.on('login', (login, password) => { console.log('user send login with login: ' + login + ' and password: ' + password); if (login.length < 3 || login.length > 20 || password.length < 3 || password.length > 20) { socket.emit('login', false, 'Login or password is too short or too long'); console.log('user tried to login with too short or too long login or password'); return; } if (!registeredClients.find(client => client.login === login)) { socket.emit('login', false, 'User with this login does not exist'); console.log('user tried to login with non existing login'); return; } if (registeredClients.find(client => client.login === login && client.password !== password)) { socket.emit('login', false, 'Wrong password'); console.log('user tried to login with wrong password'); return; } onlineClients.set(socket, new Client(login, password)); socket.emit('login', true, 'User logged in successfully'); }); socket.on('disconnect', () => { if (onlineClients.has(socket)) { console.log('user ' + onlineClients.get(socket).login + ' disconnected'); } else { console.log('anonymous disconnected'); } }); }); instrument(io, { auth: false }); server.listen(9800, () => { console.log('listening on *:9800'); });