Added connect.js

This commit is contained in:
2022-03-11 12:05:34 +00:00
parent 851ef2b01b
commit 694199b148
3 changed files with 90 additions and 0 deletions

48
scripts/connect.js Normal file
View File

@ -0,0 +1,48 @@
import {ArgError, ArgParser} from './scripts/lib/arg-parser';
import {terminal} from './scripts/lib/utils';
/**
* Connect to a device on a different network.
* @param ns {NS} - BitBurner API
*/
export function main(ns) {
// Setup
ns.disableLog('ALL');
let args;
const argParser = new ArgParser('connect.js', 'Connect to a device on a different network.', null, [
{name: 'device', desc: 'Device to connect to', default: ns.getHostname(), type: 'string'}
]);
try {
args = argParser.parse(ns.args);
} catch(err) {
if(err instanceof ArgError) return ns.tprint(argParser.help(err.message));
throw err;
}
/**
* Find path to a device recursively
* @param device {string} - Device to locate
* @param current {string} - Current device to scan
* @param path {string[]} - Path the the current device
* @param all {Set} - Stop devices from being scanned
* @returns {string[]} - Path to the located device
*/
function find(device, current = 'home', path = [current], blacklist = new Set()) {
blacklist.add(current);
const newDevices = ns.scan(current).filter(d => !blacklist.has(d));
if(newDevices.length == 0) return [];
if(newDevices.find(d => d == device)) return [...path, device];
return newDevices.map(d => find(device, d, [...path, d], all)).find(p => p && p.length);
}
// Run
const path = find(args['device']);
path.splice(0, 1); // Delete 'home' from from the path
for(let d of path) {
terminal(`connect ${d}`);
}
}
export function autocomplete(data) {
return [...data.servers];
}

View File

@ -21,3 +21,18 @@ export async function slowPrint(ns, message, min = 0.5, max = 1.5) {
ns.tprint(message);
await ns.sleep(time);
}
/**
* Write a command to the terminal.
* @params command {string} - Command that will be run
* @returns {string} - Response
*/
export async function terminal(command) {
// Get Terminal
const cli = eval('document').querySelector("#terminal-input"); // Terminal
const key = Object.keys(cli)[1];
// Send command
cli[key].onChange({ target: {value: command} });
cli[key].onKeyDown({ keyCode: 13, preventDefault: () => {} });
}