|
@@ -2,7 +2,7 @@ import { pubClient } from "../connection/redis.js";
|
|
import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
|
|
import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
|
|
import { io } from "../core/io.js";
|
|
import { io } from "../core/io.js";
|
|
import { logger } from "../core/logger.js";
|
|
import { logger } from "../core/logger.js";
|
|
-import { updateUser, removeRoomAllUsers, getAllRoomUsers } from "../service/userService.js";
|
|
|
|
|
|
+import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../service/userService.js";
|
|
import { watchRoomService } from "../service/watchRoomService.js";
|
|
import { watchRoomService } from "../service/watchRoomService.js";
|
|
import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
|
|
import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
|
|
import { getSig } from "../core/getSig.js";
|
|
import { getSig } from "../core/getSig.js";
|
|
@@ -62,6 +62,7 @@ const joinRoom = async (roomId, userId, user) => {
|
|
const leaveRoom = async (roomId, userId) => {
|
|
const leaveRoom = async (roomId, userId) => {
|
|
logger.info("leaveRoom", roomId);
|
|
logger.info("leaveRoom", roomId);
|
|
await pubClient.hDel(roomId, userId);
|
|
await pubClient.hDel(roomId, userId);
|
|
|
|
+ return Promise.resolve();
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -71,15 +72,16 @@ const leaveRoom = async (roomId, userId) => {
|
|
*/
|
|
*/
|
|
const joinRoomAction = async (roomId, userId, user, socket) => {
|
|
const joinRoomAction = async (roomId, userId, user, socket) => {
|
|
const isJoinRoom = await pubClient.hExists(roomId, userId);
|
|
const isJoinRoom = await pubClient.hExists(roomId, userId);
|
|
- joinRoom(roomId, userId, user);
|
|
|
|
|
|
+ await joinRoom(roomId, userId, user);
|
|
if (!isJoinRoom) {
|
|
if (!isJoinRoom) {
|
|
logger.info("加入房间 :", { userId, roomId, user });
|
|
logger.info("加入房间 :", { userId, roomId, user });
|
|
socket.join(roomId);
|
|
socket.join(roomId);
|
|
const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
- socket.broadcast.emit(EVENT.roomIn, {
|
|
|
|
|
|
+ const roomConfig = await getRoomConfig(roomId);
|
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomIn, {
|
|
user,
|
|
user,
|
|
roomsPerson: AllRoomUsers,
|
|
roomsPerson: AllRoomUsers,
|
|
- roomsConfig: {},
|
|
|
|
|
|
+ roomsConfig: roomConfig,
|
|
});
|
|
});
|
|
} else {
|
|
} else {
|
|
logger.info(`已加入房间 :`, { userId });
|
|
logger.info(`已加入房间 :`, { userId });
|
|
@@ -96,11 +98,17 @@ const joinRoomAction = async (roomId, userId, user, socket) => {
|
|
export const leaveRoomAction = async (roomId, userId, user, socket) => {
|
|
export const leaveRoomAction = async (roomId, userId, user, socket) => {
|
|
logger.info("离开房间", userId);
|
|
logger.info("离开房间", userId);
|
|
socket.leave(roomId);
|
|
socket.leave(roomId);
|
|
- leaveRoom(roomId, userId);
|
|
|
|
- socket.broadcast.emit(EVENT.roomOut, {
|
|
|
|
|
|
+ await leaveRoom(roomId, userId);
|
|
|
|
+ const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
|
|
+ const roomConfig = await getRoomConfig(roomId);
|
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomOut, {
|
|
user,
|
|
user,
|
|
- // roomsPerson: sortRoomUser(roomsPerson),
|
|
|
|
- // roomsConfig: this._roomsConfig[roomId],
|
|
|
|
|
|
+ roomsPerson: AllRoomUsers,
|
|
|
|
+ roomsConfig: roomConfig,
|
|
|
|
+ });
|
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
|
|
|
|
+ user,
|
|
|
|
+ roomsPerson: AllRoomUsers,
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
@@ -118,6 +126,7 @@ const closeRoomAction = async (roomId, userId, user, socket) => {
|
|
socket.broadcast.emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
|
|
socket.broadcast.emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
|
|
};
|
|
};
|
|
export async function roomController(socket) {
|
|
export async function roomController(socket) {
|
|
|
|
+ // try {
|
|
let user = socket.handshake.query;
|
|
let user = socket.handshake.query;
|
|
const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from, enableTalk } = user;
|
|
const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from, enableTalk } = user;
|
|
if (user) {
|
|
if (user) {
|
|
@@ -133,17 +142,14 @@ export async function roomController(socket) {
|
|
const userObj = { ...user, isConnected: true, roomType: roomType || "" };
|
|
const userObj = { ...user, isConnected: true, roomType: roomType || "" };
|
|
|
|
|
|
updateUser(userUniqueId, userObj);
|
|
updateUser(userUniqueId, userObj);
|
|
- // await pubClient.hSet(userUniqueId, user);
|
|
|
|
- // await pubClient.expire(userUniqueId, 60 * 60 * 24);
|
|
|
|
// 房主自动创建房间
|
|
// 房主自动创建房间
|
|
-
|
|
|
|
if (isHoster(role)) {
|
|
if (isHoster(role)) {
|
|
if ([FROMTYPE.MiniAPP].includes(Number(from))) {
|
|
if ([FROMTYPE.MiniAPP].includes(Number(from))) {
|
|
logger.debug("房主自动创建房间 :", { roomId: roomUniqueId, userId: userUniqueId, user });
|
|
logger.debug("房主自动创建房间 :", { roomId: roomUniqueId, userId: userUniqueId, user });
|
|
buildRoom(roomUniqueId, userUniqueId, user);
|
|
buildRoom(roomUniqueId, userUniqueId, user);
|
|
await setRoomConfig(roomUniqueId, {
|
|
await setRoomConfig(roomUniqueId, {
|
|
userLimitNum,
|
|
userLimitNum,
|
|
- enableTalk: enableTalk,
|
|
|
|
|
|
+ enableTalk: enableTalk === "true" ? true : false,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
socket.join(roomUniqueId);
|
|
socket.join(roomUniqueId);
|
|
@@ -158,27 +164,39 @@ export async function roomController(socket) {
|
|
socket.on(EVENT.stopCall, stopCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
|
|
socket.on(EVENT.stopCall, stopCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
|
|
|
|
|
|
socket.on(EVENT.action, (data) => {
|
|
socket.on(EVENT.action, (data) => {
|
|
- console.log("room -action");
|
|
|
|
|
|
+ console.log("room-action", roomUniqueId);
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
|
|
});
|
|
});
|
|
|
|
|
|
// 通知 baseView 减少大量通知
|
|
// 通知 baseView 减少大量通知
|
|
socket.on(EVENT.webSyncAction, (data) => {
|
|
socket.on(EVENT.webSyncAction, (data) => {
|
|
|
|
+ console.log("同屏操作中");
|
|
if ([FROMTYPE.base].includes(Number(from))) {
|
|
if ([FROMTYPE.base].includes(Number(from))) {
|
|
|
|
+ console.log("同屏操作中");
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
socket.onAny((event, data) => {
|
|
socket.onAny((event, data) => {
|
|
- // console.log(`onAny:get ${event}`);
|
|
|
|
console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
|
|
console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
|
|
|
|
+ // if (event !== "webSyncAction") {
|
|
|
|
+ // console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
|
|
|
|
+ // }
|
|
});
|
|
});
|
|
|
|
|
|
// test
|
|
// 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) => {
|
|
socket.on(EVENT.changeOnlineStatus, async (data) => {
|
|
|
|
+ console.log("changeOnlineStatus", data);
|
|
user.onlineStatus = data.status;
|
|
user.onlineStatus = data.status;
|
|
const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
|
|
const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
|
|
|
|
+ await updateRoomUser(roomUniqueId, userUniqueId, user);
|
|
let actionName = user.onlineStatus ? "inRoom" : "leaveRoom";
|
|
let actionName = user.onlineStatus ? "inRoom" : "leaveRoom";
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.roomPersonChange, {
|
|
socket.broadcast.to(roomUniqueId).emit(EVENT.roomPersonChange, {
|
|
roomsPerson: AllRoomUsers,
|
|
roomsPerson: AllRoomUsers,
|
|
@@ -188,12 +206,9 @@ export async function roomController(socket) {
|
|
});
|
|
});
|
|
|
|
|
|
socket.on("disconnect", async (reason) => {
|
|
socket.on("disconnect", async (reason) => {
|
|
- // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
|
|
|
|
- // watchRoomWithMaster(roomUniqueId, socket);
|
|
|
|
console.log("reason", reason);
|
|
console.log("reason", reason);
|
|
if (reason === "transport close" || reason === "client namespace disconnect") {
|
|
if (reason === "transport close" || reason === "client namespace disconnect") {
|
|
// 主动离开
|
|
// 主动离开
|
|
-
|
|
|
|
shotGunLeaveAction(
|
|
shotGunLeaveAction(
|
|
{
|
|
{
|
|
syncId,
|
|
syncId,
|
|
@@ -220,7 +235,12 @@ export async function roomController(socket) {
|
|
console.log("reconnect");
|
|
console.log("reconnect");
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+ // } catch (error) {
|
|
|
|
+ // logger.info("mainRoomController", error);
|
|
|
|
+ // }
|
|
}
|
|
}
|
|
|
|
+// roomController end
|
|
|
|
+
|
|
const shotGunLeaveAction = async (ids, socket, user) => {
|
|
const shotGunLeaveAction = async (ids, socket, user) => {
|
|
console.log("主动离开");
|
|
console.log("主动离开");
|
|
const { syncId, roomId, userId } = ids;
|
|
const { syncId, roomId, userId } = ids;
|
|
@@ -252,18 +272,20 @@ const startCallAction = async (roomId, userId, user, socket) => {
|
|
}
|
|
}
|
|
user.isInRoom = true;
|
|
user.isInRoom = true;
|
|
const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
-
|
|
|
|
|
|
+ await updateRoomUser(roomId, userId, user);
|
|
|
|
+ const roomConfig = await getRoomConfig(roomId);
|
|
logger.info("roomId", roomId);
|
|
logger.info("roomId", roomId);
|
|
- logger.info("AllRoomUsers", AllRoomUsers.length, AllRoomUsers);
|
|
|
|
|
|
+ logger.info("AllRoomUsers", AllRoomUsers.length);
|
|
socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
|
|
socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
|
|
user,
|
|
user,
|
|
roomsPerson: AllRoomUsers,
|
|
roomsPerson: AllRoomUsers,
|
|
});
|
|
});
|
|
|
|
+ console.log("roomConfig", JSON.stringify(roomConfig));
|
|
|
|
|
|
- socket.emit(EVENT.roomIn, {
|
|
|
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomIn, {
|
|
user,
|
|
user,
|
|
roomsPerson: AllRoomUsers,
|
|
roomsPerson: AllRoomUsers,
|
|
- roomsConfig: {},
|
|
|
|
|
|
+ roomsConfig: roomConfig,
|
|
});
|
|
});
|
|
// } catch (error) {
|
|
// } catch (error) {
|
|
// logger.error("startCallAction:", error);
|
|
// logger.error("startCallAction:", error);
|