Game-Server/game-server/src/index.js
2026-03-31 20:00:02 -04:00

90 lines
2.3 KiB
JavaScript

const express = require("express");
const cors = require("cors");
const axios = require("axios");
const config = require("./config/config.js");
const initSockets = require("./sockets/socket.js");
const { Server } = require("socket.io");
const http = require("http");
const sequelize = require("./config/db.js");
const DatapackLoader = require("./game/DatapackLoader.js");
const path = require("path");
const app = express();
const economyService = require("./game/EconomyService.js");
app.use(
cors({
origin: "*",
methods: ["GET", "POST"],
credentials: true,
}),
);
app.use("/static", express.static(path.join(__dirname, "../datapacks")));
app.use(express.json());
const server = http.createServer(app);
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
credentials: true,
},
transports: ["websocket", "polling"],
allowEIO3: true,
});
app.get("/api/game-metadata", (req, res) => {
try {
const gameData = DatapackLoader.getStaticData();
res.json(gameData);
} catch (error) {
res.status(500).json({ error: "Failed to load game metadata" });
}
});
app.get("/status", (req, res) => {
res.json({ status: "online", players: io.engine.clientsCount });
});
const registerInApi = async () => {
try {
await axios.post(`${config.apiBaseUrl}/servers/register`, {
name: config.serverName,
url: `https://dev-test.galaxystrike.online/game-api`,
secret: config.serverSecret,
isModded: false,
description: config.serverDescription,
region: config.serverRegion,
});
} catch (error) {
process.exit(1);
}
};
const HEARTBEAT_INTERVAL = 1000;
const sendHeartbeat = async () => {
try {
await axios.post(`${config.apiBaseUrl}/servers/heartbeat`, {
name: config.serverName,
secret: config.serverSecret,
playersOnline: io.engine.clientsCount,
});
} catch (error) {}
};
server.listen(config.port, async () => {
try {
const datapacksPath = path.join(__dirname, "../datapacks");
DatapackLoader.init(datapacksPath, io);
await sequelize.initDatabase();
initSockets(io);
economyService.init(io);
await registerInApi();
setInterval(sendHeartbeat, HEARTBEAT_INTERVAL);
console.log(`🚀 Server running on port ${config.port}`);
} catch (error) {
console.log(error);
process.exit(1);
}
});