mirror of
https://git.rezel.net/LudoTech/traque.git
synced 2026-04-11 00:30:19 +02:00
Server heavy refactoring 1 (not functionnal)
This commit is contained in:
124
server/traque-back/src/socket/adminHandler.js
Normal file
124
server/traque-back/src/socket/adminHandler.js
Normal file
@@ -0,0 +1,124 @@
|
||||
import { createHash } from "crypto";
|
||||
import { gameManager } from "@/core/game_manager.js"
|
||||
import { ADMIN_PASSWORD_HASH } from "@/util/util.js";
|
||||
|
||||
export const EVENTS = {
|
||||
INTERNAL: {
|
||||
TEAMS_UPDATE: "teams-update",
|
||||
SETTINGS: "settings",
|
||||
},
|
||||
IN: {
|
||||
LOGIN: "login",
|
||||
LOGOUT: "logout",
|
||||
STATE: "state",
|
||||
SETTINGS: "settings",
|
||||
ADD_TEAM: "add-team",
|
||||
REMOVE_TEAM: "remove-team",
|
||||
REORDER_TEAM: "reorder-team",
|
||||
ELIMINATE_TEAM: "eliminate-team",
|
||||
REVIVE_TEAM: "revive-team",
|
||||
},
|
||||
OUT: {
|
||||
TEAMS_UPDATE: "teams-update", // TODO : Too big ? (Send only the changing teams ?)
|
||||
SETTINGS: "settings",
|
||||
},
|
||||
};
|
||||
|
||||
const ADMIN_ROOM = "admin_room";
|
||||
|
||||
export function initAdminSocketHandler(io) {
|
||||
|
||||
// Util
|
||||
|
||||
const emit = (targetId, event, data) => {
|
||||
io.of("admin").to(targetId).emit(event, data);
|
||||
};
|
||||
|
||||
const broadcast = (event, data) => {
|
||||
io.of("admin").to(ADMIN_ROOM).emit(event, data);
|
||||
};
|
||||
|
||||
|
||||
// Admin events
|
||||
|
||||
io.of("admin").on("connection", (socket) => {
|
||||
console.log("Connection of an admin");
|
||||
|
||||
// Variables
|
||||
|
||||
let loggedIn = false;
|
||||
|
||||
|
||||
// Util
|
||||
|
||||
const logout = () => {
|
||||
if (!loggedIn) return;
|
||||
loggedIn = false;
|
||||
socket.leave(ADMIN_ROOM);
|
||||
}
|
||||
|
||||
const login = (password) => {
|
||||
if (loggedIn) return;
|
||||
if (createHash('sha256').update(password).digest('hex') !== ADMIN_PASSWORD_HASH) return false;
|
||||
loggedIn = true;
|
||||
socket.join(ADMIN_ROOM);
|
||||
}
|
||||
|
||||
|
||||
// Socket
|
||||
|
||||
socket.on("disconnect", () => {
|
||||
console.log("Disconnection of an admin");
|
||||
logout();
|
||||
});
|
||||
|
||||
|
||||
// Authentication
|
||||
|
||||
socket.on(EVENTS.IN.LOGIN, (password) => {
|
||||
login(password);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.LOGOUT, () => {
|
||||
logout();
|
||||
});
|
||||
|
||||
|
||||
// Actions
|
||||
|
||||
socket.on(EVENTS.IN.ADD_TEAM, (teamId) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.addTeam(teamId);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.REMOVE_TEAM, (teamId) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.removeTeam(teamId);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.REORDER_TEAM, (teamId) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.reorderTeam(teamId);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.ELIMINATE_TEAM, (teamId) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.eliminate(teamId);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.REVIVE_TEAM, (teamId) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.revive(teamId);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.STATE, (state) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.setState(state);
|
||||
});
|
||||
|
||||
socket.on(EVENTS.IN.SETTINGS, (settings) => {
|
||||
if (!loggedIn) return;
|
||||
gameManager.setSettings(settings);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user