Files
2026-08-24 22:20:36 +02:00

40 lines
1.5 KiB
JavaScript

const Game = require("../../../Game/Game");
const MaintenanceScheduledPacket = require("../../../Packets/MaintenanceScheduled");
const isAuthenticated = require("../../../Utility/isAuthenticated");
module.exports = async (res, req) => {
res.onAborted(() => res.isAborted = true);
const maintenanceTimeSeconds = req.getQuery("time");
const timestamp = req.getQuery("timestamp");
const hasPermission = await isAuthenticated(res, req);
if (!hasPermission) return;
if (!Game.listeningServer) return res.cork(() => res.writeStatus("400").end("Server is offline!"));
if (!maintenanceTimeSeconds) return res.cork(() => res.writeStatus("400").end("No approximate time was provided!"));
if (!timestamp) return res.cork(() => res.writeStatus("400").end("No timestamp was provided!"));
const parsedTimestamp = parseInt(timestamp);
if (parsedTimestamp < Date.now()) return res.cork(() => res.writeStatus("400").end("Incorrect timestamp was provided!"));
const event = {
fn: Game.disconnectAll.bind(Game),
arguments: []
};
Game.eventsFixed.add(parsedTimestamp, event);
const packet = MaintenanceScheduledPacket({
timestamp: parsedTimestamp / 1000,
timeSeconds: maintenanceTimeSeconds
});
Game.maps.forEach(map => app.publish(map.id.toString(), packet, true, true));
res.cork(() => res
.writeStatus("200")
.end("Shutdown has been scheduled!"));
};