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"