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:
parent
3ffad37180
commit
2f7f2088cd
2 changed files with 30 additions and 24 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue