123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import { pubClient } from "../connection/redis.js";
- import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
- import { io } from "../core/io.js";
- import { logger } from "../core/logger.js";
- import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../service/userService.js";
- import { watchRoomService } from "../service/watchRoomService.js";
- import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
- import { getSig } from "../core/getSig.js";
- import { isHoster, buildRoom, startCallAction, stopCallAction, joinRoomAction, leaveRoomAction, shotGunLeaveAction, disconnectAction } from "./roomActionController.js";
- import { RoomAssistantController } from './roomAssistantController.js'
- export async function roomController(socket) {
- try {
- let user = socket.handshake.query;
- const roomAssistant = new RoomAssistantController(socket)
- const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from, enableTalk } = user;
- if (user) {
- const oneSceneNum = sceneNumber || sceneNum;
- const syncId = `sync-${oneSceneNum}-${userId}`;
- const roomSessionId = `${oneSceneNum}-${userId}`;
- console.log('roomSessionId', roomSessionId);
- const userUniqueId = `user-${userId}`;
- const uRoomId = await roomAssistant.prepearRoom(roomSessionId,roomId);
- const roomUniqueId = `room-${uRoomId}_${oneSceneNum}_web`;
- console.log('roomUniqueId',roomUniqueId)
-
- // const userLimitNum = userLimitNum || process.env.US
- if ("roomId" in user && "userId" in user) {
- user.sig = getSig(userId);
- const userObj = { ...user, isConnected: true, roomType: roomType || "" };
-
- updateUser(userUniqueId, userObj);
- // await pubClient.hSet(userUniqueId, user);
- // await pubClient.expire(userUniqueId, 60 * 60 * 24);
- if (isHoster(role)) {
- if ([FROMTYPE.MiniAPP].includes(Number(from))) {
- await setRoomConfig(roomUniqueId, {
- userLimitNum,
- enableTalk: enableTalk === "true" ? true : false,
- });
- }
- }
- socket.join(roomUniqueId);
- } else {
- logger.info("user-query-不存在 :", socket.handshake.query);
- socket.disconnect();
- }
-
- socket.on(EVENT.action, (data) => {
- console.log("room-action", roomUniqueId, socket.rooms.has(roomUniqueId), JSON.stringify(data));
- if (socket.rooms.has(roomUniqueId)) {
- socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
- } else {
- logger.error("action 事件不在房间内", user);
- }
- });
-
- // 通知 baseView 减少大量通知
- socket.on(EVENT.webSyncAction, (data) => {
- // socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
- if ([FROMTYPE.base].includes(Number(from))) {
- socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
- }
- });
-
- socket.onAny((event, data) => {
- if (event !== "webSyncAction") {
- console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
- }
- });
-
-
- socket.on(EVENT.changeRoomEnableTalk, async (data) => {
- // this._roomsConfig[roomId].enableTalk = data;
- await setRoomConfig(roomUniqueId, data);
- const roomConfig = await getRoomConfig(roomUniqueId);
- socket.broadcast.to(roomUniqueId).emit(EVENT.changeRoomEnableTalk, roomConfig);
- });
-
- socket.on(EVENT.changeOnlineStatus, async (data) => {
- user.onlineStatus = data.status;
- const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
- await updateRoomUser(roomUniqueId, userUniqueId, user);
- let actionName = user.onlineStatus ? "inRoom" : "leaveRoom";
- logger.info("changeOnlineStatus", user);
- socket.broadcast.to(roomUniqueId).emit(EVENT.roomPersonChange, {
- roomsPerson: AllRoomUsers,
- actionName,
- user,
- });
- });
-
- socket.on(EVENT.startCall, () => {
- startCallAction(roomUniqueId, userUniqueId, user, socket);
- });
- socket.on(EVENT.stopCall, () => {
- stopCallAction(roomUniqueId, userUniqueId, user, socket);
- });
-
- socket.on("disconnect", async (reason) => {
- // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
- // watchRoomWithMaster(roomUniqueId, socket);
- console.log("reason", reason);
- if (reason === "transport close") {
- // 主动离开
- shotGunLeaveAction(
- {
- syncId,
- roomId: roomUniqueId,
- userId: userUniqueId,
- },
- socket,
- user,
- );
- } else {
- // 被动离开
- // disconnectAction(
- // {
- // syncId,
- // roomId: roomUniqueId,
- // userId: userUniqueId,
- // },
- // socket,
- // user,
- // );
- }
- });
- socket.on("reconnect", () => {
- console.log("reconnect");
- });
- }
-
- } catch (error) {
- console.log('roomController::error',error)
-
- }
-
- }
|