Client/game-server/src/game/SessionManager.js
2026-03-29 10:27:39 +03:00

79 lines
2.0 KiB
JavaScript

class SessionManager {
constructor() {
this.sessions = new Map(); // socket.id => session data
}
addPlayer(socketId, playerRaw) {
this.sessions.set(socketId, {
id: playerRaw.id,
username: playerRaw.username,
level: playerRaw.level,
energy: playerRaw.energy,
maxEnergy: playerRaw.maxEnergy,
status: "docked",
currentLocation: "Home_Base",
scene: "world",
sceneData: null,
joinedAt: Date.now(),
equipment: {
weapon: playerRaw.equippedWeapon,
armor: playerRaw.equippedArmor,
engine: playerRaw.equippedEngine,
shield: playerRaw.equippedShield,
helmet: playerRaw.equippedHelmet,
boots: playerRaw.equippedBoots,
hands: playerRaw.equippedHands,
pants: playerRaw.equippedPants,
accessory: playerRaw.equippedAccessory,
},
});
}
setPlayerScene(socketId, sceneName, data = null) {
const session = this.sessions.get(socketId);
if (session) {
session.scene = sceneName;
session.sceneData = data;
session.status = sceneName === "dungeon" ? "in_mission" : "active";
console.log(`[Session] Player ${session.id} switched to ${sceneName}`);
}
}
getPlayerSession(socketId) {
return this.sessions.get(socketId);
}
updateEquipment(socketId, slot, itemId) {
const session = this.sessions.get(socketId);
if (session) {
session.equipment[slot] = itemId;
}
}
updateStatus(socketId, newStatus, location = null) {
const session = this.sessions.get(socketId);
if (session) {
session.status = newStatus;
if (location) session.currentLocation = location;
}
}
removePlayer(socketId) {
this.sessions.delete(socketId);
}
getPlayer(socketId) {
return this.sessions.get(socketId);
}
getPlayerByUserId(userId) {
return Array.from(this.sessions.values()).find((s) => s.id === userId);
}
getAllOnline() {
return Array.from(this.sessions.values());
}
}
module.exports = new SessionManager();