Skip to content

Commit

Permalink
重启游戏支持
Browse files Browse the repository at this point in the history
  • Loading branch information
sumneko committed Jun 7, 2024
1 parent 964f2a9 commit e5f7567
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 57 deletions.
60 changes: 8 additions & 52 deletions src/console/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,58 +50,6 @@ function registerAllMethods() {
client.treeViewManager.refreshTreeNode(params.id);
});

interface startDebuggerParams {
delay?: number;
}

registerMethod('startDebugger', async (client, params: startDebuggerParams) => {
if (await debug.getSession()) {
return {
suc: false,
err: '调试器已经启动',
};
}
if (params.delay) {
await new Promise(resolve => setTimeout(resolve, params.delay! * 1000));
}
try {
let suc = await debug.attach();
if (suc) {
return {
suc: true,
};
} else {
return {
suc: false,
err: '启动调试器失败',
};
}
} catch(e) {
return {
suc: false,
err: (e instanceof Error) ? e.message : e!.toString(),
};
}
});

registerMethod('stopDebugger', async (client) => {
try {
await debug.stop();
return {
suc: true,
};
} catch(e) {
return {
suc: false,
err: (e instanceof Error) ? e.message : e!.toString(),
};
}
});

registerMethod('hasDebugger', async (client) => {
return debug.getSession() !== undefined;
});

interface CommandParams {
command: string;
args?: any[];
Expand All @@ -111,6 +59,14 @@ function registerAllMethods() {
let res = await vscode.commands.executeCommand(params.command, ...(params.args || []));
return res;
});

interface PrepareForRestartParams {
debugger?: boolean;
}

registerMethod('prepareForRestart', async (client, params: PrepareForRestartParams) => {
debug.prepareForRestart(params.debugger);
});
}

export function init() {
Expand Down
40 changes: 35 additions & 5 deletions src/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,40 @@ export async function attach() {
return suc;
}

export async function stop() {
await vscode.debug.stopDebugging();
}
export async function prepareForRestart(needDebugger?: boolean) {
if (needDebugger === undefined) {
needDebugger = vscode.debug.activeDebugSession !== undefined;
}
if (!needDebugger) {
return;
}

export async function getSession() {
return vscode.debug.activeDebugSession;
let session = vscode.debug.activeDebugSession;
if (session) {
let trg = vscode.debug.onDidTerminateDebugSession((e) => {
if (e === session) {
trg.dispose();
attach();
}
});
} else {
// 等待2秒,避免直接附加到当前的游戏中
await new Promise((resolve) => setTimeout(resolve, 2000));
await attach();
// 但还是有一定几率会附加到当前的游戏中,
// 因此发现很快又断开后,再次附加
session = vscode.debug.activeDebugSession;
if (!session) {
return;
}
let trg = vscode.debug.onDidTerminateDebugSession((e) => {
if (e === session) {
trg.dispose();
attach();
}
});
setTimeout(() => {
trg.dispose();
}, 5000);
}
}

0 comments on commit e5f7567

Please sign in to comment.