zmdms-utils 0.0.80 → 0.0.81

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