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): event handler #247

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?

There is no easy way to subscribe to WebSocket server events, like: connection, error, etc.

Issue Number: #160

What is the new behavior?

Developer can subscribe to incoming server events, eg. incoming connections and also watch for broken connections:

const connection$: WsServerEffect = (event$, ctx) =>
  event$.pipe(
    matchEvent(ServerEvent.connection),
    tap(event => {
      const { client } = event.payload;

      client.once('close', () => {
        // do some cleanup...
      });
    }),
  );

export const webSocketServer = createWebSocketServer({
  event$: combineEffects(connection$),
  listener: webSocketListener({ ... }),
});

Does this PR introduce a breaking change?

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

Codecov Report

Merging #247 into master will increase coverage by 0.00%. The diff coverage is 78.94%.

Impacted file tree graph

@@           Coverage Diff           @@
##           master     #247   +/-   ##
=======================================
  Coverage   95.07%   95.07%           
=======================================
  Files         143      147    +4     
  Lines        2456     2518   +62     
  Branches      323      329    +6     
=======================================
+ Hits         2335     2394   +59     
- Misses        117      120    +3     
  Partials        4        4           
Impacted Files Coverage Δ
...ages/core/src/http/server/http.server.interface.ts 100.00% <ø> (ø)
...es/websockets/src/server/websocket.server.event.ts 72.72% <72.72%> (ø)
...ts/src/server/websocket.server.event.subscriber.ts 76.47% <76.47%> (ø)
.../middlewares/websockets.statusLogger.middleware.ts 82.60% <82.60%> (ø)
packages/websockets/src/server/websocket.server.ts 95.45% <84.61%> (+20.94%) :arrow_up:
...ebsockets/src/server/websocket.server.interface.ts 100.00% <100.00%> (ø)
...re/src/http/server/http.server.event.subscriber.ts 96.29% <0.00%> (-0.26%) :arrow_down:
...es/core/src/http/router/http.router.resolver.v2.ts 88.63% <0.00%> (-0.13%) :arrow_down:
packages/websockets/src/index.ts 100.00% <0.00%> (ø)
packages/core/src/http/server/http.server.ts 100.00% <0.00%> (ø)
... and 5 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 84cbb90...fdaab14. Read the comment docs.