fix: 重复关闭

This commit is contained in:
bietiaop
2025-02-02 15:09:38 +08:00
parent a0a4b0dd1d
commit 0fdd0175b7

View File

@@ -11,6 +11,8 @@ interface TerminalInstance {
pty: IPty; // 改用 PTY 实例
lastAccess: number;
sockets: Set<WebSocket>;
// 新增标识,用于防止重复关闭
isClosing: boolean;
}
class TerminalManager {
@@ -85,7 +87,8 @@ class TerminalManager {
ws.on('close', () => {
instance.sockets.delete(ws);
if (instance.sockets.size === 0) {
if (instance.sockets.size === 0 && !instance.isClosing) {
instance.isClosing = true;
instance.pty.kill();
}
});
@@ -117,6 +120,7 @@ class TerminalManager {
pty,
lastAccess: Date.now(),
sockets: new Set(),
isClosing: false,
};
pty.onData((data: any) => {
@@ -139,7 +143,10 @@ class TerminalManager {
closeTerminal(id: string) {
const instance = this.terminals.get(id);
if (instance) {
if (!instance.isClosing) {
instance.isClosing = true;
instance.pty.kill();
}
instance.sockets.forEach((ws) => ws.close());
this.terminals.delete(id);
}