|
@@ -10,122 +10,129 @@ import { isHoster, buildRoom, startCallAction, stopCallAction, joinRoomAction, l
|
|
import { RoomAssistantController } from './roomAssistantController.js'
|
|
import { RoomAssistantController } from './roomAssistantController.js'
|
|
|
|
|
|
export async function roomController(socket) {
|
|
export async function roomController(socket) {
|
|
- 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-${roomId}_${oneSceneNum}_web`;
|
|
|
|
- console.log('roomUniqueId',uRoomId)
|
|
|
|
-
|
|
|
|
- // 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,
|
|
|
|
- });
|
|
|
|
|
|
+ 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);
|
|
|
|
|
|
+ socket.join(roomUniqueId);
|
|
} else {
|
|
} 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);
|
|
|
|
|
|
+ logger.info("user-query-不存在 :", socket.handshake.query);
|
|
|
|
+ socket.disconnect();
|
|
}
|
|
}
|
|
- });
|
|
|
|
-
|
|
|
|
- socket.onAny((event, data) => {
|
|
|
|
- if (event !== "webSyncAction") {
|
|
|
|
- console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- // test
|
|
|
|
- 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.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);
|
|
|
|
+ }
|
|
});
|
|
});
|
|
- });
|
|
|
|
-
|
|
|
|
- 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,
|
|
|
|
|
|
+
|
|
|
|
+ // 通知 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,
|
|
user,
|
|
- );
|
|
|
|
- } else {
|
|
|
|
- // 被动离开
|
|
|
|
- // disconnectAction(
|
|
|
|
- // {
|
|
|
|
- // syncId,
|
|
|
|
- // roomId: roomUniqueId,
|
|
|
|
- // userId: userUniqueId,
|
|
|
|
- // },
|
|
|
|
- // socket,
|
|
|
|
- // user,
|
|
|
|
- // );
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- socket.on("reconnect", () => {
|
|
|
|
- console.log("reconnect");
|
|
|
|
- });
|
|
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ 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)
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|