zmdms-utils 0.0.81 → 0.0.82

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 (160) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.js +0 -1
  3. package/package.json +2 -6
  4. package/src/index.ts +0 -3
  5. package/dist/es/_virtual/FastBufferList.js +0 -7
  6. package/dist/es/_virtual/_commonjs-dynamic-modules.js +0 -5
  7. package/dist/es/_virtual/browser.js +0 -7
  8. package/dist/es/_virtual/browser2.js +0 -7
  9. package/dist/es/_virtual/debug.js +0 -7
  10. package/dist/es/_virtual/event.js +0 -7
  11. package/dist/es/_virtual/http-parser.js +0 -3
  12. package/dist/es/_virtual/iframe.js +0 -7
  13. package/dist/es/_virtual/index.js +0 -7
  14. package/dist/es/_virtual/index2.js +0 -7
  15. package/dist/es/_virtual/index3.js +0 -7
  16. package/dist/es/_virtual/index4.js +0 -7
  17. package/dist/es/_virtual/index5.js +0 -7
  18. package/dist/es/_virtual/index6.js +0 -7
  19. package/dist/es/_virtual/index7.js +0 -3
  20. package/dist/es/_virtual/index8.js +0 -7
  21. package/dist/es/_virtual/index9.js +0 -7
  22. package/dist/es/_virtual/inherits.js +0 -7
  23. package/dist/es/_virtual/inherits_browser.js +0 -7
  24. package/dist/es/_virtual/json3.js +0 -7
  25. package/dist/es/_virtual/node.js +0 -7
  26. package/dist/es/_virtual/node2.js +0 -7
  27. package/dist/es/_virtual/stomp-node.js +0 -3
  28. package/dist/es/_virtual/stomp.js +0 -3
  29. package/dist/es/_virtual/streams.js +0 -3
  30. package/dist/es/_virtual/utils.js +0 -3
  31. package/dist/es/node_modules/bufferutil/fallback.js +0 -43
  32. package/dist/es/node_modules/bufferutil/index.js +0 -21
  33. package/dist/es/node_modules/debug/src/browser.js +0 -192
  34. package/dist/es/node_modules/debug/src/common.js +0 -259
  35. package/dist/es/node_modules/debug/src/index.js +0 -25
  36. package/dist/es/node_modules/debug/src/node.js +0 -192
  37. package/dist/es/node_modules/eventsource/lib/eventsource.js +0 -493
  38. package/dist/es/node_modules/faye-websocket/lib/faye/eventsource.js +0 -150
  39. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event.js +0 -31
  40. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js +0 -41
  41. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api.js +0 -205
  42. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/client.js +0 -107
  43. package/dist/es/node_modules/faye-websocket/lib/faye/websocket.js +0 -47
  44. package/dist/es/node_modules/has-flag/index.js +0 -17
  45. package/dist/es/node_modules/http-parser-js/http-parser.js +0 -471
  46. package/dist/es/node_modules/inherits/inherits.js +0 -14
  47. package/dist/es/node_modules/inherits/inherits_browser.js +0 -38
  48. package/dist/es/node_modules/is-typedarray/index.js +0 -51
  49. package/dist/es/node_modules/json3/lib/json3.js +0 -937
  50. package/dist/es/node_modules/ms/index.js +0 -172
  51. package/dist/es/node_modules/node-gyp-build/index.js +0 -21
  52. package/dist/es/node_modules/node-gyp-build/node-gyp-build.js +0 -222
  53. package/dist/es/node_modules/querystringify/index.js +0 -120
  54. package/dist/es/node_modules/requires-port/index.js +0 -38
  55. package/dist/es/node_modules/safe-buffer/index.js +0 -71
  56. package/dist/es/node_modules/supports-color/index.js +0 -143
  57. package/dist/es/node_modules/typedarray-to-buffer/index.js +0 -37
  58. package/dist/es/node_modules/url-parse/index.js +0 -594
  59. package/dist/es/node_modules/utf-8-validate/fallback.js +0 -71
  60. package/dist/es/node_modules/utf-8-validate/index.js +0 -21
  61. package/dist/es/node_modules/websocket/index.js +0 -15
  62. package/dist/es/node_modules/websocket/lib/Deprecation.js +0 -42
  63. package/dist/es/node_modules/websocket/lib/W3CWebSocket.js +0 -268
  64. package/dist/es/node_modules/websocket/lib/WebSocketClient.js +0 -380
  65. package/dist/es/node_modules/websocket/lib/WebSocketConnection.js +0 -914
  66. package/dist/es/node_modules/websocket/lib/WebSocketFrame.js +0 -293
  67. package/dist/es/node_modules/websocket/lib/WebSocketRequest.js +0 -543
  68. package/dist/es/node_modules/websocket/lib/WebSocketRouter.js +0 -172
  69. package/dist/es/node_modules/websocket/lib/WebSocketRouterRequest.js +0 -67
  70. package/dist/es/node_modules/websocket/lib/WebSocketServer.js +0 -272
  71. package/dist/es/node_modules/websocket/lib/utils.js +0 -80
  72. package/dist/es/node_modules/websocket/lib/version.js +0 -13
  73. package/dist/es/node_modules/websocket/lib/websocket.js +0 -31
  74. package/dist/es/node_modules/websocket/node_modules/debug/src/browser.js +0 -199
  75. package/dist/es/node_modules/websocket/node_modules/debug/src/debug.js +0 -215
  76. package/dist/es/node_modules/websocket/node_modules/debug/src/index.js +0 -25
  77. package/dist/es/node_modules/websocket/node_modules/debug/src/node.js +0 -266
  78. package/dist/es/node_modules/websocket/node_modules/ms/index.js +0 -162
  79. package/dist/es/node_modules/websocket/package.json.js +0 -77
  80. package/dist/es/node_modules/websocket/vendor/FastBufferList.js +0 -205
  81. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/base.js +0 -202
  82. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/client.js +0 -152
  83. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft75.js +0 -128
  84. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft76.js +0 -124
  85. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/headers.js +0 -44
  86. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js +0 -21
  87. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js +0 -37
  88. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi.js +0 -492
  89. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/proxy.js +0 -108
  90. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/server.js +0 -119
  91. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js +0 -72
  92. package/dist/es/node_modules/websocket-driver/lib/websocket/driver.js +0 -47
  93. package/dist/es/node_modules/websocket-driver/lib/websocket/http_parser.js +0 -140
  94. package/dist/es/node_modules/websocket-driver/lib/websocket/streams.js +0 -150
  95. package/dist/es/node_modules/websocket-extensions/lib/parser.js +0 -103
  96. package/dist/es/node_modules/websocket-extensions/lib/pipeline/cell.js +0 -56
  97. package/dist/es/node_modules/websocket-extensions/lib/pipeline/functor.js +0 -74
  98. package/dist/es/node_modules/websocket-extensions/lib/pipeline/index.js +0 -50
  99. package/dist/es/node_modules/websocket-extensions/lib/pipeline/pledge.js +0 -39
  100. package/dist/es/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js +0 -66
  101. package/dist/es/node_modules/websocket-extensions/lib/websocket_extensions.js +0 -165
  102. package/dist/es/node_modules/yaeti/index.js +0 -17
  103. package/dist/es/node_modules/yaeti/lib/Event.js +0 -24
  104. package/dist/es/node_modules/yaeti/lib/EventTarget.js +0 -130
  105. package/dist/es/node_modules/zt-sockjs-client/lib/entry.js +0 -14
  106. package/dist/es/node_modules/zt-sockjs-client/lib/event/close.js +0 -21
  107. package/dist/es/node_modules/zt-sockjs-client/lib/event/event.js +0 -22
  108. package/dist/es/node_modules/zt-sockjs-client/lib/event/eventtarget.js +0 -62
  109. package/dist/es/node_modules/zt-sockjs-client/lib/event/trans-message.js +0 -19
  110. package/dist/es/node_modules/zt-sockjs-client/lib/facade.js +0 -40
  111. package/dist/es/node_modules/zt-sockjs-client/lib/iframe-bootstrap.js +0 -122
  112. package/dist/es/node_modules/zt-sockjs-client/lib/info-ajax.js +0 -57
  113. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe-receiver.js +0 -50
  114. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe.js +0 -81
  115. package/dist/es/node_modules/zt-sockjs-client/lib/info-receiver.js +0 -101
  116. package/dist/es/node_modules/zt-sockjs-client/lib/location.js +0 -12
  117. package/dist/es/node_modules/zt-sockjs-client/lib/main.js +0 -413
  118. package/dist/es/node_modules/zt-sockjs-client/lib/shims.js +0 -449
  119. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/websocket.js +0 -5
  120. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/xhr.js +0 -80
  121. package/dist/es/node_modules/zt-sockjs-client/lib/transport/eventsource.js +0 -34
  122. package/dist/es/node_modules/zt-sockjs-client/lib/transport/htmlfile.js +0 -31
  123. package/dist/es/node_modules/zt-sockjs-client/lib/transport/iframe.js +0 -154
  124. package/dist/es/node_modules/zt-sockjs-client/lib/transport/jsonp-polling.js +0 -41
  125. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/ajax-based.js +0 -55
  126. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/buffered-sender.js +0 -92
  127. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/iframe-wrap.js +0 -39
  128. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/polling.js +0 -65
  129. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/sender-receiver.js +0 -52
  130. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/eventsource.js +0 -69
  131. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/htmlfile.js +0 -96
  132. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/jsonp.js +0 -193
  133. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/xhr.js +0 -75
  134. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/jsonp.js +0 -104
  135. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xdr.js +0 -113
  136. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-cors.js +0 -19
  137. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-fake.js +0 -28
  138. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-local.js +0 -21
  139. package/dist/es/node_modules/zt-sockjs-client/lib/transport/websocket.js +0 -108
  140. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-polling.js +0 -30
  141. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-streaming.js +0 -38
  142. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-polling.js +0 -40
  143. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-streaming.js +0 -50
  144. package/dist/es/node_modules/zt-sockjs-client/lib/transport-list.js +0 -28
  145. package/dist/es/node_modules/zt-sockjs-client/lib/utils/browser.js +0 -29
  146. package/dist/es/node_modules/zt-sockjs-client/lib/utils/escape.js +0 -53
  147. package/dist/es/node_modules/zt-sockjs-client/lib/utils/event.js +0 -78
  148. package/dist/es/node_modules/zt-sockjs-client/lib/utils/iframe.js +0 -205
  149. package/dist/es/node_modules/zt-sockjs-client/lib/utils/log.js +0 -20
  150. package/dist/es/node_modules/zt-sockjs-client/lib/utils/object.js +0 -24
  151. package/dist/es/node_modules/zt-sockjs-client/lib/utils/random.js +0 -30
  152. package/dist/es/node_modules/zt-sockjs-client/lib/utils/transport.js +0 -52
  153. package/dist/es/node_modules/zt-sockjs-client/lib/utils/url.js +0 -54
  154. package/dist/es/node_modules/zt-sockjs-client/lib/version.js +0 -11
  155. package/dist/es/node_modules/zt-stompjs/index.js +0 -23
  156. package/dist/es/node_modules/zt-stompjs/lib/stomp-node.js +0 -117
  157. package/dist/es/node_modules/zt-stompjs/lib/stomp.js +0 -536
  158. package/dist/es/stompClient.d.ts +0 -55
  159. package/dist/es/stompClient.js +0 -379
  160. package/src/stompClient.ts +0 -449
@@ -1,449 +0,0 @@
1
- import Stomp from "zt-stompjs";
2
- import SockJS from "zt-sockjs-client";
3
- import { getToken } from "./auth";
4
-
5
- // 连接ws需要的参数
6
- interface IConnectWsConfig {
7
- baseUrl: string; // ws基础url
8
- userId: string; // 用户id
9
- clientType: string | number; // 客户端类型
10
- systemType?: string; // 系统类型
11
- token?: string; // token
12
- debug?: boolean; // 是否开启debug
13
- heartbeat?: {
14
- outgoing?: number; // 客户端将每10000ms发送一次心跳
15
- incoming?: number; // 客户端不希望从服务器接收心跳
16
- };
17
- reconnectionTime?: number; // 重连耗时
18
- }
19
-
20
- type IConnectSuccessCallback = () => void;
21
- type IConnectErrorCallback = (err: any) => void;
22
-
23
- class StompClient {
24
- static getInstance: (connectWsConfig?: IConnectWsConfig) => StompClient; // 静态属性,作为单例模式返回调用的方法
25
- connectWsConfig: IConnectWsConfig;
26
- client: any;
27
-
28
- isClient: any = false; // 是否连接上了
29
- clearIsClient: any = null;
30
- clearIsClientNo: any = null; // 连接10秒内未建立,重新连接
31
- clearIsClientYes: any = null; // 连接已建立重新连接
32
-
33
- subscriptions: any = {}; // 连接通道的返回值存储对象
34
- subscriptionsFn: any = {}; // 连接通道的函数存储对象
35
-
36
- successCallbacks: any = {}; // 连接成功执行的回调存储对象
37
- errorCallbacks: any = {}; // 连接失败执行的回调存储对象
38
-
39
- reconnectionNum: number = 0; // 重连次数
40
- reconnectiontime: number = 5000; // 重连时间
41
- maxReconnectiontime: number = 60000; // 最大重连时间 60s
42
-
43
- userClose: boolean = false; // 是否用户主动关闭
44
-
45
- isInit: boolean = false;
46
- constructor(connectWsConfig: IConnectWsConfig) {
47
- this.connectWsConfig = connectWsConfig;
48
- }
49
-
50
- // 连接初始化
51
- init() {
52
- this.isInit = true;
53
- const token = this.connectWsConfig.token || getToken();
54
- // 建立连接对象,还未发起连接
55
- const socket = new SockJS(
56
- `${this.connectWsConfig.baseUrl}/api/zmdms-csc-ztim/ws?token=${token}&system=${this.connectWsConfig.systemType}&clientType=${this.connectWsConfig.clientType}`
57
- );
58
- // 获取 STOMP 子协议的客户端对象
59
- this.client = Stomp.over(socket);
60
- this.isClient = false;
61
- if (!this.subscriptions) {
62
- this.subscriptions = {};
63
- }
64
- if (!this.subscriptionsFn) {
65
- this.subscriptionsFn = {};
66
- }
67
- if (!this.successCallbacks) {
68
- this.successCallbacks = {};
69
- }
70
- if (!this.errorCallbacks) {
71
- this.errorCallbacks = {};
72
- }
73
-
74
- // 如果存在 证明已经初始化过,直接删除
75
- if (this.clearIsClient) {
76
- clearTimeout(this.clearIsClient);
77
- this.clearIsClient = null;
78
- }
79
- if (this.clearIsClientNo) {
80
- clearTimeout(this.clearIsClientNo);
81
- this.clearIsClientNo = null;
82
- }
83
- if (this.clearIsClientYes) {
84
- clearTimeout(this.clearIsClientYes);
85
- this.clearIsClientYes = null;
86
- }
87
- this.clearIsClient = setTimeout(() => {
88
- this.clearIsClient = null;
89
- if (!this.isClient) {
90
- console.log(
91
- `连接已发起,但是10秒后未成功建立连接,手动断开重连!system=${this.connectWsConfig.systemType}`
92
- );
93
- try {
94
- this.client.disconnect(() => {
95
- this.client = null;
96
- });
97
- } catch (err) {
98
- console.log("---连接未建立的关闭出错---", err);
99
- }
100
- this.reconnectionNum++;
101
- const timeInterval = this.getReconnectionTime();
102
- console.log(
103
- `---第${this.reconnectionNum}次重连!time=${Date.now()}system=${
104
- this.connectWsConfig.systemType
105
- }---`
106
- );
107
- if (this.clearIsClientNo) {
108
- clearTimeout(this.clearIsClientNo);
109
- this.clearIsClientNo = null;
110
- }
111
- this.clearIsClientNo = setTimeout(
112
- () => {
113
- this.init();
114
- },
115
- timeInterval > this.maxReconnectiontime
116
- ? this.maxReconnectiontime
117
- : timeInterval
118
- );
119
- }
120
- }, 10000);
121
-
122
- // 拦截输出的一大堆垃圾信息
123
- this.client.debug = null;
124
- // if (this.connectWsConfig.debug) {
125
- // this.client.debug = (str: string) => {
126
- // if (this.connectWsConfig.debug) {
127
- // console.log(str);
128
- // }
129
- // };
130
- // }
131
-
132
- // 心跳检测 stompjs 底层使用window.setInterval() 定期发送心跳检测
133
- this.client.heartbeat.outgoing =
134
- this.connectWsConfig.heartbeat?.outgoing ?? 2000; // 客户端将每2000ms发送一次心跳
135
- this.client.heartbeat.incoming =
136
- this.connectWsConfig.heartbeat?.incoming ?? 2000; // 客户端不希望从服务器接收心跳
137
-
138
- this.client.connect(
139
- {},
140
- // 连接成功回调
141
- () => {
142
- this.isClient = true;
143
- if (this.clearIsClient) {
144
- clearTimeout(this.clearIsClient);
145
- this.clearIsClient = null;
146
- }
147
- if (this.clearIsClientNo) {
148
- clearTimeout(this.clearIsClientNo);
149
- this.clearIsClientNo = null;
150
- }
151
- if (this.clearIsClientYes) {
152
- clearTimeout(this.clearIsClientYes);
153
- this.clearIsClientYes = null;
154
- }
155
- this.reconnectionNum = 0;
156
- console.log(
157
- `---------连接成功 time=${Date.now()} system=${
158
- this.connectWsConfig.systemType
159
- } time=${Date.now()}--------`
160
- );
161
- this.executeSubscribe();
162
- },
163
- // 连接失败回调
164
- (err: any) => {
165
- console.log(
166
- `---------连接失败 system=${
167
- this.connectWsConfig.systemType
168
- } time=${Date.now()}--------`
169
- );
170
- console.log(err);
171
- if (this.userClose) {
172
- this.userClose = false; // 重新初始化 重新计算
173
- if (this.clearIsClient) {
174
- clearTimeout(this.clearIsClient);
175
- this.clearIsClient = null;
176
- }
177
- if (this.clearIsClientNo) {
178
- clearTimeout(this.clearIsClientNo);
179
- this.clearIsClientNo = null;
180
- }
181
- if (this.clearIsClientYes) {
182
- clearTimeout(this.clearIsClientYes);
183
- this.clearIsClientYes = null;
184
- }
185
- // 连接失败后,将所有注册过的订阅、回调执行状态置为未执行状态。
186
- this.setExecuteFail();
187
- console.log("用户主动关闭");
188
- return;
189
- }
190
- this.isClient = true;
191
- if (this.clearIsClient) {
192
- clearTimeout(this.clearIsClient);
193
- this.clearIsClient = null;
194
- }
195
- if (this.clearIsClientNo) {
196
- clearTimeout(this.clearIsClientNo);
197
- this.clearIsClientNo = null;
198
- }
199
- if (this.clearIsClientYes) {
200
- clearTimeout(this.clearIsClientYes);
201
- this.clearIsClientYes = null;
202
- }
203
- // 连接失败后,将所有注册过的订阅、回调执行状态置为未执行状态。
204
- this.setExecuteFail();
205
- // 重连逻辑, 默认3秒后重连
206
- // 重连间隔,每隔5秒递增,超过最大间隔时间后,取最大间隔时间重连
207
- try {
208
- this.client.disconnect(() => {
209
- this.client = null;
210
- });
211
- } catch (err) {
212
- console.log(
213
- `---连接已建立的关闭出错 time=${Date.now()}system=${
214
- this.connectWsConfig.systemType
215
- }---`,
216
- err
217
- );
218
- }
219
- this.reconnectionNum++;
220
- const timeInterval = this.getReconnectionTime();
221
- console.log(
222
- `---第${this.reconnectionNum}次重连!time=${Date.now()}system=${
223
- this.connectWsConfig.systemType
224
- }`
225
- );
226
- this.clearIsClientYes = setTimeout(
227
- () => {
228
- this.init();
229
- },
230
- timeInterval > this.maxReconnectiontime
231
- ? this.maxReconnectiontime
232
- : timeInterval
233
- );
234
- }
235
- );
236
- }
237
-
238
- /**
239
- * 连接失败后,将所有注册过的订阅、回调执行状态置为未执行状态。
240
- * @param isExecute 连接通道、回调的执行状态
241
- */
242
- setExecuteFail() {
243
- // 连接失败后,将当前已注册的 连接通道 全部置为未执行状态
244
- const subscriptionsFnKeys = Object.keys(this.subscriptionsFn);
245
- if (Array.isArray(subscriptionsFnKeys)) {
246
- subscriptionsFnKeys.forEach((key) => {
247
- this.subscriptionsFn[key].isExecute = false;
248
- });
249
- }
250
- // 连接失败后,统一执行连接失败函数
251
- const errorCallbackKeys = Object.keys(this.errorCallbacks);
252
- if (Array.isArray(errorCallbackKeys)) {
253
- errorCallbackKeys.forEach((key) => {
254
- const { isExecute, callback } = this.errorCallbacks[key];
255
- if (!isExecute) {
256
- callback && callback();
257
- }
258
- this.errorCallbacks[key].isExecute = true;
259
- });
260
- }
261
- // 将成功回调 的执行状态 重置为未执行状态
262
- const successCallbackKeys = Object.keys(this.successCallbacks);
263
- if (Array.isArray(successCallbackKeys)) {
264
- successCallbackKeys.forEach((key) => {
265
- this.successCallbacks[key].isExecute = false;
266
- });
267
- }
268
- }
269
-
270
- /**
271
- * 连接成功后,需要将当前已注册的,未执行的连接通道重新执行连接
272
- * 还有成功回调
273
- * 失败回调的执行状态重置为未执行状态
274
- * @returns 执行订阅相关回调
275
- */
276
- executeSubscribe() {
277
- // 连接成功后,将当前已注册的,未执行的 连接通道 连接
278
- const subscriptionsFnKeys = Object.keys(this.subscriptionsFn);
279
- if (Array.isArray(subscriptionsFnKeys)) {
280
- subscriptionsFnKeys.forEach((key) => {
281
- const { isExecute, subscriptionsFn } = this.subscriptionsFn[key];
282
- if (!isExecute) {
283
- subscriptionsFn?.();
284
- this.subscriptionsFn[key].isExecute = true;
285
- }
286
- });
287
- }
288
- // 连接成功后,统一执行连接成功函数
289
- const successCallbackKeys = Object.keys(this.successCallbacks);
290
- if (Array.isArray(successCallbackKeys)) {
291
- successCallbackKeys.forEach((key) => {
292
- const { isExecute, callback } = this.successCallbacks[key];
293
- if (!isExecute) {
294
- callback && callback();
295
- }
296
- this.successCallbacks[key].isExecute = true;
297
- });
298
- }
299
- // 将失败回调 的执行状态 重置为未执行状态
300
- const errorCallbackKeys = Object.keys(this.errorCallbacks);
301
- if (Array.isArray(errorCallbackKeys)) {
302
- errorCallbackKeys.forEach((key) => {
303
- this.errorCallbacks[key].isExecute = false;
304
- });
305
- }
306
- }
307
-
308
- // 重连时间计算
309
- getReconnectionTime() {
310
- const timeInterval =
311
- Math.ceil(this.reconnectionNum / 5) *
312
- (this.connectWsConfig.reconnectionTime ?? this.reconnectiontime);
313
- return timeInterval;
314
- }
315
-
316
- // 订阅连接成功回调
317
- subscribeSuccessCall(subscribeId: string, callback: () => void) {
318
- this.successCallbacks[subscribeId] = {
319
- isExecute: false,
320
- callback,
321
- };
322
- }
323
-
324
- // 订阅连接失败回调
325
- subscribeErrorCall(subscribeId: string, callback: () => void) {
326
- this.errorCallbacks[subscribeId] = {
327
- isExecute: false,
328
- callback,
329
- };
330
- }
331
-
332
- // 订阅通道逻辑
333
- subscribe(
334
- subscribeId: string,
335
- pipe: string,
336
- callback?: (response: any) => void,
337
- headers?: any
338
- ) {
339
- // 兼容不传callback 的方案
340
- if (typeof callback !== "function") {
341
- headers = callback;
342
- callback = undefined;
343
- }
344
- let subscriptionsFn = () => {
345
- if (this.client) {
346
- let subscription = this.client.subscribe(
347
- pipe,
348
- (response: any) => {
349
- callback && callback(response);
350
- },
351
- headers
352
- );
353
- this.subscriptions[subscribeId] = subscription;
354
- }
355
- };
356
- if (this.client?.connected) {
357
- // 如果是连接状态 正常执行函数
358
- subscriptionsFn();
359
- // 是否已执行
360
- this.subscriptionsFn[subscribeId] = {
361
- isExecute: true,
362
- subscriptionsFn,
363
- };
364
- } else {
365
- // 缓存连接函数
366
- this.subscriptionsFn[subscribeId] = {
367
- isExecute: false,
368
- subscriptionsFn,
369
- };
370
- }
371
- }
372
-
373
- getSubscriptions(key: any) {
374
- const subscriptionKey = this.subscriptions[key];
375
- Reflect.deleteProperty(this.subscriptions, key);
376
- Reflect.deleteProperty(this.subscriptionsFn, key);
377
- return subscriptionKey;
378
- }
379
-
380
- // 关闭连接逻辑
381
- disconnect(callback: () => void) {
382
- this.isInit = false;
383
- this.userClose = true;
384
- this.subscriptions = null;
385
- this.subscriptionsFn = null;
386
- this.successCallbacks = null;
387
- this.errorCallbacks = null;
388
- return new Promise((resolve, reject) => {
389
- try {
390
- this.client.disconnect(() => {
391
- this.client = null;
392
- callback && callback();
393
- resolve(null);
394
- });
395
- } catch (err) {
396
- callback && callback();
397
- resolve(null);
398
- }
399
- });
400
- }
401
-
402
- // 手动重新连接
403
- reconnect() {
404
- this.isInit = false;
405
- this.userClose = true;
406
- return new Promise((resolve, reject) => {
407
- try {
408
- this.setExecuteFail();
409
- this.client.disconnect(() => {
410
- this.client = null;
411
- resolve(null);
412
- });
413
- setTimeout(() => {
414
- this.userClose = false;
415
- this.init();
416
- }, 400);
417
- } catch (err) {
418
- resolve(null);
419
- }
420
- });
421
- }
422
-
423
- // 发送消息
424
- send(pipe: string, headers: object, message: string) {
425
- if (typeof headers === "string") {
426
- message = headers;
427
- headers = {};
428
- }
429
- this.client.send(pipe, headers, message);
430
- }
431
- }
432
-
433
- StompClient.getInstance = (function () {
434
- let instance: StompClient;
435
- return function (connectWsConfig?: IConnectWsConfig) {
436
- if (!instance && connectWsConfig) {
437
- instance = new StompClient(connectWsConfig);
438
- // ws 初始化
439
- instance.init();
440
- }
441
- // 如果没有初始化,那么初始化一下
442
- if (instance && !instance.isInit) {
443
- instance.init();
444
- }
445
- return instance;
446
- };
447
- })();
448
-
449
- export default StompClient;