connectController.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { BasicController } from "./basicController.js";
  2. import { RoomController } from "./room/index.js";
  3. import { SyncDeviceController } from "./syncDeviceController.js";
  4. import { FROMTYPE } from "../enum/index.js";
  5. import { updateRoomUser, isUserInRoom } from "../service/userService.js";
  6. export class ConnectController extends BasicController {
  7. constructor(...args) {
  8. super(...args);
  9. this.roomController = new RoomController(this.io, this.socket, this.redisCli);
  10. this.syncDeviceController = new SyncDeviceController(this.io, this.socket, this.redisCli, this.roomController);
  11. }
  12. async run() {
  13. await this.roomController.run();
  14. await this.syncDeviceController.run();
  15. this.redisSubClient.subscribe("dismissRoom", (message) => {
  16. // chat:room:dismiss:c-fCTZyvc:E71464
  17. this.logger.info("subscribe-订阅", JSON.stringify(message));
  18. const disMissId = message.split("chat:room:dismiss:")[1];
  19. if (disMissId) {
  20. const disMissRoomId = `room:${disMissId}`;
  21. const userId = this.roomController.userId;
  22. const roomId = this.roomController.roomId;
  23. const user = this.roomController.user;
  24. const sessionId = this.roomController.sessionId;
  25. const roomConfigId = this.roomController.roomConfigId;
  26. this.logger.info("subscribe-订阅", disMissRoomId, userId, roomId, user);
  27. if (disMissRoomId === disMissRoomId) {
  28. this.roomController.roomAssistant.notifyRoomDismiss(roomId);
  29. this.roomController.roomAssistant.stopCall(roomId, userId, user);
  30. this.roomController.roomAssistant.destoryRoom(sessionId, roomConfigId);
  31. }
  32. }
  33. });
  34. this.socket.on("reconnect", () => {
  35. this.logger.info("重新连接");
  36. this.run();
  37. });
  38. this.socket.on("disconnect", async (reason) => {
  39. const res = String(reason).split(" ");
  40. console.log("disconnect-reason", res);
  41. // if (res.includes("close") || res.includes("disconnect")) {
  42. if ([FROMTYPE.MiniAPP].includes(Number(this.roomController.user.from))) {
  43. const userId = this.roomController.userId;
  44. const from = this.roomController.user.from;
  45. const roomId = this.roomController.roomId;
  46. const role = this.roomController.user.role;
  47. const user = this.roomController.user;
  48. this.roomController.logger.info("断开连接", {
  49. userId,
  50. from,
  51. roomId,
  52. });
  53. // if (this.roomController.isHoster(role)) {
  54. this.roomController.roomAssistant.hasCall = false;
  55. setTimeout(async () => {
  56. // 有可客户端主动断开时
  57. if (Number(user.onlineStatus) === 1) {
  58. // const res = await this.roomController.roomAssistant.checkRoomMaximum(roomId);
  59. const isInRoom = await isUserInRoom(roomId, user.userId);
  60. if (!this.roomController.roomAssistant.roomMax && isInRoom) {
  61. console.log("已在线,被断开后", isInRoom);
  62. isInRoom.onlineStatus = 0;
  63. this.roomController.user = isInRoom;
  64. await updateRoomUser(roomId, userId, isInRoom);
  65. await this.roomController.roomAssistant.notifyUsersChange(roomId, user, false);
  66. }
  67. }
  68. }, 1000);
  69. // await updateRoomUser(this.roomController.user);
  70. // }
  71. // this.roomController.roomAssistant.setRoomAvailableBySeconds(this.roomController.sessionId, 3 * 60);
  72. // this.roomController.roomAssistant.disconnect();
  73. // this.roomController.roomAssistant.unWatchRoomExpired();
  74. // }
  75. }
  76. });
  77. }
  78. }