zmdms-utils 0.0.81 → 0.0.83

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 (162) hide show
  1. package/dist/es/validate.js +168 -1
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.js +0 -1
  4. package/package.json +2 -6
  5. package/src/index.ts +0 -3
  6. package/src/validate.ts +198 -0
  7. package/dist/es/_virtual/FastBufferList.js +0 -7
  8. package/dist/es/_virtual/_commonjs-dynamic-modules.js +0 -5
  9. package/dist/es/_virtual/browser.js +0 -7
  10. package/dist/es/_virtual/browser2.js +0 -7
  11. package/dist/es/_virtual/debug.js +0 -7
  12. package/dist/es/_virtual/event.js +0 -7
  13. package/dist/es/_virtual/http-parser.js +0 -3
  14. package/dist/es/_virtual/iframe.js +0 -7
  15. package/dist/es/_virtual/index.js +0 -7
  16. package/dist/es/_virtual/index2.js +0 -7
  17. package/dist/es/_virtual/index3.js +0 -7
  18. package/dist/es/_virtual/index4.js +0 -7
  19. package/dist/es/_virtual/index5.js +0 -7
  20. package/dist/es/_virtual/index6.js +0 -7
  21. package/dist/es/_virtual/index7.js +0 -3
  22. package/dist/es/_virtual/index8.js +0 -7
  23. package/dist/es/_virtual/index9.js +0 -7
  24. package/dist/es/_virtual/inherits.js +0 -7
  25. package/dist/es/_virtual/inherits_browser.js +0 -7
  26. package/dist/es/_virtual/json3.js +0 -7
  27. package/dist/es/_virtual/node.js +0 -7
  28. package/dist/es/_virtual/node2.js +0 -7
  29. package/dist/es/_virtual/stomp-node.js +0 -3
  30. package/dist/es/_virtual/stomp.js +0 -3
  31. package/dist/es/_virtual/streams.js +0 -3
  32. package/dist/es/_virtual/utils.js +0 -3
  33. package/dist/es/node_modules/bufferutil/fallback.js +0 -43
  34. package/dist/es/node_modules/bufferutil/index.js +0 -21
  35. package/dist/es/node_modules/debug/src/browser.js +0 -192
  36. package/dist/es/node_modules/debug/src/common.js +0 -259
  37. package/dist/es/node_modules/debug/src/index.js +0 -25
  38. package/dist/es/node_modules/debug/src/node.js +0 -192
  39. package/dist/es/node_modules/eventsource/lib/eventsource.js +0 -493
  40. package/dist/es/node_modules/faye-websocket/lib/faye/eventsource.js +0 -150
  41. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event.js +0 -31
  42. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js +0 -41
  43. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api.js +0 -205
  44. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/client.js +0 -107
  45. package/dist/es/node_modules/faye-websocket/lib/faye/websocket.js +0 -47
  46. package/dist/es/node_modules/has-flag/index.js +0 -17
  47. package/dist/es/node_modules/http-parser-js/http-parser.js +0 -471
  48. package/dist/es/node_modules/inherits/inherits.js +0 -14
  49. package/dist/es/node_modules/inherits/inherits_browser.js +0 -38
  50. package/dist/es/node_modules/is-typedarray/index.js +0 -51
  51. package/dist/es/node_modules/json3/lib/json3.js +0 -937
  52. package/dist/es/node_modules/ms/index.js +0 -172
  53. package/dist/es/node_modules/node-gyp-build/index.js +0 -21
  54. package/dist/es/node_modules/node-gyp-build/node-gyp-build.js +0 -222
  55. package/dist/es/node_modules/querystringify/index.js +0 -120
  56. package/dist/es/node_modules/requires-port/index.js +0 -38
  57. package/dist/es/node_modules/safe-buffer/index.js +0 -71
  58. package/dist/es/node_modules/supports-color/index.js +0 -143
  59. package/dist/es/node_modules/typedarray-to-buffer/index.js +0 -37
  60. package/dist/es/node_modules/url-parse/index.js +0 -594
  61. package/dist/es/node_modules/utf-8-validate/fallback.js +0 -71
  62. package/dist/es/node_modules/utf-8-validate/index.js +0 -21
  63. package/dist/es/node_modules/websocket/index.js +0 -15
  64. package/dist/es/node_modules/websocket/lib/Deprecation.js +0 -42
  65. package/dist/es/node_modules/websocket/lib/W3CWebSocket.js +0 -268
  66. package/dist/es/node_modules/websocket/lib/WebSocketClient.js +0 -380
  67. package/dist/es/node_modules/websocket/lib/WebSocketConnection.js +0 -914
  68. package/dist/es/node_modules/websocket/lib/WebSocketFrame.js +0 -293
  69. package/dist/es/node_modules/websocket/lib/WebSocketRequest.js +0 -543
  70. package/dist/es/node_modules/websocket/lib/WebSocketRouter.js +0 -172
  71. package/dist/es/node_modules/websocket/lib/WebSocketRouterRequest.js +0 -67
  72. package/dist/es/node_modules/websocket/lib/WebSocketServer.js +0 -272
  73. package/dist/es/node_modules/websocket/lib/utils.js +0 -80
  74. package/dist/es/node_modules/websocket/lib/version.js +0 -13
  75. package/dist/es/node_modules/websocket/lib/websocket.js +0 -31
  76. package/dist/es/node_modules/websocket/node_modules/debug/src/browser.js +0 -199
  77. package/dist/es/node_modules/websocket/node_modules/debug/src/debug.js +0 -215
  78. package/dist/es/node_modules/websocket/node_modules/debug/src/index.js +0 -25
  79. package/dist/es/node_modules/websocket/node_modules/debug/src/node.js +0 -266
  80. package/dist/es/node_modules/websocket/node_modules/ms/index.js +0 -162
  81. package/dist/es/node_modules/websocket/package.json.js +0 -77
  82. package/dist/es/node_modules/websocket/vendor/FastBufferList.js +0 -205
  83. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/base.js +0 -202
  84. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/client.js +0 -152
  85. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft75.js +0 -128
  86. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft76.js +0 -124
  87. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/headers.js +0 -44
  88. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js +0 -21
  89. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js +0 -37
  90. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi.js +0 -492
  91. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/proxy.js +0 -108
  92. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/server.js +0 -119
  93. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js +0 -72
  94. package/dist/es/node_modules/websocket-driver/lib/websocket/driver.js +0 -47
  95. package/dist/es/node_modules/websocket-driver/lib/websocket/http_parser.js +0 -140
  96. package/dist/es/node_modules/websocket-driver/lib/websocket/streams.js +0 -150
  97. package/dist/es/node_modules/websocket-extensions/lib/parser.js +0 -103
  98. package/dist/es/node_modules/websocket-extensions/lib/pipeline/cell.js +0 -56
  99. package/dist/es/node_modules/websocket-extensions/lib/pipeline/functor.js +0 -74
  100. package/dist/es/node_modules/websocket-extensions/lib/pipeline/index.js +0 -50
  101. package/dist/es/node_modules/websocket-extensions/lib/pipeline/pledge.js +0 -39
  102. package/dist/es/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js +0 -66
  103. package/dist/es/node_modules/websocket-extensions/lib/websocket_extensions.js +0 -165
  104. package/dist/es/node_modules/yaeti/index.js +0 -17
  105. package/dist/es/node_modules/yaeti/lib/Event.js +0 -24
  106. package/dist/es/node_modules/yaeti/lib/EventTarget.js +0 -130
  107. package/dist/es/node_modules/zt-sockjs-client/lib/entry.js +0 -14
  108. package/dist/es/node_modules/zt-sockjs-client/lib/event/close.js +0 -21
  109. package/dist/es/node_modules/zt-sockjs-client/lib/event/event.js +0 -22
  110. package/dist/es/node_modules/zt-sockjs-client/lib/event/eventtarget.js +0 -62
  111. package/dist/es/node_modules/zt-sockjs-client/lib/event/trans-message.js +0 -19
  112. package/dist/es/node_modules/zt-sockjs-client/lib/facade.js +0 -40
  113. package/dist/es/node_modules/zt-sockjs-client/lib/iframe-bootstrap.js +0 -122
  114. package/dist/es/node_modules/zt-sockjs-client/lib/info-ajax.js +0 -57
  115. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe-receiver.js +0 -50
  116. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe.js +0 -81
  117. package/dist/es/node_modules/zt-sockjs-client/lib/info-receiver.js +0 -101
  118. package/dist/es/node_modules/zt-sockjs-client/lib/location.js +0 -12
  119. package/dist/es/node_modules/zt-sockjs-client/lib/main.js +0 -413
  120. package/dist/es/node_modules/zt-sockjs-client/lib/shims.js +0 -449
  121. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/websocket.js +0 -5
  122. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/xhr.js +0 -80
  123. package/dist/es/node_modules/zt-sockjs-client/lib/transport/eventsource.js +0 -34
  124. package/dist/es/node_modules/zt-sockjs-client/lib/transport/htmlfile.js +0 -31
  125. package/dist/es/node_modules/zt-sockjs-client/lib/transport/iframe.js +0 -154
  126. package/dist/es/node_modules/zt-sockjs-client/lib/transport/jsonp-polling.js +0 -41
  127. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/ajax-based.js +0 -55
  128. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/buffered-sender.js +0 -92
  129. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/iframe-wrap.js +0 -39
  130. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/polling.js +0 -65
  131. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/sender-receiver.js +0 -52
  132. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/eventsource.js +0 -69
  133. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/htmlfile.js +0 -96
  134. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/jsonp.js +0 -193
  135. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/xhr.js +0 -75
  136. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/jsonp.js +0 -104
  137. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xdr.js +0 -113
  138. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-cors.js +0 -19
  139. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-fake.js +0 -28
  140. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-local.js +0 -21
  141. package/dist/es/node_modules/zt-sockjs-client/lib/transport/websocket.js +0 -108
  142. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-polling.js +0 -30
  143. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-streaming.js +0 -38
  144. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-polling.js +0 -40
  145. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-streaming.js +0 -50
  146. package/dist/es/node_modules/zt-sockjs-client/lib/transport-list.js +0 -28
  147. package/dist/es/node_modules/zt-sockjs-client/lib/utils/browser.js +0 -29
  148. package/dist/es/node_modules/zt-sockjs-client/lib/utils/escape.js +0 -53
  149. package/dist/es/node_modules/zt-sockjs-client/lib/utils/event.js +0 -78
  150. package/dist/es/node_modules/zt-sockjs-client/lib/utils/iframe.js +0 -205
  151. package/dist/es/node_modules/zt-sockjs-client/lib/utils/log.js +0 -20
  152. package/dist/es/node_modules/zt-sockjs-client/lib/utils/object.js +0 -24
  153. package/dist/es/node_modules/zt-sockjs-client/lib/utils/random.js +0 -30
  154. package/dist/es/node_modules/zt-sockjs-client/lib/utils/transport.js +0 -52
  155. package/dist/es/node_modules/zt-sockjs-client/lib/utils/url.js +0 -54
  156. package/dist/es/node_modules/zt-sockjs-client/lib/version.js +0 -11
  157. package/dist/es/node_modules/zt-stompjs/index.js +0 -23
  158. package/dist/es/node_modules/zt-stompjs/lib/stomp-node.js +0 -117
  159. package/dist/es/node_modules/zt-stompjs/lib/stomp.js +0 -536
  160. package/dist/es/stompClient.d.ts +0 -55
  161. package/dist/es/stompClient.js +0 -379
  162. 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;