99 lines
No EOL
3.3 KiB
JavaScript
99 lines
No EOL
3.3 KiB
JavaScript
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<Socket, Client>} */
|
|
let onlineClients = new Map();
|
|
|
|
let games = [];
|
|
|
|
app.get('/', (req, res) => {
|
|
res.send('<h1>Hello world</h1>');
|
|
});
|
|
|
|
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');
|
|
}); |