feature: Swap out promise system with more native code.

This makes this "less stupid", so to speak, by using our existing propagation system to spread exit signals.

Co-authored-by: dess <devessa@users.noreply.github.com>
This commit is contained in:
greysoh 2024-05-07 21:30:21 -04:00
parent 3ffad37180
commit 2f7f2088cd
No known key found for this signature in database
GPG key ID: FE0F173B8FC01571
2 changed files with 30 additions and 24 deletions

View file

@ -5,6 +5,9 @@ export class SSHCommand extends Command {
hasRecievedExitSignal: boolean;
println: PrintLine;
exitEventHandlers: ((...any: any[]) => void)[];
parent: SSHCommand | null;
/**
* Modified version of the Commander command with slight automated patches, to work with our SSH environment.
* @param println PrintLine function to use
@ -17,6 +20,8 @@ export class SSHCommand extends Command {
) {
super(name);
this.exitEventHandlers = [];
this.configureOutput({
writeOut: str => println(str),
writeErr: str => {
@ -48,13 +53,22 @@ export class SSHCommand extends Command {
recvExitDispatch() {
this.hasRecievedExitSignal = true;
this.exitEventHandlers.forEach((eventHandler) => eventHandler());
let parentElement = this.parent;
while (parentElement instanceof SSHCommand) {
parentElement.hasRecievedExitSignal = true;
parentElement.exitEventHandlers.forEach((eventHandler) => eventHandler());
parentElement = parentElement.parent;
};
}
};
onExit(callback: (...any: any[]) => void) {
this.exitEventHandlers.push(callback);
if (this.hasRecievedExitSignal) callback();
};
_exit() {
this.recvExitDispatch();
@ -75,6 +89,8 @@ export class SSHCommand extends Command {
this._actionHandler = async (...args: any[]): Promise<void> => {
if (this.hasRecievedExitSignal) return;
await oldActionHandler(...args);
this.recvExitDispatch();
};
return this;