@jcbuisson/express-x 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/server.mjs +31 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcbuisson/express-x",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
package/src/server.mjs CHANGED
@@ -7,10 +7,21 @@ export function expressX(config) {
7
7
 
8
8
  const services = {}
9
9
  let appHooks = []
10
- let socketConnectHandler = null
10
+ const socketConnectListeners = []
11
+ const socketDisconnectingListeners = []
12
+ const socketDisconnectListeners = []
11
13
 
12
- function onSocketConnect(func) {
13
- socketConnectHandler = func
14
+
15
+ function addSocketConnectListener(func) {
16
+ socketConnectListeners.push(func)
17
+ }
18
+
19
+ function addSocketDisconnectingListener(func) {
20
+ socketDisconnectingListeners.push(func)
21
+ }
22
+
23
+ function addSocketDisconnectListener(func) {
24
+ socketDisconnectListeners.push(func)
14
25
  }
15
26
 
16
27
  const app = express()
@@ -29,6 +40,9 @@ export function expressX(config) {
29
40
  }
30
41
  })
31
42
 
43
+ // so that io server is accessible to hooks & services
44
+ app.set('io', io)
45
+
32
46
  // logging function - a winston logger must be configured first
33
47
  app.log = (severity, message) => {
34
48
  const logger = app.get('logger')
@@ -51,13 +65,19 @@ export function expressX(config) {
51
65
  // emit 'connection' event for app (expressjs extends EventEmitter)
52
66
  app.emit('connection', socket)
53
67
 
54
- if (socketConnectHandler) socketConnectHandler(socket)
68
+ socketConnectListeners.forEach(listener => listener(socket))
55
69
 
56
70
  // send 'connected' event to client
57
71
  socket.emit('connected', socket.id)
58
72
 
59
- socket.on('disconnect', () => {
60
- app.log('verbose', `Client disconnected ${socket.id}`)
73
+ socket.on('disconnecting', (reason) => {
74
+ app.log('verbose', `Client disconnecting ${socket.id}, ${reason}`)
75
+ socketDisconnectingListeners.forEach(listener => listener(socket, reason))
76
+ })
77
+
78
+ socket.on('disconnect', (reason) => {
79
+ app.log('verbose', `Client disconnect ${socket.id}, ${reason}`)
80
+ socketDisconnectListeners.forEach(listener => listener(socket, reason))
61
81
  })
62
82
 
63
83
  /*
@@ -244,12 +264,12 @@ export function expressX(config) {
244
264
  app.log('error', `there is no service named '${name}'`, 'missing-service')
245
265
  }
246
266
 
247
- async function joinChannel(channelName, socket) {
267
+ function joinChannel(channelName, socket) {
248
268
  app.log('verbose', `joining ${channelName}, ${JSON.stringify(socket.data)}`)
249
269
  socket.join(channelName)
250
270
  }
251
271
 
252
- async function leaveChannel(channelName, socket) {
272
+ function leaveChannel(channelName, socket) {
253
273
  app.log('verbose', `leaving ${channelName}, ${JSON.stringify(socket.data)}`)
254
274
  socket.leave(channelName)
255
275
  }
@@ -271,7 +291,9 @@ export function expressX(config) {
271
291
  joinChannel,
272
292
  leaveChannel,
273
293
  sendAppEvent,
274
- onSocketConnect,
294
+ addSocketConnectListener,
295
+ addSocketDisconnectingListener,
296
+ addSocketDisconnectListener,
275
297
  })
276
298
 
277
299
  }