JVM Max Memory
@@ -88,19 +75,96 @@
-
+
-
{{ editDialog.editedServer.name }}
+
{{ serverLogDialog.selectedServer.name }}
+
+
+
+
+
+
-
+
+
+
+
+
@@ -110,11 +174,7 @@
import type {MinecraftServer} from "~/types/MinecraftServer";
import axios from 'axios';
-
-
-const testrec = reactive({
- logs: [] as string[],
-})
+import { stringify , parse } from 'ini'
const settings = reactive({
servers: [] as MinecraftServer[],
@@ -124,8 +184,14 @@ const addDialog = reactive({
newServer: {} as MinecraftServer
})
-const editDialog = reactive({
- editedServer: {} as MinecraftServer
+const serverLogDialog = reactive({
+ selectedServer: {} as MinecraftServer,
+ logs: [] as string[],
+})
+
+const editServerDialog = reactive({
+ selectedServer: {} as MinecraftServer,
+ properties: {} as { [p: string]: any }
})
@@ -140,61 +206,119 @@ const getServers = async () => {
}
}
-
+const showServerLogDialog = async (server: MinecraftServer) => {
+ serverLogDialog.selectedServer = server
+ // @ts-ignore
+ serverLogModal.checked = true
+}
const getLogs = async () => {
+
+
// @ts-ignore
- if(!editServerModal.checked)
+ if(!serverLogModal.checked){
+ if(serverLogDialog.logs.length != 0){
+ serverLogDialog.logs.length = 0;
+ }
+ return
+ }
+
+ if(!serverLogDialog.selectedServer)
return
try{
const response = await axios.post('/api/getLogs', {
- name: editDialog.editedServer.name
+ name: serverLogDialog.selectedServer.name
});
+
+ console.log(response.data.message)
//console.log(response)
- const strRet: string = response.data.logs;
+ const strRet = response.data.logs;
+
+
const stringArray = strRet.split('\n');
//console.log(stringArray);
- testrec.logs.length = 0;
- stringArray.slice(-20).forEach(element => {
- testrec.logs.push(element);
+ serverLogDialog.logs.length = 0;
+ stringArray.slice(-20).forEach((element: string) => {
+ serverLogDialog.logs.push(element);
})
}catch(error){
console.error(`Error fetch: ${error}`);
}
}
-
-const editServerDialog = async (server: MinecraftServer) => {
- editDialog.editedServer = server
-
+const showEditServerDialog = async (server: MinecraftServer) => {
+ editServerDialog.selectedServer = server
+ await getProperties()
// @ts-ignore
- //editServerModal.showModal()
- editServerModal.checked = true
+ editServerModal.showModal()
}
+const getProperties = async () => {
+ // @ts-ignore
+ editServerModal.showModal()
-const addServer = async () => {
- if(!settings.servers.some(server => server.name === addDialog.newServer.name)){
- settings.servers.push(addDialog.newServer)
- await syncServers()
+ try{
+ const response = await axios.post('/api/getProperties', {
+ name: editServerDialog.selectedServer.name
+ });
+ console.log(response.data.properties)
+
+ editServerDialog.properties = parse(response.data.properties)
+
+ }catch(error){
+ console.error(`Error fetch: ${error}`);
}
}
-const deleteServer = async () => {
- let index = settings.servers.findIndex(item => item.name === editDialog.editedServer.name);
- settings.servers.splice(index, 1);
- await syncServers()
+
+
+
+
+
+
+
+const addServer = async () => {
+ if (!settings.servers.some(server => server.name === addDialog.newServer.name)) {
+ settings.servers.push({ ...addDialog.newServer });
+ await syncServers();
+ }
}
+const editServer = async () => {
+ try {
+ const response = await axios.post('/api/setProperties', {
+ name: editServerDialog.selectedServer.name,
+ properties: stringify(editServerDialog.properties)
+ });
+ console.log(response.data);
+ } catch (error) {
+ console.error(`Error `, error);
+ }
+}
+
+
+const deleteServer = async (server: MinecraftServer) => {
+ try {
+ const response = await axios.post('/api/deleteServer', {
+ name: server.name
+ });
+ console.log(response.data);
+ await getServers()
+ } catch (error) {
+ console.error(`Error `, error);
+ }
+}
+
const syncServers = async () => {
try {
const response = await axios.post('/api/setServers', {
serverList: settings.servers
});
console.log(response.data);
+
} catch (error) {
console.error(`Error `, error);
}
diff --git a/server/api/deleteServer.ts b/server/api/deleteServer.ts
new file mode 100644
index 0000000..02e6345
--- /dev/null
+++ b/server/api/deleteServer.ts
@@ -0,0 +1,28 @@
+import {environment} from "~/core/globals";
+import {removeServerByName, saveJsonFile} from "~/util/jsonLoader";
+import * as fs from 'fs/promises';
+
+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);
+
+ 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)
+ saveJsonFile()
+
+ return { status: 'success' };
+ } catch (error) {
+ return { status: 'error', error: error };
+ }
+});
+
diff --git a/server/api/getLogs.ts b/server/api/getLogs.ts
index decbb40..e0e77bc 100644
--- a/server/api/getLogs.ts
+++ b/server/api/getLogs.ts
@@ -23,11 +23,16 @@ export default defineEventHandler(async (event) => {
try {
const data = await fs.readFile(logsPath, 'utf-8');
+ const strippedLogs = data.slice(0, -2);
return {
message: `Logs for ${server_name}`,
- logs: data
+ logs: strippedLogs
};
} catch (error: any) {
- return { message: "Failed to get logs for " + server_name, error: error.message };
+ return {
+ message: "Failed to get logs for " + server_name,
+ logs: "",
+ error: error.message
+ };
}
});
diff --git a/server/api/getProperties.ts b/server/api/getProperties.ts
new file mode 100644
index 0000000..43dc9c7
--- /dev/null
+++ b/server/api/getProperties.ts
@@ -0,0 +1,32 @@
+import {environment} from "~/core/globals";
+import { defineEventHandler, getCookie, createError } from 'h3';
+import {saveJsonFile} from "~/util/jsonLoader";
+import {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 server_name: string = body.name
+
+ const server = environment.settings.servers.find(server => server.name == 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');
+ return {
+ message: `properties for ${server_name}`,
+ properties: data
+ };
+ } 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
new file mode 100644
index 0000000..62fe10c
--- /dev/null
+++ b/server/api/setProperties.ts
@@ -0,0 +1,32 @@
+import {environment} from "~/core/globals";
+import { defineEventHandler, getCookie, createError } from 'h3';
+import {saveJsonFile} from "~/util/jsonLoader";
+import {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 server_name: string = body.name
+ const server_properties: string = body.properties
+
+ const server = environment.settings.servers.find(server => server.name == 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');
+ return {
+ message: `properties for ${server_name} set`,
+ };
+ } catch (error: any) {
+ return { message: "Failed to get logs for " + server_name, error: error.message };
+ }
+});
diff --git a/server/api/startServer.ts b/server/api/startServer.ts
index 5f0b70c..e502dc0 100644
--- a/server/api/startServer.ts
+++ b/server/api/startServer.ts
@@ -23,13 +23,19 @@ export default defineEventHandler(async (event) => {
const jarPath = environment.paths.servers + "/" + server.name + "/server.jar";
try {
- server.process = execa('java', ['-jar', jarPath, 'nogui'], {
+
+ const xmsArg = `-Xms${server.maxMemory}G`
+ const xmxArg = `-Xmx${server.maxMemory}G`
+
+ console.log(`Starting server ${server.name} with ${xmsArg} and ${xmxArg}`);
+
+ server.process = execa('java', [xmsArg, xmxArg, '-jar', jarPath, 'nogui'], {
cwd: workingDir,
});
server.process.stdout.on('data', (data: string) => {
const logData = data.toString();
- console.log(logData);
+ //console.log(logData);
});
server.process.stderr.on('data', (data: string) => {
diff --git a/server/api/stopServer.ts b/server/api/stopServer.ts
index 3833383..af91991 100644
--- a/server/api/stopServer.ts
+++ b/server/api/stopServer.ts
@@ -15,10 +15,7 @@ export default defineEventHandler(async (event) => {
if (!server.process) {
return { message: "Minecraft server is not running." };
}
-
- console.log(server.process)
-
- console.log("currently contains: " + server.process)
+
try {
// Send "stop" command to the server process stdin
diff --git a/types/MinecraftServer.ts b/types/MinecraftServer.ts
index af20863..987af9d 100644
--- a/types/MinecraftServer.ts
+++ b/types/MinecraftServer.ts
@@ -1,14 +1,23 @@
import type {ResultPromise} from "execa";
+import {environment} from "~/core/globals";
export interface MinecraftServer {
name: string;
- port: number;
version: string;
jar_url: string;
-
- minMemory: number;
maxMemory: number;
-
process: any;
-
+}
+
+
+export function getServerDirectory (server: MinecraftServer): string {
+ return environment.paths.servers + "/" + server.name
+}
+
+export function getJarPath (server: MinecraftServer): string {
+ return environment.paths.servers + "/" + server.name + "/server.jar"
+}
+
+export function getPropertiesPath (server: MinecraftServer): string {
+ return environment.paths.servers + "/" + server.name + "/server.properties"
}
diff --git a/util/jsonLoader.ts b/util/jsonLoader.ts
index b45acc6..6e57399 100644
--- a/util/jsonLoader.ts
+++ b/util/jsonLoader.ts
@@ -69,13 +69,23 @@ export function checkAllServerDirectories(){
})
environment.settings.servers.forEach(server => {
- const destinationPath = environment.paths.servers + "/" + server.name + "/server.jar"
+ const destinationPathJar = environment.paths.servers + "/" + server.name + "/server.jar"
+ const destinationPathEula = environment.paths.servers + "/" + server.name + "/eula.txt"
try {
- fs.accessSync(destinationPath);
+ fs.accessSync(destinationPathJar);
console.log('Settings already exists!');
} catch (error) {
- downloadFile(server.jar_url, destinationPath);
+ downloadFile(server.jar_url, destinationPathJar);
}
+
+ try {
+ fs.accessSync(destinationPathEula);
+ console.log('eula exists');
+ } catch (error) {
+ console.log("setting eula to true")
+ fs.writeFileSync(destinationPathEula, 'eula=true');
+ }
+
})
}