Skip to content

Commit 74c109e

Browse files
committed
refactor: make Proxy.stop() await all server shutdowns in parallel
1 parent daf5646 commit 74c109e

2 files changed

Lines changed: 51 additions & 30 deletions

File tree

src/proxy/index.ts

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -101,35 +101,51 @@ export class Proxy {
101101
}
102102

103103
public stop(): Promise<void> {
104-
return new Promise((resolve, reject) => {
105-
try {
106-
// Close HTTP server if it exists
107-
if (this.httpServer) {
108-
this.httpServer.close(() => {
109-
console.log('HTTP server closed');
110-
this.httpServer = null;
104+
const closePromises: Promise<void>[] = [];
105+
106+
// Close HTTP server if it exists
107+
if (this.httpServer) {
108+
closePromises.push(
109+
new Promise((resolve, reject) => {
110+
this.httpServer!.close((err) => {
111+
if (err) {
112+
reject(err);
113+
} else {
114+
console.log('HTTP server closed');
115+
this.httpServer = null;
116+
resolve();
117+
}
111118
});
112-
}
119+
}),
120+
);
121+
}
113122

114-
// Close HTTPS server if it exists
115-
if (this.httpsServer) {
116-
this.httpsServer.close(() => {
117-
console.log('HTTPS server closed');
118-
this.httpsServer = null;
123+
// Close HTTPS server if it exists
124+
if (this.httpsServer) {
125+
closePromises.push(
126+
new Promise((resolve, reject) => {
127+
this.httpsServer!.close((err) => {
128+
if (err) {
129+
reject(err);
130+
} else {
131+
console.log('HTTPS server closed');
132+
this.httpsServer = null;
133+
resolve();
134+
}
119135
});
120-
}
136+
}),
137+
);
138+
}
121139

122-
// Close SSH server if it exists
123-
if (this.sshServer) {
124-
this.sshServer.stop();
125-
console.log('SSH server stopped');
140+
// Close SSH server if it exists
141+
if (this.sshServer) {
142+
closePromises.push(
143+
this.sshServer.stop().then(() => {
126144
this.sshServer = null;
127-
}
145+
}),
146+
);
147+
}
128148

129-
resolve();
130-
} catch (error) {
131-
reject(error);
132-
}
133-
});
149+
return Promise.all(closePromises).then(() => {});
134150
}
135151
}

src/proxy/ssh/server.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -646,12 +646,17 @@ export class SSHServer {
646646
});
647647
}
648648

649-
public stop(): void {
650-
if (this.server) {
651-
this.server.close(() => {
652-
console.log('[SSH] Server stopped');
653-
});
654-
}
649+
public stop(): Promise<void> {
650+
return new Promise((resolve) => {
651+
if (this.server) {
652+
this.server.close(() => {
653+
console.log('[SSH] Server stopped');
654+
resolve();
655+
});
656+
} else {
657+
resolve();
658+
}
659+
});
655660
}
656661
}
657662

0 commit comments

Comments
 (0)