diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b3b80a5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:16-alpine + +EXPOSE 9800 + +WORKDIR /home/node/app + +COPY . . + +RUN npm install -g pnpm +RUN pnpm install +RUN pnpm run build + +CMD ["node", "dist/index.js"] \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index 6b3d214..0000000 --- a/dist/index.js +++ /dev/null @@ -1,208 +0,0 @@ -"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("

Hello world

"); -}); -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"); -}); diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..16c7924 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,8 @@ +version: "3.7" + +services: + huacu_server: + image: nuark/huacu_server:latest + restart: unless-stopped + ports: + - "9800:9800"