mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix: 重复关闭
This commit is contained in:
@@ -11,6 +11,8 @@ interface TerminalInstance {
|
|||||||
pty: IPty; // 改用 PTY 实例
|
pty: IPty; // 改用 PTY 实例
|
||||||
lastAccess: number;
|
lastAccess: number;
|
||||||
sockets: Set<WebSocket>;
|
sockets: Set<WebSocket>;
|
||||||
|
// 新增标识,用于防止重复关闭
|
||||||
|
isClosing: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
class TerminalManager {
|
class TerminalManager {
|
||||||
@@ -85,7 +87,8 @@ class TerminalManager {
|
|||||||
|
|
||||||
ws.on('close', () => {
|
ws.on('close', () => {
|
||||||
instance.sockets.delete(ws);
|
instance.sockets.delete(ws);
|
||||||
if (instance.sockets.size === 0) {
|
if (instance.sockets.size === 0 && !instance.isClosing) {
|
||||||
|
instance.isClosing = true;
|
||||||
instance.pty.kill();
|
instance.pty.kill();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -117,6 +120,7 @@ class TerminalManager {
|
|||||||
pty,
|
pty,
|
||||||
lastAccess: Date.now(),
|
lastAccess: Date.now(),
|
||||||
sockets: new Set(),
|
sockets: new Set(),
|
||||||
|
isClosing: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
pty.onData((data: any) => {
|
pty.onData((data: any) => {
|
||||||
@@ -139,7 +143,10 @@ class TerminalManager {
|
|||||||
closeTerminal(id: string) {
|
closeTerminal(id: string) {
|
||||||
const instance = this.terminals.get(id);
|
const instance = this.terminals.get(id);
|
||||||
if (instance) {
|
if (instance) {
|
||||||
|
if (!instance.isClosing) {
|
||||||
|
instance.isClosing = true;
|
||||||
instance.pty.kill();
|
instance.pty.kill();
|
||||||
|
}
|
||||||
instance.sockets.forEach((ws) => ws.close());
|
instance.sockets.forEach((ws) => ws.close());
|
||||||
this.terminals.delete(id);
|
this.terminals.delete(id);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user