From 91a49a33cd43680170b56fd1f77ca785d359d9d2 Mon Sep 17 00:00:00 2001 From: MaksSlyzar Date: Tue, 31 Mar 2026 15:26:34 +0300 Subject: [PATCH] fix api heartbeat --- api/src/controllers/serverController.js | 5 ++--- api/src/models/User.js | 4 ++++ api/src/services/serverService.js | 8 ++++++-- game-server/src/index.js | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/api/src/controllers/serverController.js b/api/src/controllers/serverController.js index 4ca447d..ea991cf 100644 --- a/api/src/controllers/serverController.js +++ b/api/src/controllers/serverController.js @@ -18,14 +18,13 @@ const register = async (req, res) => { } }; const heartbeat = async (req, res) => { - const { name, secret } = req.body; + const { name, secret, playersOnline } = req.body; if (secret !== process.env.GAME_SERVER_SECRET) { return res.status(401).json({ message: "Unauthorized" }); } - try { - await serverService.updateHeartbeat(name); + await serverService.updateHeartbeat(name, playersOnline); res.json({ status: "ok" }); } catch (error) { res.status(500).json({ message: error.message }); diff --git a/api/src/models/User.js b/api/src/models/User.js index f825a62..060ee33 100644 --- a/api/src/models/User.js +++ b/api/src/models/User.js @@ -22,6 +22,10 @@ const userSchema = new mongoose.Schema( required: [true, "Password is required"], minlength: [6, "Password must be at least 6 characters long"], }, + playersOnline: { + type: Number, + default: 0, + }, role: { type: String, enum: ["user", "admin"], diff --git a/api/src/services/serverService.js b/api/src/services/serverService.js index b52e1b1..d3484b8 100644 --- a/api/src/services/serverService.js +++ b/api/src/services/serverService.js @@ -18,10 +18,14 @@ const registerGameServer = async (serverData) => { console.log(`📡 [REGISTRY] Game Server "${name}" at ${url} is now ONLINE`); return server; }; -const updateHeartbeat = async (name) => { +const updateHeartbeat = async (name, playersOnline) => { return await GameServer.findOneAndUpdate( { name }, - { lastHeartbeat: Date.now(), status: "online" }, + { + lastHeartbeat: Date.now(), + status: "online", + playersOnline: playersOnline, + }, ); }; diff --git a/game-server/src/index.js b/game-server/src/index.js index a7ea79f..748535b 100644 --- a/game-server/src/index.js +++ b/game-server/src/index.js @@ -61,7 +61,7 @@ const registerInApi = async () => { } }; -const HEARTBEAT_INTERVAL = 30000; +const HEARTBEAT_INTERVAL = 1000; const sendHeartbeat = async () => { try { await axios.post(`${config.apiBaseUrl}/servers/heartbeat`, {