refactor(simulation): scope Drive lifecycle with Effect (#36908)
This commit is contained in:
parent
a149a61a89
commit
947566f611
30 changed files with 1313 additions and 600 deletions
26
packages/simulation/test/fixture/websocket.ts
Normal file
26
packages/simulation/test/fixture/websocket.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import { Effect } from "effect"
|
||||
|
||||
export function availableEndpoint() {
|
||||
const server = Bun.serve({ hostname: "127.0.0.1", port: 0, fetch: () => new Response() })
|
||||
const endpoint = `ws://127.0.0.1:${server.port}`
|
||||
server.stop(true)
|
||||
return endpoint
|
||||
}
|
||||
|
||||
export function connect(endpoint: string) {
|
||||
return Effect.acquireRelease(
|
||||
Effect.callback<WebSocket, Error>((resume) => {
|
||||
const socket = new WebSocket(endpoint)
|
||||
const open = () => resume(Effect.succeed(socket))
|
||||
const error = () => resume(Effect.fail(new Error(`Failed to connect to ${endpoint}`)))
|
||||
socket.addEventListener("open", open, { once: true })
|
||||
socket.addEventListener("error", error, { once: true })
|
||||
return Effect.sync(() => {
|
||||
socket.removeEventListener("open", open)
|
||||
socket.removeEventListener("error", error)
|
||||
socket.close()
|
||||
})
|
||||
}),
|
||||
(socket) => Effect.sync(() => socket.close()),
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue