mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-26 19:14:32 +02:00
most terminal converted to ts
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import { ITerminal } from "../ITerminal";
|
||||
import { IEngine } from "../../IEngine";
|
||||
import { IPlayer } from "../../PersonObjects/IPlayer";
|
||||
import { BaseServer } from "../../Server/BaseServer";
|
||||
import { logBoxCreate } from "../../../utils/LogBox";
|
||||
import { startWorkerScript } from "../../NetscriptWorker";
|
||||
import { RunningScript } from "../../Script/RunningScript";
|
||||
import { findRunningScript } from "../../Script/ScriptHelpers";
|
||||
import * as libarg from "arg";
|
||||
|
||||
export function runScript(
|
||||
terminal: ITerminal,
|
||||
engine: IEngine,
|
||||
player: IPlayer,
|
||||
server: BaseServer,
|
||||
commandArgs: (string | number)[],
|
||||
): void {
|
||||
if (commandArgs.length < 1) {
|
||||
terminal.error(
|
||||
`Bug encountered with Terminal.runScript(). Command array has a length of less than 1: ${commandArgs}`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const scriptName = terminal.getFilepath(commandArgs[0] + "");
|
||||
|
||||
const runArgs = { "--tail": Boolean, "-t": Number };
|
||||
const flags = libarg(runArgs, {
|
||||
permissive: true,
|
||||
argv: commandArgs.slice(1),
|
||||
});
|
||||
const threadFlag = Math.round(parseFloat(flags["-t"]));
|
||||
const tailFlag = flags["--tail"] === true;
|
||||
if (flags["-t"] !== undefined && (threadFlag < 0 || isNaN(threadFlag))) {
|
||||
terminal.error("Invalid number of threads specified. Number of threads must be greater than 0");
|
||||
return;
|
||||
}
|
||||
const numThreads = !isNaN(threadFlag) && threadFlag > 0 ? threadFlag : 1;
|
||||
const args = flags["_"];
|
||||
|
||||
// Check if this script is already running
|
||||
if (findRunningScript(scriptName, args, server) != null) {
|
||||
terminal.print("ERROR: This script is already running. Cannot run multiple instances");
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the script exists and if it does run it
|
||||
for (let i = 0; i < server.scripts.length; i++) {
|
||||
if (server.scripts[i].filename !== scriptName) {
|
||||
continue;
|
||||
}
|
||||
// Check for admin rights and that there is enough RAM availble to run
|
||||
const script = server.scripts[i];
|
||||
const ramUsage = script.ramUsage * numThreads;
|
||||
const ramAvailable = server.maxRam - server.ramUsed;
|
||||
|
||||
if (!server.hasAdminRights) {
|
||||
terminal.print("Need root access to run script");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ramUsage > ramAvailable) {
|
||||
terminal.print(
|
||||
"This machine does not have enough RAM to run this script with " +
|
||||
numThreads +
|
||||
" threads. Script requires " +
|
||||
ramUsage +
|
||||
"GB of RAM",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Able to run script
|
||||
const runningScript = new RunningScript(script, args);
|
||||
runningScript.threads = numThreads;
|
||||
|
||||
const success = startWorkerScript(runningScript, server);
|
||||
if (!success) {
|
||||
terminal.error(`Failed to start script`);
|
||||
return;
|
||||
}
|
||||
|
||||
terminal.print(
|
||||
`Running script with ${numThreads} thread(s), pid ${runningScript.pid} and args: ${JSON.stringify(args)}.`,
|
||||
);
|
||||
if (tailFlag) {
|
||||
logBoxCreate(runningScript);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
terminal.print("ERROR: No such script");
|
||||
}
|
||||
Reference in New Issue
Block a user