@tdengine/websocket 3.0.0 → 3.1.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 (144) hide show
  1. package/lib/example/basicSchemaless.d.ts +2 -0
  2. package/lib/example/basicSchemaless.d.ts.map +1 -0
  3. package/lib/example/basicSchemaless.js +47 -0
  4. package/lib/example/basicSql.d.ts +2 -0
  5. package/lib/example/basicSql.d.ts.map +1 -0
  6. package/lib/example/basicSql.js +52 -0
  7. package/lib/example/basicStmt.d.ts +2 -0
  8. package/lib/example/basicStmt.d.ts.map +1 -0
  9. package/lib/example/basicStmt.js +58 -0
  10. package/lib/example/basicTmq.d.ts +2 -0
  11. package/lib/example/basicTmq.d.ts.map +1 -0
  12. package/lib/example/basicTmq.js +71 -0
  13. package/lib/index.d.ts +26 -0
  14. package/lib/index.d.ts.map +1 -0
  15. package/lib/index.js +41 -0
  16. package/lib/src/client/wsClient.d.ts +22 -0
  17. package/lib/src/client/wsClient.d.ts.map +1 -0
  18. package/lib/src/client/wsClient.js +253 -0
  19. package/lib/src/client/wsConnector.d.ts +17 -0
  20. package/lib/src/client/wsConnector.d.ts.map +1 -0
  21. package/lib/src/client/wsConnector.js +140 -0
  22. package/lib/src/client/wsConnectorPool.d.ts +13 -0
  23. package/lib/src/client/wsConnectorPool.d.ts.map +1 -0
  24. package/lib/src/client/wsConnectorPool.js +107 -0
  25. package/lib/src/client/wsEventCallback.d.ts +22 -0
  26. package/lib/src/client/wsEventCallback.d.ts.map +1 -0
  27. package/lib/src/client/wsEventCallback.js +97 -0
  28. package/lib/src/client/wsResponse.d.ts +66 -0
  29. package/lib/src/client/wsResponse.d.ts.map +1 -0
  30. package/lib/src/client/wsResponse.js +76 -0
  31. package/lib/src/common/config.d.ts +22 -0
  32. package/lib/src/common/config.d.ts.map +1 -0
  33. package/lib/src/common/config.js +45 -0
  34. package/lib/src/common/constant.d.ts +13 -0
  35. package/lib/src/common/constant.d.ts.map +1 -0
  36. package/{src/constant.ts → lib/src/common/constant.js} +25 -24
  37. package/lib/src/common/log.d.ts +5 -0
  38. package/lib/src/common/log.d.ts.map +1 -0
  39. package/lib/src/common/log.js +40 -0
  40. package/lib/src/common/reqid.d.ts +8 -0
  41. package/lib/src/common/reqid.d.ts.map +1 -0
  42. package/lib/src/common/reqid.js +59 -0
  43. package/lib/src/common/taosResult.d.ts +51 -0
  44. package/lib/src/common/taosResult.d.ts.map +1 -0
  45. package/lib/src/common/taosResult.js +419 -0
  46. package/lib/src/common/ut8Helper.d.ts +2 -0
  47. package/lib/src/common/ut8Helper.d.ts.map +1 -0
  48. package/{src/ut8Helper.ts → lib/src/common/ut8Helper.js} +22 -21
  49. package/lib/src/common/utils.d.ts +5 -0
  50. package/lib/src/common/utils.d.ts.map +1 -0
  51. package/lib/src/common/utils.js +33 -0
  52. package/lib/src/common/wsError.d.ts +29 -0
  53. package/lib/src/common/wsError.d.ts.map +1 -0
  54. package/lib/src/common/wsError.js +51 -0
  55. package/{src/wsOptions.ts → lib/src/common/wsOptions.d.ts} +4 -2
  56. package/lib/src/common/wsOptions.d.ts.map +1 -0
  57. package/lib/src/common/wsOptions.js +2 -0
  58. package/lib/src/index.d.ts +9 -0
  59. package/lib/src/index.d.ts.map +1 -0
  60. package/lib/src/index.js +58 -0
  61. package/lib/src/sql/wsProto.d.ts +26 -0
  62. package/lib/src/sql/wsProto.d.ts.map +1 -0
  63. package/lib/src/sql/wsProto.js +19 -0
  64. package/lib/src/sql/wsRows.d.ts +16 -0
  65. package/lib/src/sql/wsRows.d.ts.map +1 -0
  66. package/lib/src/sql/wsRows.js +76 -0
  67. package/lib/src/sql/wsSql.d.ts +24 -0
  68. package/lib/src/sql/wsSql.d.ts.map +1 -0
  69. package/lib/src/sql/wsSql.js +164 -0
  70. package/lib/src/stmt/wsParams.d.ts +41 -0
  71. package/lib/src/stmt/wsParams.d.ts.map +1 -0
  72. package/lib/src/stmt/wsParams.js +428 -0
  73. package/lib/src/stmt/wsProto.d.ts +27 -0
  74. package/lib/src/stmt/wsProto.d.ts.map +1 -0
  75. package/lib/src/stmt/wsProto.js +67 -0
  76. package/lib/src/stmt/wsStmt.d.ts +30 -0
  77. package/lib/src/stmt/wsStmt.d.ts.map +1 -0
  78. package/lib/src/stmt/wsStmt.js +207 -0
  79. package/lib/src/tmq/config.d.ts +14 -0
  80. package/lib/src/tmq/config.d.ts.map +1 -0
  81. package/lib/src/tmq/config.js +42 -0
  82. package/lib/src/tmq/constant.d.ts +85 -0
  83. package/lib/src/tmq/constant.d.ts.map +1 -0
  84. package/lib/src/tmq/constant.js +89 -0
  85. package/lib/src/tmq/tmqResponse.d.ts +80 -0
  86. package/lib/src/tmq/tmqResponse.d.ts.map +1 -0
  87. package/lib/src/tmq/tmqResponse.js +204 -0
  88. package/lib/src/tmq/wsTmq.d.ts +32 -0
  89. package/lib/src/tmq/wsTmq.d.ts.map +1 -0
  90. package/lib/src/tmq/wsTmq.js +316 -0
  91. package/lib/test/bulkPulling/queryTables.test.d.ts +2 -0
  92. package/lib/test/bulkPulling/queryTables.test.d.ts.map +1 -0
  93. package/lib/test/bulkPulling/queryTables.test.js +297 -0
  94. package/lib/test/bulkPulling/schemaless.test.d.ts +2 -0
  95. package/lib/test/bulkPulling/schemaless.test.d.ts.map +1 -0
  96. package/lib/test/bulkPulling/schemaless.test.js +94 -0
  97. package/lib/test/bulkPulling/sql.test.d.ts +2 -0
  98. package/lib/test/bulkPulling/sql.test.d.ts.map +1 -0
  99. package/lib/test/bulkPulling/sql.test.js +124 -0
  100. package/lib/test/bulkPulling/stmt.func.test.d.ts +2 -0
  101. package/lib/test/bulkPulling/stmt.func.test.d.ts.map +1 -0
  102. package/lib/test/bulkPulling/stmt.func.test.js +381 -0
  103. package/lib/test/bulkPulling/stmt.type.test.d.ts +2 -0
  104. package/lib/test/bulkPulling/stmt.type.test.d.ts.map +1 -0
  105. package/lib/test/bulkPulling/stmt.type.test.js +273 -0
  106. package/lib/test/bulkPulling/tmq.test.d.ts +2 -0
  107. package/lib/test/bulkPulling/tmq.test.d.ts.map +1 -0
  108. package/lib/test/bulkPulling/tmq.test.js +177 -0
  109. package/lib/test/bulkPulling/wsConnectPool.test.d.ts +2 -0
  110. package/lib/test/bulkPulling/wsConnectPool.test.d.ts.map +1 -0
  111. package/lib/test/bulkPulling/wsConnectPool.test.js +129 -0
  112. package/lib/test/utils.d.ts +18 -0
  113. package/lib/test/utils.d.ts.map +1 -0
  114. package/lib/test/utils.js +318 -0
  115. package/package.json +27 -14
  116. package/readme.md +302 -0
  117. package/README.md +0 -59
  118. package/dist/browser/index.js +0 -778
  119. package/dist/main/index.js +0 -711
  120. package/dist/main/index.js.map +0 -1
  121. package/dist/module/index.mjs +0 -704
  122. package/dist/module/index.mjs.map +0 -1
  123. package/dist/types.d.ts +0 -103
  124. package/dist/types.d.ts.map +0 -1
  125. package/example/basicUsageAsync.ts +0 -48
  126. package/example/basicUsagePrimse.ts +0 -43
  127. package/example/cloudUsage.ts +0 -55
  128. package/example/continousConnectAndVersion.ts +0 -16
  129. package/example/test.mjs +0 -51
  130. package/index.ts +0 -7
  131. package/jest.config.js +0 -8
  132. package/src/taosResult.ts +0 -269
  133. package/src/tdengineWebsocket.ts +0 -39
  134. package/src/wsClient.ts +0 -196
  135. package/src/wsError.ts +0 -5
  136. package/src/wsQuery.ts +0 -30
  137. package/src/wsQueryInterface.ts +0 -212
  138. package/src/wsQueryResponse.ts +0 -112
  139. package/tdengine-websocket-3.0.0.tgz +0 -0
  140. package/test/bulkPulling/connect.test.ts +0 -27
  141. package/test/bulkPulling/queryTables.test.ts +0 -274
  142. package/test/bulkPulling/version.test.ts +0 -19
  143. package/test/utils.ts +0 -235
  144. package/tsconfig.json +0 -101
package/src/taosResult.ts DELETED
@@ -1,269 +0,0 @@
1
- import { WSFetchBlockResponse, WSFetchResponse, WSQueryResponse } from "./wsQueryResponse";
2
- import { ColumnsBlockType, TDengineTypeCode, TDengineTypeName } from './constant'
3
- import { TaosResultError, WebSocketQueryInterFaceError } from "./wsError";
4
- import { AppendRune } from "./ut8Helper"
5
-
6
- export class TaosResult {
7
- meta: Array<ResponseMeta> | null;
8
- data: Array<Array<any>> | null;
9
- precision: number = 0;
10
- affectRows: number = 0;
11
- /** unit nano seconds */
12
- timing: bigint;
13
- constructor(queryResponse: WSQueryResponse) {
14
- if (queryResponse.is_update == true) {
15
- this.meta = null
16
- this.data = null
17
- } else {
18
- if (queryResponse.fields_count && queryResponse.fields_names && queryResponse.fields_types && queryResponse.fields_lengths) {
19
- let _meta = [];
20
- for (let i = 0; i < queryResponse.fields_count; i++) {
21
- _meta.push({
22
- name: queryResponse.fields_names[i],
23
- type: queryResponse.fields_types[i],
24
- length: queryResponse.fields_lengths[i]
25
- })
26
- }
27
- this.meta = _meta;
28
- } else {
29
- throw new TaosResultError(`fields_count,fields_names,fields_types,fields_lengths of the update query response should be null`)
30
- }
31
- this.data = [];
32
- }
33
-
34
- this.affectRows = queryResponse.affected_rows
35
- this.timing = queryResponse.timing
36
- this.precision = queryResponse.precision
37
- // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof queryResponse.timing}`)
38
- }
39
-
40
- setRows(fetchResponse: WSFetchResponse) {
41
- this.affectRows += fetchResponse.rows;
42
- // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof fetchResponse.timing}`)
43
- this.timing = this.timing + fetchResponse.timing
44
- }
45
-
46
- setData(fetchBlockResponse: WSFetchBlockResponse) {
47
- if (this.data) {
48
- this.data.push([])
49
- } else {
50
- throw new TaosResultError(`update query response cannot set data`)
51
- }
52
-
53
- }
54
- /**
55
- * Mapping the WebSocket response type code to TDengine's type name.
56
- */
57
- getTDengineMeta(): Array<TDengineMeta> | null {
58
- if (this.meta) {
59
- let _ = new Array<TDengineMeta>()
60
- this.meta.forEach(m => {
61
- _.push({
62
- name: m.name,
63
- type: TDengineTypeName[m.type],
64
- length: m.length
65
- })
66
- })
67
- return _;
68
- } else {
69
- return null;
70
- }
71
- }
72
-
73
- }
74
-
75
- interface TDengineMeta {
76
- name: string,
77
- type: string,
78
- length: number,
79
- }
80
- interface ResponseMeta {
81
- name: string,
82
- type: number,
83
- length: number,
84
- }
85
-
86
- export function parseBlock(fetchResponse: WSFetchResponse, blocks: WSFetchBlockResponse, taosResult: TaosResult): TaosResult {
87
-
88
- if (taosResult.meta && taosResult.data) {
89
- let metaList = taosResult.meta;
90
-
91
- // console.log(typeof taosResult.timing)
92
- // console.log(typeof blocks.timing)
93
- // console.log(blocks.id)
94
-
95
- taosResult.timing = BigInt(taosResult.timing) + blocks.timing
96
-
97
- const INT_32_SIZE = 4;
98
-
99
- // Offset num of bytes from rawBlockBuffer.
100
- let bufferOffset = (4 * 5) + 8 + (4 + 1) * metaList.length
101
- let colLengthBlockSize = INT_32_SIZE * metaList.length
102
- // console.log("===colLengthBlockSize:" + colLengthBlockSize)
103
-
104
- let bitMapSize = (fetchResponse.rows + (1 << 3) - 1) >> 3
105
-
106
- // whole raw block ArrayBuffer
107
- let dataBuffer = blocks.data.slice(bufferOffset);
108
-
109
- // record the head of column in block
110
- let colBlockHead = 0;
111
- for (let i = 0; i < fetchResponse.rows; i++) {
112
- let row = [];
113
- // point to the head of the column in the block
114
- colBlockHead = 0 + colLengthBlockSize;
115
- // point to the head of columns's data in the block (include bitMap and offsetArray)
116
- let colDataHead = colBlockHead;
117
- // traverse row after row.
118
- for (let j = 0; j < metaList.length; j++) {
119
-
120
- let isVarType = _isVarTye(metaList[j])
121
- // console.log("== dataBuffer Length:" + dataBuffer.byteLength)
122
- // console.log("== loop i:" + i + "J=" + j + "col:" + metaList[j].name + "type:" + metaList[j].type)
123
- // console.log("== loop isVarType:" + isVarType);
124
- if (isVarType == ColumnsBlockType.SOLID) {
125
-
126
- colDataHead = colBlockHead + bitMapSize + metaList[j].length * i
127
-
128
- let byteArrayIndex = i >> 3;
129
- let bitwiseOffset = 7 - (i & 7)
130
- let bitMapArr = dataBuffer.slice(colBlockHead, colBlockHead + bitMapSize)
131
- // console.log("==i:" + i + "byteArrayIndex=" + byteArrayIndex)
132
- // console.log("== loop colblockhead:" + colBlockHead)
133
- // console.log("== loop bitmap:" + bitMapSize)
134
- // console.log("== loop bitMap length=" + bitMapArr.byteLength)
135
- // console.log("==loop bitMap bitwiseoffset:" + bitwiseOffset + "byteArrayIndex:" + byteArrayIndex)
136
- let bitFlag = ((new DataView(bitMapArr).getUint8(byteArrayIndex)) & (1 << bitwiseOffset)) >> bitwiseOffset
137
-
138
- if (bitFlag == 1) {
139
- row.push("NULL")
140
- } else {
141
- row.push(readSolidData(dataBuffer, colDataHead, metaList[j]))
142
- }
143
- // console.log("=====(new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0))=" + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true)));
144
- colBlockHead = colBlockHead + bitMapSize + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true))
145
-
146
- } else {
147
- // if null check
148
- let varOffset = new DataView(dataBuffer, colBlockHead + (INT_32_SIZE * i), INT_32_SIZE).getInt32(0, true)
149
- // console.log("== var type offset:" + varOffset)
150
- if (varOffset == -1) {
151
- row.push("NULL")
152
- colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))
153
- } else {
154
- colDataHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + varOffset
155
- let dataLength = (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))
156
- // console.log("== loop var type length:" + dataLength)
157
- if (isVarType == ColumnsBlockType.VARCHAR) {
158
-
159
- row.push(readVarchar(dataBuffer, colDataHead + 2, dataLength))
160
-
161
- } else {
162
- row.push(readNchar(dataBuffer, colDataHead + 2, dataLength))
163
- }
164
- colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))
165
- }
166
- }
167
- }
168
- taosResult.data.push(row);
169
- }
170
- return taosResult;
171
- } else {
172
- throw new TaosResultError("cannot fetch block for an update query.")
173
- }
174
-
175
- }
176
-
177
- function _isVarTye(meta: ResponseMeta): Number {
178
- switch (meta.type) {
179
- case TDengineTypeCode['NCHAR']: {
180
- return ColumnsBlockType['NCHAR']
181
- }
182
- case TDengineTypeCode['VARCHAR']: {
183
- return ColumnsBlockType['VARCHAR']
184
- }
185
- case TDengineTypeCode['BINARY']: {
186
- return ColumnsBlockType['VARCHAR']
187
- }
188
- case TDengineTypeCode['JSON']: {
189
- return ColumnsBlockType['VARCHAR']
190
- }
191
- default: {
192
- return ColumnsBlockType['SOLID']
193
- }
194
- }
195
- }
196
-
197
- function readSolidData(dataBuffer: ArrayBuffer, colDataHead: number, meta: ResponseMeta): Number | Boolean | BigInt {
198
-
199
- switch (meta.type) {
200
- case TDengineTypeCode['BOOL']: {
201
- return (Boolean)(new DataView(dataBuffer, colDataHead, 1).getInt8(0))
202
- }
203
- case TDengineTypeCode['TINYINT']: {
204
- return (new DataView(dataBuffer, colDataHead, 1).getInt8(0))
205
- }
206
- case TDengineTypeCode['SMALLINT']: {
207
- return (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))
208
- }
209
- case TDengineTypeCode['INT']: {
210
- return (new DataView(dataBuffer, colDataHead, 4).getInt32(0, true))
211
- }
212
- case TDengineTypeCode['BIGINT']: {
213
- return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))
214
- }
215
- case TDengineTypeCode['TINYINT UNSIGNED']: {
216
- return (new DataView(dataBuffer, colDataHead, 1).getUint8(0))
217
- }
218
- case TDengineTypeCode['SMALLINT UNSIGNED']: {
219
- return (new DataView(dataBuffer, colDataHead, 2).getUint16(0, true))
220
- }
221
- case TDengineTypeCode['INT UNSIGNED']: {
222
- return (new DataView(dataBuffer, colDataHead, 4).getUint32(0, true))
223
- }
224
- case TDengineTypeCode['BIGINT UNSIGNED']: {
225
- return (new DataView(dataBuffer, colDataHead, 8).getBigUint64(0, true))
226
- }
227
- case TDengineTypeCode['FLOAT']: {
228
- return (parseFloat(new DataView(dataBuffer, colDataHead, 4).getFloat32(0, true).toFixed(5)) )
229
- }
230
- case TDengineTypeCode['DOUBLE']: {
231
- return (parseFloat(new DataView(dataBuffer, colDataHead, 8).getFloat64(0, true).toFixed(15)))
232
- }
233
- case TDengineTypeCode['TIMESTAMP']: {
234
- return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))
235
- // could change
236
- }
237
- default: {
238
- throw new WebSocketQueryInterFaceError(`unspported type ${meta.type} for column ${meta.name}`)
239
- }
240
- }
241
- }
242
-
243
-
244
- function readVarchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {
245
- let data = "";
246
- data += new TextDecoder().decode(dataBuffer.slice(colDataHead, colDataHead + length))
247
- return data;
248
- }
249
-
250
- function readNchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {
251
- let decoder = new TextDecoder();
252
- let data = "";
253
- let buff: ArrayBuffer = dataBuffer.slice(colDataHead, colDataHead + length);
254
- for (let i = 0; i < length / 4; i++) {
255
- // console.log("== readNchar data:" + new DataView(buff, i * 4, 4).getUint32(0, true))
256
- data += AppendRune(new DataView(buff, i * 4, 4).getUint32(0, true))
257
-
258
- }
259
- return data;
260
- }
261
-
262
-
263
- function iteratorBuff(arr: ArrayBuffer) {
264
- let buf = Buffer.from(arr);
265
- for (const value of buf) {
266
- console.log(value.toString())
267
- }
268
-
269
- }
@@ -1,39 +0,0 @@
1
-
2
- import { execute } from './wsQuery'
3
- import { TaosResult } from './taosResult'
4
- import { WSInterface } from './wsQueryInterface'
5
- import { WSConnResponse } from './wsQueryResponse'
6
-
7
-
8
- export class TDengineWebSocket {
9
- _wsInterface: WSInterface
10
- _data: Array<any> = []
11
- _meta: Array<any> = []
12
-
13
- constructor(url: string) {
14
- this._wsInterface = new WSInterface(new URL(url))
15
- }
16
-
17
- connect(database?:string):Promise<WSConnResponse> {
18
- return this._wsInterface.connect(database)
19
- }
20
-
21
- state(){
22
- return this._wsInterface.getState();
23
- }
24
-
25
- /**
26
- * return client version.
27
- */
28
- version(): Promise<string> {
29
- return this._wsInterface.version()
30
- }
31
-
32
- query(sql:string):Promise<TaosResult>{
33
- return execute(sql,this._wsInterface)
34
- }
35
- close() {
36
- this._wsInterface.close();
37
- }
38
-
39
- }
package/src/wsClient.ts DELETED
@@ -1,196 +0,0 @@
1
- import { ICloseEvent, IMessageEvent, w3cwebsocket } from "websocket";
2
- import { TDWebSocketClientError, WebSocketQueryError } from './wsError'
3
-
4
- interface MessageId {
5
- action: string,
6
- req_id: bigint,
7
- id?: bigint
8
- }
9
-
10
- interface MessageAction {
11
- reject: Function,
12
- resolve: Function,
13
- timer: ReturnType<typeof setTimeout>,
14
- }
15
-
16
- var _msgActionRegister: Map<MessageId, MessageAction> = new Map();
17
-
18
- export class TDWebSocketClient {
19
- private _wsConn: w3cwebsocket;
20
- _wsURL: URL;
21
- _timeout = 5000;
22
-
23
- // create ws
24
- constructor(url: URL) {
25
-
26
- // return w3bsocket3
27
- if (url) {
28
- this._wsURL = url;
29
- let origin = url.origin;
30
- let pathname = url.pathname;
31
- let search = url.search;
32
-
33
- this._wsConn = new w3cwebsocket(origin.concat(pathname).concat(search));
34
-
35
- // this._wsConn.onopen = this._onopen
36
-
37
- this._wsConn.onerror = function (err: Error) { throw err }
38
-
39
- this._wsConn.onclose = this._onclose
40
-
41
- this._wsConn.onmessage = this._onmessage
42
- this._wsConn._binaryType = "arraybuffer"
43
- } else {
44
- throw new WebSocketQueryError("websocket URL must be defined")
45
- }
46
-
47
-
48
- }
49
-
50
- Ready(): Promise<TDWebSocketClient> {
51
- return new Promise((resolve, reject) => {
52
- this._wsConn.onopen = () => {
53
- // console.log("websocket connection opened")
54
- resolve(this);
55
- }
56
- })
57
- }
58
-
59
- private _onclose(e: ICloseEvent) {
60
- return new Promise((resolve, reject) => {
61
- resolve("websocket connection closed")
62
- })
63
- }
64
-
65
-
66
- private _onmessage(event: any) {
67
- let data = event.data;
68
- // console.log("[wsClient._onMessage()._msgActionRegister]\n")
69
- // console.log(_msgActionRegister)
70
-
71
- // console.log("===="+ (Object.prototype.toString.call(data)))
72
-
73
- if (Object.prototype.toString.call(data) === '[object ArrayBuffer]') {
74
- let id = new DataView(data, 8, 8).getBigUint64(0, true)
75
- // console.log("fetch block response id:" + id)
76
-
77
- let action: MessageAction | any = undefined;
78
-
79
- _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {
80
- if (k.id == id) {
81
- action = v
82
- _msgActionRegister.delete(k)
83
- }
84
- })
85
- if (action) {
86
- action.resolve(data);
87
- }
88
- else {
89
- _msgActionRegister.clear()
90
- throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);
91
- }
92
-
93
- } else if (Object.prototype.toString.call(data) === '[object Blob]') {
94
- data.arrayBuffer().then((d: ArrayBuffer) => {
95
- let id = new DataView(d, 8, 8).getBigUint64(0, true)
96
- // console.log("fetch block response id:" + id)
97
-
98
- let action: MessageAction | any = undefined;
99
-
100
- _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {
101
- if (k.id == id) {
102
- action = v
103
- _msgActionRegister.delete(k)
104
- }
105
- })
106
- if (action) {
107
- action.resolve(d);
108
- }
109
- else {
110
- _msgActionRegister.clear()
111
- throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);
112
- }
113
- })
114
-
115
- } else if (Object.prototype.toString.call(data) === '[object String]') {
116
- let msg = JSON.parse(data)
117
- // console.log("[_onmessage.stringType]==>:" + data);
118
- let action: MessageAction | any = undefined;
119
-
120
- _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {
121
- if (k.action == 'version') {
122
- action = v
123
- _msgActionRegister.delete(k)
124
- }
125
- if (k.req_id == msg.req_id && k.action == msg.action) {
126
- action = v
127
- _msgActionRegister.delete(k)
128
- }
129
- })
130
- if (action) {
131
- action.resolve(msg);
132
- }
133
- else {
134
- _msgActionRegister.clear()
135
- throw new TDWebSocketClientError(`no callback registered for ${msg.action} with req_id=${msg.req_id}`);
136
- }
137
- } else {
138
- _msgActionRegister.clear()
139
- throw new TDWebSocketClientError(`invalid message type ${Object.prototype.toString.call(data)}`)
140
- }
141
- }
142
-
143
- close() {
144
- if (this._wsConn) {
145
- _msgActionRegister.clear();
146
- this._wsConn.close();
147
- } else {
148
- throw new TDWebSocketClientError("WebSocket connection is undefined.")
149
- }
150
- }
151
-
152
- readyState(): number {
153
- return this._wsConn.readyState;
154
- }
155
-
156
- sendMsg(message: string, register: Boolean = true) {
157
- // console.log("[wsClient.sendMessage()]===>" + message)
158
- let msg = JSON.parse(message);
159
- // console.log(typeof msg.args.id)
160
- if (msg.args.id) {
161
- msg.args.id = BigInt(msg.args.id)
162
- }
163
- // console.log("[wsClient.sendMessage.msg]===>\n")
164
- // console.log(msg)
165
-
166
- return new Promise((resolve, reject) => {
167
- if (this._wsConn && this._wsConn.readyState > 0) {
168
- if (register) {
169
-
170
- this._registerCallback({ action: msg.action, req_id: msg.args.req_id, id: msg.args.id === undefined ? msg.args.id : BigInt(msg.args.id) }, resolve, reject)
171
- // console.log("[wsClient.sendMessage._msgActionRegister]===>\n")
172
- // console.log(_msgActionRegister)
173
- }
174
- this._wsConn.send(message)
175
- } else {
176
- reject(new WebSocketQueryError(`WebSocket connection is not ready,status :${this._wsConn?.readyState}`))
177
- }
178
- })
179
- }
180
-
181
- private _registerCallback(id: MessageId, res: (args: unknown) => void, rej: (reason: any) => void) {
182
- // console.log("register messageId:"+ JSON.stringify(id))
183
- _msgActionRegister.set(id,
184
- {
185
- reject: rej,
186
- resolve: res,
187
- timer: setTimeout(() => rej(new WebSocketQueryError(`action:${id.action},req_id:${id.req_id} timeout with ${this._timeout} milliseconds`)), this._timeout)
188
- })
189
- }
190
-
191
- configTimeout(ms: number) {
192
- this._timeout = ms;
193
- }
194
-
195
- }
196
-
package/src/wsError.ts DELETED
@@ -1,5 +0,0 @@
1
- export class TDWebSocketClientError extends Error { }
2
- export class WebSocketQueryError extends TDWebSocketClientError { }
3
- export class WebSocketInterfaceError extends TDWebSocketClientError {}
4
- export class WebSocketQueryInterFaceError extends WebSocketInterfaceError{}
5
- export class TaosResultError extends Error{};
package/src/wsQuery.ts DELETED
@@ -1,30 +0,0 @@
1
- import { TaosResult } from './taosResult';
2
- import { WSInterface } from './wsQueryInterface'
3
- export async function execute(sql: string, wsInterface: WSInterface): Promise<TaosResult> {
4
- let taosResult;
5
- let wsQueryResponse = await wsInterface.query(sql);
6
- try {
7
- taosResult = new TaosResult(wsQueryResponse);
8
- if (wsQueryResponse.is_update == true) {
9
- return taosResult;
10
- } else {
11
- while (true) {
12
- let wsFetchResponse = await wsInterface.fetch(wsQueryResponse)
13
- // console.log("[wsQuery.execute.wsFetchResponse]==>\n")
14
- // console.log(wsFetchResponse)
15
- // console.log(typeof BigInt(8))
16
- // console.log(typeof wsFetchResponse.timing)
17
- if (wsFetchResponse.completed == true) {
18
- break;
19
- } else {
20
- taosResult.setRows(wsFetchResponse)
21
- let tmp: TaosResult = await wsInterface.fetchBlock(wsFetchResponse, taosResult)
22
- taosResult = tmp;
23
- }
24
- }
25
- return taosResult;
26
- }
27
- } finally {
28
- wsInterface.freeResult(wsQueryResponse)
29
- }
30
- }