diff --git a/src/Netscript/NetscriptWorker.js b/src/Netscript/NetscriptWorker.js index 9e2f8c8b7..89136cc09 100644 --- a/src/Netscript/NetscriptWorker.js +++ b/src/Netscript/NetscriptWorker.js @@ -68,4 +68,15 @@ function runScriptsLoop() { setTimeout(runScriptsLoop, 10000); } +//Queues a script to be killed by settings its stop flag to true. Then, the code will reject +//all of its promises recursively, and when it does so it will no longer be running. +//The runScriptsLoop() will then delete the script from worker scripts +function killWorkerScript(scriptName, serverIp) { + for (var i = 0; i < workerScripts.length; i++) { + if (workerScripts[i].name == scriptName && workerScripts[i].serverIp == serverIp) { + workerScripts[i].env.stopFlag = true; + } + } +} + runScriptsLoop(); \ No newline at end of file diff --git a/src/Terminal.js b/src/Terminal.js index e3c460528..83afc3179 100644 --- a/src/Terminal.js +++ b/src/Terminal.js @@ -270,7 +270,19 @@ var Terminal = { post(Player.getCurrentServer().ip); break; case "kill": - //TODO + if (commandArray.length != 2) { + post("Incorrect usage of kill command. Usage: kill [scriptname]"); return; + } + + var scriptName = commandArray[1]; + for (var i = 0; i < Player.getCurrentServer().runningScripts.length; i++) { + if (Player.getCurrentServer().runningScripts[i] == scriptName) { + Player.getCurrentServer().runningScripts.splice(i, 1); + + killWorkerScript(scriptName, Player.getCurrentServer().ip); + } + } + post("No such script is running. Nothing to kill"); break; case "ls": if (commandArray.length != 1) {