marblejs / marble

Marble.js - functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS.
https://marblejs.com
MIT License
2.15k stars 73 forks source link

feat(websockets): subscribe to closed client connections via ServerEvent.closeClient #252

Closed JozefFlakus closed 4 years ago

JozefFlakus commented 4 years ago

PR Type

What kind of change does this PR introduce?

[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:

What is the current behavior?

Issue Number: #160

What is the new behavior?

const connection$: WsServerEffect = (event$) =>
  event$.pipe(
    matchEvent(ServerEvent.connection),
    map(event => event.payload),
    tap(({ client }) => {
      // check if connections should be closed
      client.close();
    }),
  );

const closeClient$: WsServerEffect = (event$) =>
  event$.pipe(
    matchEvent(ServerEvent.closeClient),
    map(event => event.payload),
    tap(({ client }) => {
      // react accordingly
    }),
  );

export const webSocketServer = createWebSocketServer({
  listener: webSocketListener({
    middlewares: [...],
    effects: [...],
  }),
  event$: combineEffects(
    connection$,
    closeClient$,
  ),
});

Does this PR introduce a breaking change?

[ ] Yes
[x] No
codecov[bot] commented 4 years ago

Codecov Report

Merging #252 into master will increase coverage by 0.29%. The diff coverage is 96.66%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #252      +/-   ##
==========================================
+ Coverage   95.07%   95.37%   +0.29%     
==========================================
  Files         147      147              
  Lines        2519     2527       +8     
  Branches      331      335       +4     
==========================================
+ Hits         2395     2410      +15     
+ Misses        120      113       -7     
  Partials        4        4              
Impacted Files Coverage Δ
.../src/transport/strategies/redis.strategy.helper.ts 100.00% <ø> (ø)
...ebsockets/src/server/websocket.server.interface.ts 100.00% <ø> (ø)
...es/websockets/src/server/websocket.server.event.ts 80.76% <75.00%> (+8.04%) :arrow_up:
packages/websockets/src/server/websocket.server.ts 96.42% <93.33%> (+0.97%) :arrow_up:
packages/core/src/http/error/http.error.model.ts 66.66% <100.00%> (ø)
...ssaging/src/transport/strategies/redis.strategy.ts 97.18% <100.00%> (-2.82%) :arrow_down:
...es/websockets/src/+internal/websocket.test.util.ts 100.00% <100.00%> (ø)
packages/websockets/src/index.ts 100.00% <100.00%> (ø)
.../middlewares/websockets.statusLogger.middleware.ts 100.00% <100.00%> (+17.39%) :arrow_up:
... and 4 more

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update b9a7832...9e4a7a1. Read the comment docs.