2021-09-25 20:42:57 +02:00
|
|
|
import { isString } from "./utils/helpers/isString";
|
2021-10-07 22:56:01 +02:00
|
|
|
import { GetServer } from "./Server/AllServers";
|
2021-09-24 23:07:53 +02:00
|
|
|
import { WorkerScript } from "./Netscript/WorkerScript";
|
2017-08-30 19:44:29 +02:00
|
|
|
|
2021-09-24 23:07:53 +02:00
|
|
|
export function netscriptDelay(time: number, workerScript: WorkerScript): Promise<void> {
|
2022-01-06 01:56:10 +01:00
|
|
|
return new Promise(function (resolve, reject) {
|
2021-10-05 01:58:34 +02:00
|
|
|
workerScript.delay = window.setTimeout(() => {
|
2021-09-05 01:09:30 +02:00
|
|
|
workerScript.delay = null;
|
2022-01-06 01:56:10 +01:00
|
|
|
workerScript.delayReject = undefined;
|
|
|
|
|
|
|
|
if (workerScript.env.stopFlag)
|
|
|
|
reject(workerScript);
|
|
|
|
else
|
|
|
|
resolve();
|
2021-09-05 01:09:30 +02:00
|
|
|
}, time);
|
2022-01-06 01:56:10 +01:00
|
|
|
workerScript.delayReject = reject;
|
2021-09-05 01:09:30 +02:00
|
|
|
});
|
2017-06-05 06:48:37 +02:00
|
|
|
}
|
|
|
|
|
2021-09-25 08:36:49 +02:00
|
|
|
export function makeRuntimeRejectMsg(workerScript: WorkerScript, msg: string): string {
|
2021-12-14 04:26:22 +01:00
|
|
|
if ((msg as any) instanceof WorkerScript) {
|
|
|
|
console.error("HERE");
|
|
|
|
}
|
2021-10-07 23:55:49 +02:00
|
|
|
const server = GetServer(workerScript.hostname);
|
2021-09-05 01:09:30 +02:00
|
|
|
if (server == null) {
|
2021-10-07 23:55:49 +02:00
|
|
|
throw new Error(`WorkerScript constructed with invalid server ip: ${workerScript.hostname}`);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
2021-03-11 09:02:05 +01:00
|
|
|
|
2021-12-13 01:39:53 +01:00
|
|
|
for (const scriptUrl of workerScript.scriptRef.dependencies) {
|
2022-01-04 00:26:22 +01:00
|
|
|
// Return just the original msg if it's nullish so that we don't get a workerscript error
|
|
|
|
msg = msg?.replace(new RegExp(scriptUrl.url, "g"), scriptUrl.filename) ?? msg;
|
2021-12-12 20:49:02 +01:00
|
|
|
}
|
|
|
|
|
2021-10-22 21:21:10 +02:00
|
|
|
return "|DELIMITER|" + server.hostname + "|DELIMITER|" + workerScript.name + "|DELIMITER|" + msg;
|
2017-05-15 08:35:09 +02:00
|
|
|
}
|
|
|
|
|
2021-09-24 23:07:53 +02:00
|
|
|
export function resolveNetscriptRequestedThreads(
|
|
|
|
workerScript: WorkerScript,
|
|
|
|
functionName: string,
|
|
|
|
requestedThreads: number,
|
2021-09-25 08:36:49 +02:00
|
|
|
): number {
|
2021-09-05 01:09:30 +02:00
|
|
|
const threads = workerScript.scriptRef.threads;
|
|
|
|
if (!requestedThreads) {
|
|
|
|
return isNaN(threads) || threads < 1 ? 1 : threads;
|
|
|
|
}
|
|
|
|
const requestedThreadsAsInt = requestedThreads | 0;
|
|
|
|
if (isNaN(requestedThreads) || requestedThreadsAsInt < 1) {
|
|
|
|
throw makeRuntimeRejectMsg(
|
|
|
|
workerScript,
|
|
|
|
`Invalid thread count passed to ${functionName}: ${requestedThreads}. Threads must be a positive number.`,
|
|
|
|
);
|
|
|
|
}
|
2022-01-02 18:13:01 +01:00
|
|
|
if (requestedThreadsAsInt > threads) {
|
2021-09-05 01:09:30 +02:00
|
|
|
throw makeRuntimeRejectMsg(
|
|
|
|
workerScript,
|
|
|
|
`Too many threads requested by ${functionName}. Requested: ${requestedThreads}. Has: ${threads}.`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return requestedThreadsAsInt;
|
2019-05-03 10:01:43 +02:00
|
|
|
}
|
|
|
|
|
2021-09-24 23:07:53 +02:00
|
|
|
export function isScriptErrorMessage(msg: string): boolean {
|
2021-09-05 01:09:30 +02:00
|
|
|
if (!isString(msg)) {
|
|
|
|
return false;
|
|
|
|
}
|
2021-10-22 21:21:10 +02:00
|
|
|
const splitMsg = msg.split("|DELIMITER|");
|
2021-09-05 01:09:30 +02:00
|
|
|
if (splitMsg.length != 4) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
2017-05-01 07:39:48 +02:00
|
|
|
}
|