From ee4723b243f86570c889b72697cb4cbf2cd299f2 Mon Sep 17 00:00:00 2001 From: WeeXnes Date: Wed, 5 Mar 2025 09:27:46 +0100 Subject: [PATCH] code cleanup & fixes --- pages/index.vue | 26 ++++++++------------------ server/api/addServer.ts | 24 ++++++++++++++++++++++++ server/api/deleteServer.ts | 9 +++------ server/api/getLogs.ts | 14 ++++---------- server/api/getProperties.ts | 16 +++++----------- server/api/setProperties.ts | 13 +++---------- server/api/startServer.ts | 21 +++++---------------- server/api/stopServer.ts | 8 ++------ types/MinecraftServer.ts | 9 ++++++++- util/jsonLoader.ts | 2 +- 10 files changed, 63 insertions(+), 79 deletions(-) create mode 100644 server/api/addServer.ts diff --git a/pages/index.vue b/pages/index.vue index c756af0..1daed17 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -156,7 +156,7 @@
- +
@@ -230,14 +230,8 @@ const getLogs = async () => { const response = await axios.post('/api/getLogs', { name: serverLogDialog.selectedServer.name }); - - console.log(response.data.message) - //console.log(response) const strRet = response.data.logs; - - const stringArray = strRet.split('\n'); - //console.log(stringArray); serverLogDialog.logs.length = 0; stringArray.slice(-20).forEach((element: string) => { serverLogDialog.logs.push(element); @@ -278,12 +272,6 @@ const getProperties = async () => { -const addServer = async () => { - if (!settings.servers.some(server => server.name === addDialog.newServer.name)) { - settings.servers.push({ ...addDialog.newServer }); - await syncServers(); - } -} @@ -312,17 +300,19 @@ const deleteServer = async (server: MinecraftServer) => { } } -const syncServers = async () => { +const addServer = async (server: MinecraftServer) => { try { - const response = await axios.post('/api/setServers', { - serverList: settings.servers + const response = await axios.post('/api/addServer', { + newServer: addDialog.newServer }); console.log(response.data); - + await getServers() } catch (error) { console.error(`Error `, error); } -}; +} + + const startServer = async (server: MinecraftServer) => { diff --git a/server/api/addServer.ts b/server/api/addServer.ts new file mode 100644 index 0000000..4378bbe --- /dev/null +++ b/server/api/addServer.ts @@ -0,0 +1,24 @@ +import {getServerByName, getServerDirectory} from "~/types/MinecraftServer"; +import {environment} from "~/core/globals"; +import {saveJsonFile} from "~/util/jsonLoader"; + +export default defineEventHandler(async (event) => { + + const body = await readBody(event); + const { newServer } = body; + + const server = getServerByName(newServer.name); + + if(server) { + return { message: "Server with name " + newServer.name + " does already exist" }; + } + + try { + environment.settings.servers.push({...newServer}) + saveJsonFile() + return { status: 'success' }; + } catch (error) { + return { status: 'error', error: error }; + } +}); + diff --git a/server/api/deleteServer.ts b/server/api/deleteServer.ts index 02e6345..7b44791 100644 --- a/server/api/deleteServer.ts +++ b/server/api/deleteServer.ts @@ -1,23 +1,20 @@ import {environment} from "~/core/globals"; import {removeServerByName, saveJsonFile} from "~/util/jsonLoader"; import * as fs from 'fs/promises'; +import {getServerByName, getServerDirectory} from "~/types/MinecraftServer"; export default defineEventHandler(async (event) => { const body = await readBody(event); const server_name: string = body.name - const server_properties: string = body.properties - - const server = environment.settings.servers.find(server => server.name == server_name); + const server = getServerByName(server_name); if(!server) { return { message: "Server with name " + server_name + " does not exist" }; } try { - console.log("Recived server list"); removeServerByName(server.name); - const logsPath = environment.paths.servers + "/" + server.name - await fs.rmdir(logsPath) + await fs.rm(getServerDirectory(server), { recursive: true, force: true }) saveJsonFile() return { status: 'success' }; diff --git a/server/api/getLogs.ts b/server/api/getLogs.ts index e0e77bc..fd072b8 100644 --- a/server/api/getLogs.ts +++ b/server/api/getLogs.ts @@ -1,7 +1,7 @@ import {environment} from "~/core/globals"; import { defineEventHandler, getCookie, createError } from 'h3'; import {saveJsonFile} from "~/util/jsonLoader"; -import {MinecraftServer} from "~/types/MinecraftServer"; +import {getLogsPath, getServerByName, MinecraftServer} from "~/types/MinecraftServer"; import {execa} from "execa"; import * as fs from 'fs/promises'; @@ -9,21 +9,15 @@ import * as fs from 'fs/promises'; export default defineEventHandler(async (event) => { const body = await readBody(event); const server_name: string = body.name - - const server = environment.settings.servers.find(server => server.name == server_name); - + const server = getServerByName(server_name); if(!server) { return { message: "Server with name " + server_name + " does not exist" }; } - - const workingDir = environment.paths.servers + "/" + server.name; - const logsPath = environment.paths.servers + "/" + server.name + "/logs/latest.log"; - try { - const data = await fs.readFile(logsPath, 'utf-8'); - const strippedLogs = data.slice(0, -2); + const rawLogs = await fs.readFile(getLogsPath(server), 'utf-8'); + const strippedLogs = rawLogs.slice(0, -2); return { message: `Logs for ${server_name}`, logs: strippedLogs diff --git a/server/api/getProperties.ts b/server/api/getProperties.ts index 43dc9c7..90091ea 100644 --- a/server/api/getProperties.ts +++ b/server/api/getProperties.ts @@ -1,30 +1,24 @@ import {environment} from "~/core/globals"; import { defineEventHandler, getCookie, createError } from 'h3'; import {saveJsonFile} from "~/util/jsonLoader"; -import {MinecraftServer} from "~/types/MinecraftServer"; +import {getPropertiesPath, getServerByName, MinecraftServer} from "~/types/MinecraftServer"; import {execa} from "execa"; import * as fs from 'fs/promises'; export default defineEventHandler(async (event) => { - const body = await readBody(event); + const body = await readBody(event) const server_name: string = body.name - - const server = environment.settings.servers.find(server => server.name == server_name); - + const server = getServerByName(server_name) if(!server) { return { message: "Server with name " + server_name + " does not exist" }; } - - const workingDir = environment.paths.servers + "/" + server.name; - const logsPath = environment.paths.servers + "/" + server.name + "/server.properties"; - try { - const data = await fs.readFile(logsPath, 'utf-8'); + const serverProperties = await fs.readFile(getPropertiesPath(server), 'utf-8'); return { message: `properties for ${server_name}`, - properties: data + properties: serverProperties }; } catch (error: any) { return { message: "Failed to get logs for " + server_name, error: error.message }; diff --git a/server/api/setProperties.ts b/server/api/setProperties.ts index 62fe10c..5dd5947 100644 --- a/server/api/setProperties.ts +++ b/server/api/setProperties.ts @@ -1,7 +1,7 @@ import {environment} from "~/core/globals"; import { defineEventHandler, getCookie, createError } from 'h3'; import {saveJsonFile} from "~/util/jsonLoader"; -import {MinecraftServer} from "~/types/MinecraftServer"; +import {getPropertiesPath, getServerByName, MinecraftServer} from "~/types/MinecraftServer"; import {execa} from "execa"; import * as fs from 'fs/promises'; @@ -10,19 +10,12 @@ export default defineEventHandler(async (event) => { const body = await readBody(event); const server_name: string = body.name const server_properties: string = body.properties - - const server = environment.settings.servers.find(server => server.name == server_name); - + const server = getServerByName(server_name); if(!server) { return { message: "Server with name " + server_name + " does not exist" }; } - - - const workingDir = environment.paths.servers + "/" + server.name; - const logsPath = environment.paths.servers + "/" + server.name + "/server.properties"; - try { - await fs.writeFile(logsPath, server_properties, 'utf8'); + await fs.writeFile(getPropertiesPath(server), server_properties, 'utf8'); return { message: `properties for ${server_name} set`, }; diff --git a/server/api/startServer.ts b/server/api/startServer.ts index e502dc0..5b94862 100644 --- a/server/api/startServer.ts +++ b/server/api/startServer.ts @@ -1,27 +1,20 @@ import {environment} from "~/core/globals"; import {saveJsonFile} from "~/util/jsonLoader"; -import {MinecraftServer} from "~/types/MinecraftServer"; +import {getJarPath, getServerByName, getServerDirectory, MinecraftServer} from "~/types/MinecraftServer"; import {execa} from "execa"; export default defineEventHandler(async (event) => { const body = await readBody(event); const server_name: string = body.name - - const server = environment.settings.servers.find(server => server.name == server_name); - + const server = getServerByName(server_name); if(!server) { return { message: "Server with name " + server_name + " does not exist" }; } - if (server.process) { return { message: "Minecraft server is already running." }; } - - const workingDir = environment.paths.servers + "/" + server.name; - const jarPath = environment.paths.servers + "/" + server.name + "/server.jar"; - try { const xmsArg = `-Xms${server.maxMemory}G` @@ -29,14 +22,11 @@ export default defineEventHandler(async (event) => { console.log(`Starting server ${server.name} with ${xmsArg} and ${xmxArg}`); - server.process = execa('java', [xmsArg, xmxArg, '-jar', jarPath, 'nogui'], { - cwd: workingDir, + server.process = execa('java', [xmsArg, xmxArg, '-jar', getJarPath(server), 'nogui'], { + cwd: getServerDirectory(server), }); - server.process.stdout.on('data', (data: string) => { - const logData = data.toString(); - //console.log(logData); - }); + server.process.stdout.on('data', (data: string) => {}); server.process.stderr.on('data', (data: string) => { const errorData = data.toString(); @@ -48,7 +38,6 @@ export default defineEventHandler(async (event) => { server.process = null; }) - return { message: "Minecraft server started." }; } catch (error: any) { return { message: "Failed to start Minecraft server.", error: error.message }; diff --git a/server/api/stopServer.ts b/server/api/stopServer.ts index af91991..c515fa8 100644 --- a/server/api/stopServer.ts +++ b/server/api/stopServer.ts @@ -1,33 +1,29 @@ import { environment } from "~/core/globals"; import { execa } from "execa"; +import {getServerByName} from "~/types/MinecraftServer"; export default defineEventHandler(async (event) => { const body = await readBody(event); const server_name: string = body.name; - - const server = environment.settings.servers.find(server => server.name == server_name); + const server = getServerByName(server_name); if (!server) { return { message: "Server with name " + server_name + " does not exist" }; } - if (!server.process) { return { message: "Minecraft server is not running." }; } try { - // Send "stop" command to the server process stdin server.process.stdin.write('stop\n'); - // Optionally, listen for the process exit or cleanup server.process.on('exit', (code: string) => { console.log(`Server exit signal from stopServer with code ${code}`); server.process = null; }); - return { message: "Minecraft server is stopping." }; } catch (error: any) { return { message: "Failed to stop Minecraft server.", error: error.message }; diff --git a/types/MinecraftServer.ts b/types/MinecraftServer.ts index 987af9d..d141196 100644 --- a/types/MinecraftServer.ts +++ b/types/MinecraftServer.ts @@ -1,4 +1,3 @@ -import type {ResultPromise} from "execa"; import {environment} from "~/core/globals"; export interface MinecraftServer { @@ -21,3 +20,11 @@ export function getJarPath (server: MinecraftServer): string { export function getPropertiesPath (server: MinecraftServer): string { return environment.paths.servers + "/" + server.name + "/server.properties" } + +export function getLogsPath (server: MinecraftServer): string { + return environment.paths.servers + "/" + server.name + "/logs/latest.log" +} + +export function getServerByName(server_name: string): MinecraftServer | undefined{ + return environment.settings.servers.find(server => server.name == server_name); +} \ No newline at end of file diff --git a/util/jsonLoader.ts b/util/jsonLoader.ts index 6e57399..69f8c8b 100644 --- a/util/jsonLoader.ts +++ b/util/jsonLoader.ts @@ -83,7 +83,7 @@ export function checkAllServerDirectories(){ console.log('eula exists'); } catch (error) { console.log("setting eula to true") - fs.writeFileSync(destinationPathEula, 'eula=true'); + fs.writeFileSync(destinationPathEula, 'eula=' + environment.settings.eula); } })