@jcbuisson/express-x-client 2.1.7 → 2.2.0

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/index.mjs +44 -37
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcbuisson/express-x-client",
3
- "version": "2.1.7",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "description": "Client library for ExpressX framework",
6
6
  "main": "src/index.mjs",
package/src/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  function generateUID(length) {
3
3
  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
4
- let uid = '';
4
+ let uid = ''
5
5
 
6
6
  for (let i = 0; i < length; i++) {
7
7
  const randomIndex = Math.floor(Math.random() * characters.length)
@@ -17,49 +17,51 @@ export default function expressXClient(socket, options={}) {
17
17
  const waitingPromisesByUid = {}
18
18
  const action2service2handlers = {}
19
19
  const type2appHandler = {}
20
- // const socketConnectionState = {}
21
- let connectHandler = null
22
- let connectErrorHandler = null
23
- let disconnectHandler = null
20
+ let connectListeners = []
21
+ let disconnectListeners = []
22
+ let errorListeners = []
24
23
 
25
24
  socket.on("connect", async () => {
26
25
  console.log("socket connected", socket.id)
27
- if (connectHandler) connectHandler(socket)
26
+ for (const func of connectListeners) {
27
+ func(socket)
28
+ }
28
29
  })
29
30
 
30
31
  socket.on("connect_error", async (err) => {
31
32
  console.log("socket connection error", socket.id)
32
- if (connectErrorHandler) connectErrorHandler(socket, err)
33
+ for (const func of errorListeners) {
34
+ func(socket)
35
+ }
33
36
  })
34
37
 
35
38
  socket.on("disconnect", async () => {
36
- if (disconnectHandler) disconnectHandler(socket)
39
+ console.log("socket disconnected", socket.id)
40
+ for (const func of disconnectListeners) {
41
+ func(socket)
42
+ }
37
43
  })
38
44
 
39
- function onConnect(func) {
40
- connectHandler = func
45
+ function addConnectListener(func) {
46
+ connectListeners.push(func)
41
47
  }
42
-
43
- function onConnectError(func) {
44
- connectErrorHandler = func
48
+ function removeConnectListener(func) {
49
+ connectListeners = connectListeners.filter(f !== func)
45
50
  }
46
51
 
47
- function onDisconnect(func) {
48
- disconnectHandler = func
52
+ function addDisconnectListener(func) {
53
+ disconnectListeners.push(func)
54
+ }
55
+ function removeDisonnectListener(func) {
56
+ disconnectListeners = disconnectListeners.filter(f !== func)
49
57
  }
50
58
 
51
-
52
- // async function socketConnection() {
53
- // const promise = new Promise((resolve, reject) => {
54
- // socketConnectionState.resolve = resolve
55
- // socketConnectionState.reject = reject
56
- // })
57
- // return promise
58
- // }
59
-
60
- // function socketStatus() {
61
- // return socketConnectionState.status
62
- // }
59
+ function addErrorListener(func) {
60
+ errorListeners.push(func)
61
+ }
62
+ function removeErrorListener(func) {
63
+ errorListeners = errorListeners.filter(f !== func)
64
+ }
63
65
 
64
66
  // on receiving response from service request
65
67
  socket.on('client-response', ({ uid, error, result }) => {
@@ -96,16 +98,18 @@ export default function expressXClient(socket, options={}) {
96
98
  })
97
99
  // send request to server through websocket
98
100
  if (options.debug) console.log('client-request', uid, name, action, args)
99
- socket.emit('client-request', {
100
- uid,
101
- name,
102
- action,
103
- args,
104
- })
101
+ if (serviceOptions.volatile) {
102
+ // event is not sent if connection is not active
103
+ socket.volatile.emit('client-request', { uid, name, action, args, })
104
+ } else {
105
+ // event is buffered if connection is not active (default)
106
+ socket.emit('client-request', { uid, name, action, args, })
107
+ }
105
108
  return promise
106
109
  }
107
110
 
108
- function service(name, serviceOptions={ timeout: 20000 }) {
111
+ function service(name, serviceOptions={}) {
112
+ if (serviceOptions.timeout === undefined) serviceOptions.timeout = 20000
109
113
  const service = {
110
114
  // associate a handler to a pub/sub event for this service
111
115
  on: (action, handler) => {
@@ -146,9 +150,12 @@ export default function expressXClient(socket, options={}) {
146
150
  }
147
151
 
148
152
  return {
149
- onConnect,
150
- onConnectError,
151
- onDisconnect,
153
+ addConnectListener,
154
+ removeConnectListener,
155
+ addDisconnectListener,
156
+ removeDisonnectListener,
157
+ addErrorListener,
158
+ removeErrorListener,
152
159
 
153
160
  service,
154
161
  on,