123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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, removeRoomUser } from "../service/userService.js";
- import { publishExitRoom } from "../service/publishService.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;
- if (disMissRoomId === roomId) {
- this.logger.info("subscribe-订阅-配对", disMissRoomId, userId, roomId, user);
- this.roomController.roomAssistant.notifyRoomDismiss(roomId);
- this.roomController.roomAssistant.stopCall(roomId, userId, user, true);
- this.roomController.roomAssistant.destoryRoom(sessionId, roomConfigId);
- }
- }
- });
- this.socket.on("reconnect", () => {
- this.logger.warn("重新连接");
- this.run();
- });
- this.socket.on("error", (err) => {
- this.logger.error(`连接错误,原因: ${err.message}`);
- this.redisSubClient.unsubscribe("dismissRoom");
- });
- this.socket.on("disconnect", async (reason) => {
- const res = String(reason).split(" ");
- console.log("disconnect-reason", res);
- this.redisSubClient.unsubscribe("dismissRoom");
- // 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,
- });
- publishExitRoom(userId, user.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);
- const illegalMaster = this.roomController.roomAssistant.illegalMaster;
- if (!this.roomController.roomAssistant.roomMax && isInRoom && this.roomController) {
- // console.log("测试-->illegalMaster", illegalMaster);
- if (illegalMaster) {
- console.log("断开存在非法房主");
- await removeRoomUser(roomId, userId);
- this.roomController.roomAssistant.illegalMaster = false;
- } else {
- isInRoom.onlineStatus = 0;
- this.roomController.user = isInRoom;
- console.log("已在线,被断开后", 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();
- // }
- }
- });
- // benmark
- this.socket.on("client-benmark-server", (data) => {
- const roomId = this.roomController.roomId;
- this.socket.broadcast.to(roomId).emit("server-benmark-client", data);
- });
- let serverIntervalRoomBroadcast = false;
- let serverIntervalRoomBroadcastTimer = null;
- this.socket.on("server-interval-room-broadcast", ({ time }) => {
- const roomId = this.roomController.roomId;
- if (!serverIntervalRoomBroadcast) {
- serverIntervalRoomBroadcast = true;
- const data = {
- message: "定时benmark-播报",
- timestamp: new Date(),
- };
- serverIntervalRoomBroadcastTimer = setInterval(() => {
- this.socket.broadcast.to(roomId).emit("client-interval-room-broadcast", data);
- }, time | 1000);
- }
- });
- this.socket.on("server-interval-room-broadcast-cancel", () => {
- if (serverIntervalRoomBroadcastTimer) {
- clearInterval(serverIntervalRoomBroadcastTimer);
- serverIntervalRoomBroadcast = false;
- }
- });
- }
- }
|