wechaty-puppet-matrix 0.0.23 → 0.0.24

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 (33) hide show
  1. package/dist/cjs/src/matrix/events/event-friendship.d.ts.map +1 -1
  2. package/dist/cjs/src/matrix/events/event-message.d.ts.map +1 -1
  3. package/dist/cjs/src/matrix/events/event-room-invite.d.ts.map +1 -1
  4. package/dist/cjs/src/matrix/events/event-room-join.d.ts.map +1 -1
  5. package/dist/cjs/src/matrix/events/event-room-leave.d.ts.map +1 -1
  6. package/dist/cjs/src/matrix/events/event-room-topic.d.ts.map +1 -1
  7. package/dist/cjs/src/matrix/service/request.d.ts +3 -0
  8. package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
  9. package/dist/cjs/src/matrix/service/request.js +91 -6
  10. package/dist/cjs/src/matrix/utils/string.d.ts.map +1 -1
  11. package/dist/cjs/src/puppet-matrix.d.ts +2 -0
  12. package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
  13. package/dist/cjs/src/puppet-matrix.js +99 -5
  14. package/dist/cjs/src/utils/normalize-filebox.d.ts.map +1 -1
  15. package/dist/cjs/src/utils/sns-xml-generator.d.ts.map +1 -1
  16. package/dist/esm/src/matrix/events/event-friendship.d.ts.map +1 -1
  17. package/dist/esm/src/matrix/events/event-message.d.ts.map +1 -1
  18. package/dist/esm/src/matrix/events/event-room-invite.d.ts.map +1 -1
  19. package/dist/esm/src/matrix/events/event-room-join.d.ts.map +1 -1
  20. package/dist/esm/src/matrix/events/event-room-leave.d.ts.map +1 -1
  21. package/dist/esm/src/matrix/events/event-room-topic.d.ts.map +1 -1
  22. package/dist/esm/src/matrix/service/request.d.ts +3 -0
  23. package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
  24. package/dist/esm/src/matrix/service/request.js +91 -6
  25. package/dist/esm/src/matrix/utils/string.d.ts.map +1 -1
  26. package/dist/esm/src/puppet-matrix.d.ts +2 -0
  27. package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
  28. package/dist/esm/src/puppet-matrix.js +99 -5
  29. package/dist/esm/src/utils/normalize-filebox.d.ts.map +1 -1
  30. package/dist/esm/src/utils/sns-xml-generator.d.ts.map +1 -1
  31. package/package.json +2 -1
  32. package/src/matrix/service/request.ts +112 -6
  33. package/src/puppet-matrix.ts +161 -68
@@ -10,6 +10,7 @@ import imageSize from 'image-size';
10
10
  import fs from 'fs-extra';
11
11
  import os from 'os';
12
12
  import path from 'path';
13
+ import mqtt from 'mqtt';
13
14
  const PRE = '[PuppetMatrix]';
14
15
  export var NotifyTypeEnum;
15
16
  (function (NotifyTypeEnum) {
@@ -360,7 +361,66 @@ class Client extends EventEmitter {
360
361
  log.error('socket had already been opened!');
361
362
  return;
362
363
  }
363
- await this.createWebSocket();
364
+ await this.createMqttConnection();
365
+ }
366
+ async createMqttConnection() {
367
+ if (!this.tokenInfo) {
368
+ log.error('Token info not available');
369
+ return;
370
+ }
371
+ function randomRange(min, max) {
372
+ return Math.floor(Math.random() * (max - min)) + min;
373
+ }
374
+ const client = mqtt.connect(this.tokenInfo.mqServer, {
375
+ username: this.tokenInfo.mqUser,
376
+ password: this.tokenInfo.mqPsd,
377
+ keepalive: 60,
378
+ reconnectPeriod: 1000,
379
+ connectTimeout: 30 * 1000,
380
+ clientId: this.tokenInfo.guid + randomRange(1, 10000),
381
+ });
382
+ client.on('connect', () => {
383
+ this.connectionStatus.status = 'connected';
384
+ this.reconnectAttempts = 0;
385
+ log.info('MQTT connection opened');
386
+ this.socket = client;
387
+ client.subscribe(`aibotk/msg/${this.tokenInfo.guid}`, (err) => {
388
+ if (err) {
389
+ log.error('Failed to subscribe to topic', err);
390
+ }
391
+ else {
392
+ log.info('Subscribed to topic');
393
+ }
394
+ });
395
+ });
396
+ client.on('error', (error) => {
397
+ log.warn('MQTT connection error', error);
398
+ });
399
+ client.on('close', () => {
400
+ this.connectionStatus.status = 'disconnected';
401
+ log.warn('MQTT connection closed');
402
+ this.socket = null;
403
+ void this.reconnect();
404
+ });
405
+ client.on('message', (topic, message) => {
406
+ this.resetHeartbeatTimeout();
407
+ log.verbose(PRE, 'Received message on topic %s: %s', topic, message.toString());
408
+ if (message.toString() === 'ping' || message.toString() === 'pong') {
409
+ log.verbose('Received heartbeat');
410
+ return;
411
+ }
412
+ try {
413
+ const payload = JSON.parse(message.toString());
414
+ log.info('Received payload', JSON.stringify(payload));
415
+ void this.eventParse(payload);
416
+ }
417
+ catch (error) {
418
+ log.warn(PRE, 'Error parsing message: %s', error);
419
+ this.emit('error', error.message);
420
+ }
421
+ });
422
+ this.socket = client;
423
+ this.startHeartbeat();
364
424
  }
365
425
  async createWebSocket() {
366
426
  if (!this.tokenInfo) {
@@ -424,16 +484,15 @@ class Client extends EventEmitter {
424
484
  }
425
485
  startHeartbeat() {
426
486
  this.stopHeartbeat();
427
- this.socket?.send('ping');
428
487
  this.heartbeatTimer = setInterval(() => {
429
- if (this.socket?.readyState === WebSocket.OPEN) {
488
+ if (this.socket?.connected) {
430
489
  try {
431
- this.socket.send('ping');
490
+ this.socket.publish(`aibotk/msg/${this.tokenInfo.guid}`, 'pong');
432
491
  this.setHeartbeatTimeout();
433
492
  }
434
493
  catch (error) {
435
494
  log.error('Failed to send heartbeat:', error);
436
- void this.handleWebSocketClose(1006, 'Heartbeat failed');
495
+ void this.handleMqttClose();
437
496
  }
438
497
  }
439
498
  }, this.HEARTBEAT_INTERVAL);
@@ -454,7 +513,7 @@ class Client extends EventEmitter {
454
513
  }
455
514
  this.heartbeatTimeoutTimer = setTimeout(() => {
456
515
  log.warn('Heartbeat timeout, reconnecting...');
457
- void this.handleWebSocketClose(1006, 'Heartbeat timeout');
516
+ void this.handleMqttClose();
458
517
  }, this.HEARTBEAT_TIMEOUT);
459
518
  }
460
519
  resetHeartbeatTimeout() {
@@ -463,6 +522,32 @@ class Client extends EventEmitter {
463
522
  this.heartbeatTimeoutTimer = undefined;
464
523
  }
465
524
  }
525
+ async handleMqttClose() {
526
+ this.connectionStatus.status = 'disconnected';
527
+ log.warn('MQTT connection closed');
528
+ if (this.socket) {
529
+ this.socket.end();
530
+ this.socket = null;
531
+ }
532
+ await this.reconnectMqtt();
533
+ }
534
+ async reconnectMqtt() {
535
+ if (this.reconnectAttempts >= this.MAX_RECONNECT_ATTEMPTS) {
536
+ log.error('Max reconnect attempts reached. Stopping reconnection.');
537
+ return;
538
+ }
539
+ const delay = Math.min(this.INITIAL_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts), this.MAX_RECONNECT_DELAY);
540
+ this.reconnectAttempts++;
541
+ log.info(`Reconnecting in ${delay}ms (Attempt ${this.reconnectAttempts})`);
542
+ setTimeout(() => {
543
+ try {
544
+ void this.createMqttConnection();
545
+ }
546
+ catch (error) {
547
+ log.warn('Reconnection failed', error);
548
+ }
549
+ }, delay);
550
+ }
466
551
  async handleWebSocketClose(code, reason) {
467
552
  this.connectionStatus.status = 'disconnected';
468
553
  log.warn(`WebSocket closed: Code ${code}, Reason ${reason}`);
@@ -1 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/utils/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,MAAO,MAAM,WAExC,CAAA"}
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/utils/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,GAAG,MAAM,WAExC,CAAA"}
@@ -21,6 +21,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
21
21
  private _verifyInterval?;
22
22
  private _qrcodeStatuasInterval?;
23
23
  private _getQrcodeTimes;
24
+ private _roomJoinTemp;
24
25
  static readonly VERSION: string;
25
26
  constructor(options?: PuppetEngineOptions);
26
27
  get client(): Client | undefined;
@@ -109,6 +110,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
109
110
  tap(postId: string, type: PUPPET.types.Tap, tap?: boolean): Promise<boolean | void>;
110
111
  syncRoom(): Promise<void>;
111
112
  private _getRoomMemberList;
113
+ private _updateRoomMemberMap;
112
114
  private _updateContactCache;
113
115
  private _updateRoomMember;
114
116
  _updateRoom(roomId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,13 @@ class PuppetMatrix extends PUPPET.Puppet {
38
38
  _verifyInterval;
39
39
  _qrcodeStatuasInterval;
40
40
  _getQrcodeTimes;
41
+ _roomJoinTemp = {};
41
42
  static VERSION = VERSION;
42
43
  constructor(options = {}) {
43
44
  super(options);
44
45
  this.options = options;
45
46
  this.options.engine = Client;
47
+ this._roomJoinTemp = {};
46
48
  this._getQrcodeTimes = 0;
47
49
  this.options.maxGetQrcoderTimes = 20;
48
50
  if (!this.options.token) {
@@ -114,6 +116,18 @@ class PuppetMatrix extends PUPPET.Puppet {
114
116
  this.emit('room-leave', payload);
115
117
  }));
116
118
  this._client.on('room-join', this.wrapAsync(async ({ roomId, inviterId, joinIds, joinUsers }) => {
119
+ for (const joinId of joinIds) {
120
+ if (this._roomJoinTemp[`${roomId}-${joinId}`]) {
121
+ joinIds = joinIds.filter(id => id !== joinId);
122
+ }
123
+ else {
124
+ this._roomJoinTemp[`${roomId}-${joinId}`] = joinId;
125
+ const temTimer = setTimeout(() => {
126
+ delete this._roomJoinTemp[`${roomId}-${joinId}`];
127
+ clearTimeout(temTimer);
128
+ }, 50000);
129
+ }
130
+ }
117
131
  const payload = {
118
132
  inviteeIdList: joinIds,
119
133
  inviterId,
@@ -128,7 +142,9 @@ class PuppetMatrix extends PUPPET.Puppet {
128
142
  await this._cacheMgr?.setRoom(roomId, roomInfo);
129
143
  }
130
144
  }
131
- this.emit('room-join', payload);
145
+ if (joinIds.length) {
146
+ this.emit('room-join', payload);
147
+ }
132
148
  }));
133
149
  this._client.on('logout', this.wrapAsync(async (message) => {
134
150
  log.info(PRE, 'Logout event: %s', message);
@@ -894,8 +910,15 @@ class PuppetMatrix extends PUPPET.Puppet {
894
910
  if (roomMemberMap[contactId]) {
895
911
  return roomMemberMap[contactId];
896
912
  }
897
- const newMap = await this._getRoomMemberList(roomId, true);
898
- return newMap[contactId];
913
+ const memberInfo = await this._updateRoomMemberMap(roomId, contactId);
914
+ const ret = await this._cacheMgr.getRoomMember(roomId);
915
+ if (ret) {
916
+ const newMap = await this._getRoomMemberList(roomId, true);
917
+ return newMap[contactId] || memberInfo;
918
+ }
919
+ else {
920
+ return memberInfo;
921
+ }
899
922
  }
900
923
  async roomMemberRawPayloadParser(rawPayload) {
901
924
  return engineRoomMemberToWechaty(rawPayload);
@@ -1032,6 +1055,60 @@ class PuppetMatrix extends PUPPET.Puppet {
1032
1055
  }
1033
1056
  return ret;
1034
1057
  }
1058
+ async _updateRoomMemberMap(roomId, contactId) {
1059
+ if (!this._cacheMgr) {
1060
+ return {
1061
+ avatar: '',
1062
+ city: '',
1063
+ country: '',
1064
+ name: '',
1065
+ alias: '',
1066
+ province: '',
1067
+ wxid: contactId,
1068
+ sex: 0,
1069
+ wxNum: '',
1070
+ };
1071
+ }
1072
+ const ret = await this._cacheMgr.getRoomMember(roomId);
1073
+ if (ret) {
1074
+ const existContact = await this._cacheMgr.getContact(contactId);
1075
+ if (existContact) {
1076
+ ret[contactId] = existContact;
1077
+ await this._updateRoomMember(roomId, ret);
1078
+ return existContact;
1079
+ }
1080
+ else {
1081
+ const contact = await this._client?.searchContact([contactId]);
1082
+ if (!Array.isArray(contact)) {
1083
+ ret[contactId] = contact;
1084
+ await this._updateRoomMember(roomId, ret);
1085
+ return contact;
1086
+ }
1087
+ return {
1088
+ avatar: '',
1089
+ city: '',
1090
+ country: '',
1091
+ name: '',
1092
+ alias: '',
1093
+ province: '',
1094
+ wxid: contactId,
1095
+ sex: 0,
1096
+ wxNum: '',
1097
+ };
1098
+ }
1099
+ }
1100
+ return {
1101
+ avatar: '',
1102
+ city: '',
1103
+ country: '',
1104
+ name: '',
1105
+ alias: '',
1106
+ province: '',
1107
+ wxid: contactId,
1108
+ sex: 0,
1109
+ wxNum: '',
1110
+ };
1111
+ }
1035
1112
  async _updateContactCache(contact) {
1036
1113
  if (!contact.wxid) {
1037
1114
  log.warn(PRE, `wxid is required for contact: ${JSON.stringify(contact)}`);
@@ -1042,7 +1119,7 @@ class PuppetMatrix extends PUPPET.Puppet {
1042
1119
  const roomId = contact.wxid;
1043
1120
  let finalPayload = contact;
1044
1121
  if (oldRoomPayload) {
1045
- finalPayload = Object.assign(oldRoomPayload, contact);
1122
+ finalPayload = { ...oldRoomPayload, ...contact };
1046
1123
  }
1047
1124
  await this._cacheMgr.setRoom(roomId, finalPayload);
1048
1125
  if (!finalPayload.chatroommemberList || finalPayload.chatroommemberList.length === 0) {
@@ -1053,7 +1130,7 @@ class PuppetMatrix extends PUPPET.Puppet {
1053
1130
  else {
1054
1131
  const oldContactPaylod = await this._cacheMgr.getContact(contact.wxid);
1055
1132
  if (oldContactPaylod) {
1056
- await this._cacheMgr.setContact(contact.wxid, Object.assign(oldContactPaylod, contact));
1133
+ await this._cacheMgr.setContact(contact.wxid, { ...oldContactPaylod, ...contact });
1057
1134
  }
1058
1135
  else {
1059
1136
  await this._cacheMgr.setContact(contact.wxid, contact);
@@ -1133,12 +1210,29 @@ class PuppetMatrix extends PUPPET.Puppet {
1133
1210
  break;
1134
1211
  }
1135
1212
  case EventType.RoomJoin: {
1213
+ const roomJoin = event.payload;
1214
+ await this._updateRoomMember(roomJoin.roomId);
1215
+ for (const joinId of roomJoin.inviteeIdList) {
1216
+ if (this._roomJoinTemp[`${roomJoin.roomId}-${joinId}`]) {
1217
+ roomJoin.inviteeIdList = roomJoin.inviteeIdList.filter(id => id !== joinId);
1218
+ }
1219
+ else {
1220
+ this._roomJoinTemp[`${roomJoin.roomId}-${joinId}`] = joinId;
1221
+ const temTimer = setTimeout(() => {
1222
+ delete this._roomJoinTemp[`${roomJoin.roomId}-${joinId}`];
1223
+ clearTimeout(temTimer);
1224
+ }, 50000);
1225
+ }
1226
+ }
1227
+ this.emit('room-join', roomJoin);
1136
1228
  break;
1137
1229
  }
1138
1230
  case EventType.RoomLeave: {
1139
1231
  break;
1140
1232
  }
1141
1233
  case EventType.RoomTopic: {
1234
+ const roomTopic = event.payload;
1235
+ this.emit('room-topic', roomTopic);
1142
1236
  break;
1143
1237
  }
1144
1238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-filebox.d.ts","sourceRoot":"","sources":["../../../../src/utils/normalize-filebox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACR,MAA0B,UAAU,CAAA;AACrC,OAAO,EAEL,gBAAgB,EACjB,MAA0B,UAAU,CAAA;AA4BrC,QAAA,MAAM,cAAc,YAAa,gBAAgB,YA8BhD,CAAA;AAED,QAAA,MAAM,oBAAoB,gBAAiB,OAAO,OAAO,eAAqB,gBAAgB,wCAkB7F,CAAA;AAED,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,CAAA"}
1
+ {"version":3,"file":"normalize-filebox.d.ts","sourceRoot":"","sources":["../../../../src/utils/normalize-filebox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACR,MAA0B,UAAU,CAAA;AACrC,OAAO,EAEL,gBAAgB,EACjB,MAA0B,UAAU,CAAA;AA4BrC,QAAA,MAAM,cAAc,GAAI,SAAS,gBAAgB,YA8BhD,CAAA;AAED,QAAA,MAAM,oBAAoB,GAAI,aAAa,OAAO,OAAO,MAAY,SAAS,gBAAgB,wCAkB7F,CAAA;AAED,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sns-xml-generator.d.ts","sourceRoot":"","sources":["../../../../src/utils/sns-xml-generator.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,aAAa,SAAU,MAAM,WAAW,MAAM,KAAG,MAkD7D,CAAA;AAED,eAAO,MAAM,cAAc,SAAU,MAAM,WAAW,MAAM,SAAS,KAAK,KAAG,MAgD5E,CAAA;AAED,eAAO,MAAM,cAAc,SAAU,MAAM,eAAe,MAAM,aAAa,KAAK,EAAE,KAAG,MAkEtF,CAAA"}
1
+ {"version":3,"file":"sns-xml-generator.d.ts","sourceRoot":"","sources":["../../../../src/utils/sns-xml-generator.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,MAkD7D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,OAAO,KAAK,KAAG,MAgD5E,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,EAAE,WAAW,KAAK,EAAE,KAAG,MAkEtF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wechaty-puppet-matrix",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "description": "Puppet matrix for Wechaty",
5
5
  "type": "module",
6
6
  "typings": "./dist/esm/src/mod.d.ts",
@@ -77,6 +77,7 @@
77
77
  "fs-extra": "^10.1.0",
78
78
  "image-size": "^1.1.1",
79
79
  "lru-cache": "^6.0.0",
80
+ "mqtt": "^5.10.4",
80
81
  "node-cleanup": "^2.1.2",
81
82
  "wechaty-web-panel": "^1.6.76",
82
83
  "ws": "^8.18.0",
@@ -11,6 +11,7 @@ import imageSize from 'image-size'
11
11
  import fs from 'fs-extra'
12
12
  import os from 'os'
13
13
  import path from 'path'
14
+ import mqtt from 'mqtt'
14
15
  const PRE = '[PuppetMatrix]'
15
16
 
16
17
  /**
@@ -708,7 +709,78 @@ class Client extends EventEmitter {
708
709
  return
709
710
  }
710
711
 
711
- await this.createWebSocket()
712
+ await this.createMqttConnection()
713
+ }
714
+
715
+ async createMqttConnection (): Promise<void> {
716
+ if (!this.tokenInfo) {
717
+ log.error('Token info not available')
718
+ return
719
+ }
720
+
721
+ function randomRange (min: number, max: number) {
722
+ // min最小值,max最大值
723
+ return Math.floor(Math.random() * (max - min)) + min
724
+ }
725
+
726
+ const client = mqtt.connect(this.tokenInfo.mqServer, {
727
+ username: this.tokenInfo.mqUser,
728
+ password: this.tokenInfo.mqPsd,
729
+ keepalive: 60,
730
+ reconnectPeriod: 1000,
731
+ connectTimeout: 30 * 1000,
732
+ clientId: this.tokenInfo.guid + randomRange(1, 10000),
733
+ })
734
+
735
+ client.on('connect', () => {
736
+ this.connectionStatus.status = 'connected'
737
+ this.reconnectAttempts = 0
738
+ log.info('MQTT connection opened')
739
+ this.socket = client
740
+
741
+ // 订阅主题
742
+ client.subscribe(`aibotk/msg/${this.tokenInfo.guid}`, (err) => {
743
+ if (err) {
744
+ log.error('Failed to subscribe to topic', err)
745
+ } else {
746
+ log.info('Subscribed to topic')
747
+ }
748
+ })
749
+ })
750
+
751
+ client.on('error', (error: any) => {
752
+ log.warn('MQTT connection error', error)
753
+ })
754
+
755
+ client.on('close', () => {
756
+ this.connectionStatus.status = 'disconnected'
757
+ log.warn('MQTT connection closed')
758
+ this.socket = null
759
+ void this.reconnect()
760
+ })
761
+
762
+ client.on('message', (topic, message) => {
763
+ this.resetHeartbeatTimeout() // 收到任何消息都重置心跳超时
764
+
765
+ log.verbose(PRE, 'Received message on topic %s: %s', topic, message.toString())
766
+ if (message.toString() === 'ping' || message.toString() === 'pong') {
767
+ log.verbose('Received heartbeat')
768
+ return
769
+ }
770
+
771
+ try {
772
+ const payload = JSON.parse(message.toString())
773
+ log.info('Received payload', JSON.stringify(payload))
774
+ void this.eventParse(payload)
775
+ } catch (error) {
776
+ log.warn(PRE, 'Error parsing message: %s', error)
777
+ // @ts-ignore
778
+ this.emit('error', (error as Error).message)
779
+ }
780
+ })
781
+
782
+ this.socket = client
783
+ this.startHeartbeat()
712
784
  }
713
785
 
714
786
  async createWebSocket (): Promise<void> {
@@ -792,15 +864,14 @@ class Client extends EventEmitter {
792
864
 
793
865
  private startHeartbeat (): void {
794
866
  this.stopHeartbeat() // 确保清理现有定时器
795
- this.socket?.send('ping')
796
867
  this.heartbeatTimer = setInterval(() => {
797
- if (this.socket?.readyState === WebSocket.OPEN) {
868
+ if (this.socket?.connected) {
798
869
  try {
799
- this.socket.send('ping')
870
+ this.socket.publish(`aibotk/msg/${this.tokenInfo.guid}`, 'pong')
800
871
  this.setHeartbeatTimeout()
801
872
  } catch (error) {
802
873
  log.error('Failed to send heartbeat:', error)
803
- void this.handleWebSocketClose(1006, 'Heartbeat failed')
874
+ void this.handleMqttClose()
804
875
  }
805
876
  }
806
877
  }, this.HEARTBEAT_INTERVAL)
@@ -826,7 +897,7 @@ class Client extends EventEmitter {
826
897
  }
827
898
  this.heartbeatTimeoutTimer = setTimeout(() => {
828
899
  log.warn('Heartbeat timeout, reconnecting...')
829
- void this.handleWebSocketClose(1006, 'Heartbeat timeout')
900
+ void this.handleMqttClose()
830
901
  }, this.HEARTBEAT_TIMEOUT)
831
902
  }
832
903
 
@@ -838,6 +909,41 @@ class Client extends EventEmitter {
838
909
  }
839
910
  }
840
911
 
912
+ private async handleMqttClose () {
913
+ this.connectionStatus.status = 'disconnected'
914
+ log.warn('MQTT connection closed')
915
+ if (this.socket) {
916
+ this.socket.end()
917
+ this.socket = null
918
+ }
919
+
920
+ // 触发重连
921
+ await this.reconnectMqtt()
922
+ }
923
+
924
+ private async reconnectMqtt (): Promise<void> {
925
+ if (this.reconnectAttempts >= this.MAX_RECONNECT_ATTEMPTS) {
926
+ log.error('Max reconnect attempts reached. Stopping reconnection.')
927
+ return
928
+ }
929
+
930
+ // 指数退避重连策略
931
+ const delay = Math.min(
932
+ this.INITIAL_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts),
933
+ this.MAX_RECONNECT_DELAY,
934
+ )
935
+
936
+ this.reconnectAttempts++
937
+ log.info(`Reconnecting in ${delay}ms (Attempt ${this.reconnectAttempts})`)
938
+ setTimeout(() => {
939
+ try {
940
+ void this.createMqttConnection()
941
+ } catch (error) {
942
+ log.warn('Reconnection failed', error)
943
+ }
944
+ }, delay)
945
+ }
946
+
841
947
  private async handleWebSocketClose (code?: number, reason?: Buffer | String) {
842
948
  this.connectionStatus.status = 'disconnected'
843
949
  log.warn(`WebSocket closed: Code ${code}, Reason ${reason}`)