(url: string, onOpen: (socket: WebSocket) => void, messageCount: number)
| 713 | ) |
| 714 | |
| 715 | const connectWebSocket = (url: string, onOpen: (socket: WebSocket) => void, messageCount: number) => |
| 716 | Effect.acquireUseRelease( |
| 717 | openWebSocket(url), |
| 718 | (socket) => |
| 719 | Effect.gen(function*() { |
| 720 | const messages: Array<string> = [] |
| 721 | const fiber = yield* Effect.callback<void, Error>((resume) => { |
| 722 | socket.addEventListener("message", (event) => { |
| 723 | messages.push(event.data) |
| 724 | if (messages.length === messageCount) resume(Effect.void) |
| 725 | }) |
| 726 | socket.addEventListener("error", () => resume(Effect.fail(new Error("WebSocket connection failed"))), { |
| 727 | once: true |
| 728 | }) |
| 729 | onOpen(socket) |
| 730 | }).pipe(Effect.forkChild) |
| 731 | yield* Fiber.join(fiber) |
| 732 | return messages |
| 733 | }), |
| 734 | (socket) => Effect.sync(() => socket.close()) |
| 735 | ) |
no test coverage detected