(state: ListenerState, unpublishMdns: Effect.Effect<void>, listenerUrl: URL)
| 170 | } |
| 171 | |
| 172 | function makeStop(state: ListenerState, unpublishMdns: Effect.Effect<void>, listenerUrl: URL) { |
| 173 | return Effect.gen(function* () { |
| 174 | const forceCloseOnce = yield* Effect.cached(forceClose(state).pipe(Effect.ignore)) |
| 175 | const closeScopeOnce = yield* Effect.cached( |
| 176 | Scope.close(state.scope, Exit.void).pipe( |
| 177 | Effect.ignore, |
| 178 | Effect.ensuring( |
| 179 | Effect.sync(() => { |
| 180 | if (url === listenerUrl) url = undefined |
| 181 | }), |
| 182 | ), |
| 183 | ), |
| 184 | ) |
| 185 | |
| 186 | return (close?: boolean) => |
| 187 | Effect.gen(function* () { |
| 188 | yield* unpublishMdns |
| 189 | if (close) yield* forceCloseOnce |
| 190 | yield* closeScopeOnce |
| 191 | }) |
| 192 | }) |
| 193 | } |
| 194 | |
| 195 | function forceClose(state: ListenerState) { |
| 196 | return Effect.all([state.http.closeAll, state.websockets.closeAll], { concurrency: "unbounded", discard: true }) |
no test coverage detected