40 lines
1.5 KiB
JavaScript
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!"));
|
|
}; |