connectController.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. this.logger.info("subscribe-订阅", disMissRoomId, userId, roomId, user);
  25. if (disMissRoomId === disMissRoomId) {
  26. this.oomController.roomAssistant.notifyRoomDismiss(roomId);
  27. this.roomController.roomAssistant.stopCall(roomId, userId, user);
  28. this.roomController.roomAssistant.destoryRoom(roomId);
  29. }
  30. }
  31. });
  32. this.socket.on("disconnect", async (reason) => {
  33. const res = String(reason).split(" ");
  34. console.log("disconnect-reason", res);
  35. // if (res.includes("close") || res.includes("disconnect")) {
  36. if ([FROMTYPE.MiniAPP].includes(Number(this.roomController.user.from))) {
  37. const userId = this.roomController.userId;
  38. const from = this.roomController.user.from;
  39. const roomId = this.roomController.roomId;
  40. const role = this.roomController.user.role;
  41. const user = this.roomController.user;
  42. this.roomController.logger.info("断开连接", {
  43. userId,
  44. from,
  45. roomId,
  46. });
  47. // if (this.roomController.isHoster(role)) {
  48. this.roomController.roomAssistant.hasCall = false;
  49. setTimeout(async () => {
  50. // 有可客户端主动断开时
  51. if (Number(user.onlineStatus) === 1) {
  52. // const res = await this.roomController.roomAssistant.checkRoomMaximum(roomId);
  53. const isInRoom = await isUserInRoom(roomId, user.userId);
  54. if (!this.roomController.roomAssistant.roomMax && isInRoom) {
  55. console.log("已在线,被断开后", isInRoom);
  56. isInRoom.onlineStatus = 0;
  57. this.roomController.user = isInRoom;
  58. await updateRoomUser(roomId, userId, isInRoom);
  59. await this.roomController.roomAssistant.notifyUsersChange(roomId, user, false);
  60. }
  61. }
  62. }, 1000);
  63. // await updateRoomUser(this.roomController.user);
  64. // }
  65. // this.roomController.roomAssistant.setRoomAvailableBySeconds(this.roomController.sessionId, 3 * 60);
  66. // this.roomController.roomAssistant.disconnect();
  67. // this.roomController.roomAssistant.unWatchRoomExpired();
  68. // }
  69. }
  70. });
  71. }
  72. }