42 lines
750 B
JavaScript
42 lines
750 B
JavaScript
|
import { RCON } from 'minecraft-server-util';
|
||
|
|
||
|
const client = new RCON()
|
||
|
|
||
|
const config = useRuntimeConfig()
|
||
|
|
||
|
let connected = false;
|
||
|
|
||
|
export const sendRconCommand = async (command) => {
|
||
|
await connectRcon()
|
||
|
|
||
|
const message = await client.execute(command);
|
||
|
|
||
|
closeClient()
|
||
|
|
||
|
return message;
|
||
|
}
|
||
|
|
||
|
const connectRcon = async () => {
|
||
|
if (connected) return;
|
||
|
|
||
|
await client.connect(config.rconHost);
|
||
|
await client.login(config.rconPassword);
|
||
|
|
||
|
connected = true;
|
||
|
}
|
||
|
|
||
|
const debounce = (callback, wait) => {
|
||
|
let timeout = null;
|
||
|
return (...args) => {
|
||
|
clearTimeout(timeout);
|
||
|
timeout = setTimeout(() => {
|
||
|
callback.apply(null, args);
|
||
|
}, wait);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const closeClient = debounce(() => {
|
||
|
client.close();
|
||
|
connected = false;
|
||
|
}, 5000)
|