Moving to TS, add user lists commands
This commit is contained in:
parent
481d119d3b
commit
7585f6a40b
6 changed files with 1034 additions and 106 deletions
208
dist/index.js
vendored
Normal file
208
dist/index.js
vendored
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const express_1 = __importDefault(require("express"));
|
||||
const http_1 = __importDefault(require("http"));
|
||||
const socket_io_1 = require("socket.io");
|
||||
const admin_ui_1 = require("@socket.io/admin-ui");
|
||||
const app = (0, express_1.default)();
|
||||
const server = http_1.default.createServer(app);
|
||||
const io = new socket_io_1.Server(server);
|
||||
class Client {
|
||||
get login() {
|
||||
return this._login;
|
||||
}
|
||||
get password() {
|
||||
return this._password;
|
||||
}
|
||||
get inGame() {
|
||||
return this._inGame;
|
||||
}
|
||||
constructor(login, password) {
|
||||
this._login = login;
|
||||
this._password = password;
|
||||
this._inGame = false;
|
||||
}
|
||||
setInGame(inGame) {
|
||||
this._inGame = inGame;
|
||||
}
|
||||
}
|
||||
class Game {
|
||||
constructor(player1, player2) {
|
||||
this.player1 = player1;
|
||||
this.player2 = player2;
|
||||
this.turn = 1;
|
||||
this.board = [
|
||||
[0, 0, 0],
|
||||
[0, 0, 0],
|
||||
[0, 0, 0],
|
||||
];
|
||||
}
|
||||
}
|
||||
class Room {
|
||||
get availablePlayers() {
|
||||
return this._availablePlayers;
|
||||
}
|
||||
constructor() {
|
||||
this._availablePlayers = new Map();
|
||||
}
|
||||
addPlayer(player) {
|
||||
this._availablePlayers.set(player.login, player);
|
||||
}
|
||||
removePlayer(player) {
|
||||
this._availablePlayers.delete(player.login);
|
||||
}
|
||||
}
|
||||
let registeredClients = [];
|
||||
let onlineClients = new Map();
|
||||
let guessersRoom = new Room();
|
||||
let suggestersRoom = new Room();
|
||||
app.get("/", (req, res) => {
|
||||
res.send("<h1>Hello world</h1>");
|
||||
});
|
||||
io.on("connection", (socket) => {
|
||||
console.log("someone connected");
|
||||
socket.emit("hello", "I don't know you");
|
||||
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");
|
||||
io.emit("updateNeeded");
|
||||
});
|
||||
socket.on("getUpdate", () => {
|
||||
const client = onlineClients.get(socket);
|
||||
if (client === undefined) {
|
||||
socket.emit("update", false, 403);
|
||||
return;
|
||||
}
|
||||
socket.emit("update", true, {
|
||||
guessers: Array.from(guessersRoom.availablePlayers.values()).map((e) => e.login),
|
||||
suggesters: Array.from(suggestersRoom.availablePlayers.values()).map((e) => e.login),
|
||||
});
|
||||
});
|
||||
socket.on("join", (room) => {
|
||||
const client = onlineClients.get(socket);
|
||||
if (client === undefined) {
|
||||
socket.emit("joinResponse", false, 403);
|
||||
return;
|
||||
}
|
||||
if (client.inGame || guessersRoom.availablePlayers.has(client.login) || suggestersRoom.availablePlayers.has(client.login)) {
|
||||
socket.emit("joinResponse", false, 400);
|
||||
return;
|
||||
}
|
||||
if (room === "guessers") {
|
||||
guessersRoom.addPlayer(client);
|
||||
console.log("user " + client.login + " joined guessers");
|
||||
socket.emit("joinResponse", [true]);
|
||||
io.emit("updateNeeded");
|
||||
}
|
||||
else if (room === "suggesters") {
|
||||
suggestersRoom.addPlayer(client);
|
||||
console.log("user " + client.login + " joined suggesters");
|
||||
socket.emit("joinResponse", [true]);
|
||||
io.emit("updateNeeded");
|
||||
}
|
||||
else {
|
||||
socket.emit("joinResponse", false, 400);
|
||||
console.log("user " + client.login + " tried to join non existing room");
|
||||
}
|
||||
});
|
||||
socket.on("leave", (room) => {
|
||||
const client = onlineClients.get(socket);
|
||||
if (client === undefined) {
|
||||
socket.emit("leaveResponse", false, 403);
|
||||
return;
|
||||
}
|
||||
if (client.inGame || (!guessersRoom.availablePlayers.has(client.login) && !suggestersRoom.availablePlayers.has(client.login))) {
|
||||
socket.emit("leaveResponse", false, 400);
|
||||
return;
|
||||
}
|
||||
if (room === "guessers") {
|
||||
guessersRoom.removePlayer(client);
|
||||
console.log("user " + client.login + " left guessers");
|
||||
socket.emit("leaveResponse", [true]);
|
||||
io.emit("updateNeeded");
|
||||
}
|
||||
else if (room === "suggesters") {
|
||||
suggestersRoom.removePlayer(client);
|
||||
console.log("user " + client.login + " left suggesters");
|
||||
socket.emit("leaveResponse", [true]);
|
||||
io.emit("updateNeeded");
|
||||
}
|
||||
else {
|
||||
socket.emit("leaveResponse", false, 400);
|
||||
console.log("user " + client.login + " tried to left non existing room");
|
||||
}
|
||||
});
|
||||
socket.on("sendRequest", (sendTo) => {
|
||||
const client = onlineClients.get(socket);
|
||||
if (client === undefined) {
|
||||
socket.emit("sendRequestResponse", false, 403);
|
||||
return;
|
||||
}
|
||||
if (client.inGame || sendTo === client.login) {
|
||||
socket.emit("sendRequestResponse", false, 400);
|
||||
return;
|
||||
}
|
||||
const otherClientSocket = Array.from(onlineClients.keys()).find((key) => onlineClients.get(key).login === sendTo);
|
||||
if (otherClientSocket === undefined) {
|
||||
socket.emit("sendRequestResponse", false, 404);
|
||||
return;
|
||||
}
|
||||
otherClientSocket.emit("gameRequest", client.login);
|
||||
socket.emit("sendRequestResponse", [true]);
|
||||
});
|
||||
socket.on("disconnect", () => {
|
||||
const client = onlineClients.get(socket);
|
||||
if (client !== undefined) {
|
||||
console.log("user " + client.login + " disconnected");
|
||||
guessersRoom.removePlayer(client);
|
||||
suggestersRoom.removePlayer(client);
|
||||
onlineClients.delete(socket);
|
||||
}
|
||||
else {
|
||||
console.log("anonymous disconnected");
|
||||
}
|
||||
io.emit("updateNeeded");
|
||||
});
|
||||
});
|
||||
(0, admin_ui_1.instrument)(io, {
|
||||
auth: false,
|
||||
});
|
||||
server.listen(9800, () => {
|
||||
console.log("⚡️ listening on *:9800");
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue