MCPcopy
hub / github.com/ZToolsCenter/ZTools / waitForToolRegistration

Method waitForToolRegistration

src/main/api/plugin/tools.ts:257–279  ·  view source on GitHub ↗

* 等待 preload 中的 registerTool 完成,避免刚预加载时立即调用失败。

(webContents: WebContents, toolName: string)

Source from the content-addressed store, hash-verified

255 * 等待 preload 中的 registerTool 完成,避免刚预加载时立即调用失败。
256 */
257 private async waitForToolRegistration(webContents: WebContents, toolName: string): Promise<void> {
258 if (this.isToolRegistered(webContents, toolName)) return
259
260 const waiterKey = this.getWaiterKey(webContents.id, toolName)
261 await new Promise<void>((resolve, reject) => {
262 let wrappedResolve: (() => void) | null = null
263 const timeout = setTimeout(() => {
264 if (wrappedResolve) {
265 this.removeWaiter(waiterKey, wrappedResolve)
266 }
267 reject(new Error(`等待工具 "${toolName}" 注册超时`))
268 }, TOOL_REGISTER_TIMEOUT_MS)
269
270 wrappedResolve = (): void => {
271 clearTimeout(timeout)
272 resolve()
273 }
274
275 const waiters = this.waiters.get(waiterKey) || []
276 waiters.push(wrappedResolve)
277 this.waiters.set(waiterKey, waiters)
278 }).catch(() => undefined)
279 }
280
281 /**
282 * 解析并执行等待某个工具注册完成的所有回调。

Callers 1

ensurePluginToolReadyMethod · 0.95

Calls 4

isToolRegisteredMethod · 0.95
getWaiterKeyMethod · 0.95
removeWaiterMethod · 0.95
getMethod · 0.65

Tested by

no test coverage detected