chore: stabilize monorepo build and typescript setup
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ServerManager = void 0;
|
||||
const logger_1 = require("./logger");
|
||||
const crypto_1 = require("crypto");
|
||||
const nameGenerator_1 = require("./nameGenerator");
|
||||
const logger = (0, logger_1.getLogger)("ServerManager");
|
||||
class ServerManager {
|
||||
constructor(rabbit, wrapperRegistry, serverRegistry, portManager) {
|
||||
this.rabbit = rabbit;
|
||||
this.wrapperRegistry = wrapperRegistry;
|
||||
this.serverRegistry = serverRegistry;
|
||||
this.portManager = portManager;
|
||||
}
|
||||
async createServer() {
|
||||
/*
|
||||
freien Wrapper suchen
|
||||
*/
|
||||
const wrapper = this.findBestWrapper();
|
||||
if (!wrapper) {
|
||||
logger.warn("Kein Wrapper verfügbar");
|
||||
return;
|
||||
}
|
||||
const serverId = "srv-" +
|
||||
(0, crypto_1.randomUUID)()
|
||||
.slice(0, 8);
|
||||
const serverName = (0, nameGenerator_1.generateServerName)(this.serverRegistry
|
||||
.getAll()
|
||||
.map(server => server.name));
|
||||
/*
|
||||
Ports reservieren
|
||||
*/
|
||||
const ports = this.portManager.allocate();
|
||||
const server = {
|
||||
id: serverId,
|
||||
name: serverName,
|
||||
wrapperId: wrapper.id,
|
||||
status: "STARTING",
|
||||
port: ports.port,
|
||||
queryPort: ports.queryPort,
|
||||
players: 0,
|
||||
maxPlayers: 21,
|
||||
created: Date.now(),
|
||||
lastSeen: Date.now()
|
||||
};
|
||||
/*
|
||||
Registry Eintrag
|
||||
*/
|
||||
this.serverRegistry.add(server);
|
||||
/*
|
||||
Command an Wrapper
|
||||
*/
|
||||
const command = {
|
||||
type: "server.start",
|
||||
serverId,
|
||||
name: serverName,
|
||||
port: ports.port,
|
||||
queryPort: ports.queryPort
|
||||
};
|
||||
const sent = this.rabbit.channel.sendToQueue(wrapper.commandQueue, Buffer.from(JSON.stringify(command)));
|
||||
if (!sent) {
|
||||
throw new Error("Server Start Command konnte nicht gesendet werden");
|
||||
}
|
||||
logger.info("Starting server:", server.id);
|
||||
}
|
||||
async stopServer(serverId) {
|
||||
const server = this.serverRegistry.get(serverId);
|
||||
if (!server) {
|
||||
logger.warn("Server not found:", serverId);
|
||||
return;
|
||||
}
|
||||
const wrapper = this.wrapperRegistry.get(server.wrapperId);
|
||||
if (!wrapper) {
|
||||
logger.warn("Wrapper not found:", server.wrapperId);
|
||||
return;
|
||||
}
|
||||
const command = {
|
||||
type: "server.stop",
|
||||
serverId
|
||||
};
|
||||
this.rabbit.channel.sendToQueue(wrapper.commandQueue, Buffer.from(JSON.stringify(command)));
|
||||
server.status =
|
||||
"STOPPING";
|
||||
this.serverRegistry.update(server);
|
||||
logger.info("Stopping server:", serverId);
|
||||
}
|
||||
findBestWrapper() {
|
||||
const wrappers = this.wrapperRegistry.getAll()
|
||||
.filter(w => w.online);
|
||||
if (wrappers.length === 0)
|
||||
return undefined;
|
||||
/*
|
||||
Einfachste Version:
|
||||
|
||||
wenigste Server
|
||||
*/
|
||||
wrappers.sort((a, b) => a.servers.length -
|
||||
b.servers.length);
|
||||
return wrappers[0];
|
||||
}
|
||||
}
|
||||
exports.ServerManager = ServerManager;
|
||||
Reference in New Issue
Block a user