import { BasicController } from "./basicController.js"; import { RoomController } from "./room/index.js"; import { SyncDeviceController } from "./syncDeviceController.js"; import { FROMTYPE } from "../enum/index.js"; import { updateRoomUser, isUserInRoom } from "../service/userService.js"; export class ConnectController extends BasicController { constructor(...args) { super(...args); this.roomController = new RoomController(this.io, this.socket, this.redisCli); this.syncDeviceController = new SyncDeviceController(this.io, this.socket, this.redisCli, this.roomController); } async run() { await this.roomController.run(); await this.syncDeviceController.run(); this.redisSubClient.subscribe("dismissRoom", (message) => { // chat:room:dismiss:c-fCTZyvc:E71464 this.logger.info("subscribe-订阅", JSON.stringify(message)); const disMissId = message.split("chat:room:dismiss:")[1]; if (disMissId) { const disMissRoomId = `room:${disMissId}`; const userId = this.roomController.userId; const roomId = this.roomController.roomId; const user = this.roomController.user; const sessionId = this.roomController.sessionId; const roomConfigId = this.roomController.roomConfigId; this.logger.info("subscribe-订阅", disMissRoomId, userId, roomId, user); if (disMissRoomId === disMissRoomId) { this.roomController.roomAssistant.notifyRoomDismiss(roomId); this.roomController.roomAssistant.stopCall(roomId, userId, user); this.roomController.roomAssistant.destoryRoom(sessionId, roomConfigId); } } }); this.socket.on("reconnect", () => { this.logger.info("重新连接"); this.run(); }); this.socket.on("disconnect", async (reason) => { const res = String(reason).split(" "); console.log("disconnect-reason", res); // if (res.includes("close") || res.includes("disconnect")) { if ([FROMTYPE.MiniAPP].includes(Number(this.roomController.user.from))) { const userId = this.roomController.userId; const from = this.roomController.user.from; const roomId = this.roomController.roomId; const role = this.roomController.user.role; const user = this.roomController.user; this.roomController.logger.info("断开连接", { userId, from, roomId, }); // if (this.roomController.isHoster(role)) { this.roomController.roomAssistant.hasCall = false; setTimeout(async () => { // 有可客户端主动断开时 if (Number(user.onlineStatus) === 1) { // const res = await this.roomController.roomAssistant.checkRoomMaximum(roomId); const isInRoom = await isUserInRoom(roomId, user.userId); if (!this.roomController.roomAssistant.roomMax && isInRoom) { console.log("已在线,被断开后", isInRoom); isInRoom.onlineStatus = 0; this.roomController.user = isInRoom; await updateRoomUser(roomId, userId, isInRoom); await this.roomController.roomAssistant.notifyUsersChange(roomId, user, false); } } }, 1000); // await updateRoomUser(this.roomController.user); // } // this.roomController.roomAssistant.setRoomAvailableBySeconds(this.roomController.sessionId, 3 * 60); // this.roomController.roomAssistant.disconnect(); // this.roomController.roomAssistant.unWatchRoomExpired(); // } } }); } }