MCPcopy Index your code
hub / github.com/tiann/hapi / waitForMessages

Method waitForMessages

cli/src/utils/MessageQueue2.ts:389–439  ·  view source on GitHub ↗

* Wait for messages to arrive

(abortSignal?: AbortSignal)

Source from the content-addressed store, hash-verified

387 * Wait for messages to arrive
388 */
389 private waitForMessages(abortSignal?: AbortSignal): Promise<boolean> {
390 return new Promise((resolve) => {
391 let settled = false;
392 let abortHandler: (() => void) | null = null;
393 let waiterFunc: (hasMessages: boolean) => void;
394
395 const finish = (hasMessages: boolean) => {
396 if (settled) {
397 return;
398 }
399 settled = true;
400 if (this.waiter === waiterFunc) {
401 this.waiter = null;
402 }
403 // Clean up abort handler
404 if (abortHandler && abortSignal) {
405 abortSignal.removeEventListener('abort', abortHandler);
406 }
407 resolve(hasMessages);
408 };
409
410 waiterFunc = (hasMessages: boolean) => {
411 finish(hasMessages);
412 };
413
414 // Set up abort handler
415 if (abortSignal) {
416 abortHandler = () => {
417 logger.debug('[MessageQueue2] Wait aborted');
418 finish(false);
419 };
420 abortSignal.addEventListener('abort', abortHandler);
421 }
422
423 // Set the waiter before checking the queue to avoid missed notifications
424 this.waiter = waiterFunc;
425
426 // Check again in case messages arrived or queue closed while setting up
427 if (this.queue.length > 0) {
428 finish(true);
429 return;
430 }
431
432 if (this.closed || abortSignal?.aborted) {
433 finish(false);
434 return;
435 }
436
437 logger.debug('[MessageQueue2] Waiting for messages...');
438 });
439 }
440}

Callers 1

Calls 1

debugMethod · 0.80

Tested by

no test coverage detected