From 842b8f2036ac0ed6e5c3b121c2ef26a3c106033b Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 10 Dec 2023 22:50:30 +1300 Subject: [PATCH] fix server interrupt --- .changeset/curly-jeans-exercise.md | 5 +++++ src/DevTools/Server.ts | 17 +++++++---------- src/SocketServer/Node.ts | 8 ++++---- 3 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 .changeset/curly-jeans-exercise.md diff --git a/.changeset/curly-jeans-exercise.md b/.changeset/curly-jeans-exercise.md new file mode 100644 index 0000000..5adf1a5 --- /dev/null +++ b/.changeset/curly-jeans-exercise.md @@ -0,0 +1,5 @@ +--- +"@effect/experimental": patch +--- + +fix server interrupt diff --git a/src/DevTools/Server.ts b/src/DevTools/Server.ts index d42baee..249e77e 100644 --- a/src/DevTools/Server.ts +++ b/src/DevTools/Server.ts @@ -46,14 +46,8 @@ export const make = Effect.gen(function*(_) { const handle = (socket: Socket.Socket) => Effect.gen(function*(_) { - const responses = yield* _(Effect.acquireRelease( - Queue.unbounded(), - Queue.shutdown - )) - const requests = yield* _(Effect.acquireRelease( - Queue.unbounded(), - Queue.shutdown - )) + const responses = yield* _(Queue.unbounded()) + const requests = yield* _(Queue.unbounded()) yield* _(clients.offer(requests)) @@ -69,10 +63,13 @@ export const make = Effect.gen(function*(_) { req._tag === "Ping" ? responses.offer({ _tag: "Pong" }) : requests.offer(req) - ) + ), + Effect.ensuring(Effect.all([ + requests.shutdown, + responses.shutdown + ])) ) }).pipe( - Effect.scoped, Effect.catchAllCause(Effect.log), Effect.fork ) diff --git a/src/SocketServer/Node.ts b/src/SocketServer/Node.ts index 2128b8e..6080767 100644 --- a/src/SocketServer/Node.ts +++ b/src/SocketServer/Node.ts @@ -67,10 +67,10 @@ export const make = ( ) }) server.listen(options) - return Effect.async((resume) => { + return Effect.sync(() => { serverDeferred = Deferred.unsafeMake(fiberId) server.removeAllListeners() - server.close(() => resume(Effect.unit)) + server.close() }) }).pipe( semaphore.withPermits(1) @@ -159,10 +159,10 @@ export const makeWebSocket = ( Effect.runFork ) }) - return Effect.async((resume) => { + return Effect.sync(() => { serverDeferred = Deferred.unsafeMake(fiberId) server.removeAllListeners() - server.close(() => resume(Effect.unit)) + server.close() }) }).pipe( semaphore.withPermits(1)