@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.
- package/package.json +1 -1
- package/src/server.mjs +31 -9
package/package.json
CHANGED
package/src/server.mjs
CHANGED
|
@@ -7,10 +7,21 @@ export function expressX(config) {
|
|
|
7
7
|
|
|
8
8
|
const services = {}
|
|
9
9
|
let appHooks = []
|
|
10
|
-
|
|
10
|
+
const socketConnectListeners = []
|
|
11
|
+
const socketDisconnectingListeners = []
|
|
12
|
+
const socketDisconnectListeners = []
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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('
|
|
60
|
-
app.log('verbose', `Client
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
294
|
+
addSocketConnectListener,
|
|
295
|
+
addSocketDisconnectingListener,
|
|
296
|
+
addSocketDisconnectListener,
|
|
275
297
|
})
|
|
276
298
|
|
|
277
299
|
}
|