fix api heartbeat

This commit is contained in:
MaksSlyzar 2026-03-31 15:26:34 +03:00
parent b1719978a7
commit 91a49a33cd
4 changed files with 13 additions and 6 deletions

View File

@ -18,14 +18,13 @@ const register = async (req, res) => {
} }
}; };
const heartbeat = 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) { if (secret !== process.env.GAME_SERVER_SECRET) {
return res.status(401).json({ message: "Unauthorized" }); return res.status(401).json({ message: "Unauthorized" });
} }
try { try {
await serverService.updateHeartbeat(name); await serverService.updateHeartbeat(name, playersOnline);
res.json({ status: "ok" }); res.json({ status: "ok" });
} catch (error) { } catch (error) {
res.status(500).json({ message: error.message }); res.status(500).json({ message: error.message });

View File

@ -22,6 +22,10 @@ const userSchema = new mongoose.Schema(
required: [true, "Password is required"], required: [true, "Password is required"],
minlength: [6, "Password must be at least 6 characters long"], minlength: [6, "Password must be at least 6 characters long"],
}, },
playersOnline: {
type: Number,
default: 0,
},
role: { role: {
type: String, type: String,
enum: ["user", "admin"], enum: ["user", "admin"],

View File

@ -18,10 +18,14 @@ const registerGameServer = async (serverData) => {
console.log(`📡 [REGISTRY] Game Server "${name}" at ${url} is now ONLINE`); console.log(`📡 [REGISTRY] Game Server "${name}" at ${url} is now ONLINE`);
return server; return server;
}; };
const updateHeartbeat = async (name) => { const updateHeartbeat = async (name, playersOnline) => {
return await GameServer.findOneAndUpdate( return await GameServer.findOneAndUpdate(
{ name }, { name },
{ lastHeartbeat: Date.now(), status: "online" }, {
lastHeartbeat: Date.now(),
status: "online",
playersOnline: playersOnline,
},
); );
}; };

View File

@ -61,7 +61,7 @@ const registerInApi = async () => {
} }
}; };
const HEARTBEAT_INTERVAL = 30000; const HEARTBEAT_INTERVAL = 1000;
const sendHeartbeat = async () => { const sendHeartbeat = async () => {
try { try {
await axios.post(`${config.apiBaseUrl}/servers/heartbeat`, { await axios.post(`${config.apiBaseUrl}/servers/heartbeat`, {