UNPKG

fcr-core

Version:

Core APIs for building online scenes

90 lines (83 loc) 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RoomControlFactory = void 0; require("core-js/modules/esnext.iterator.constructor.js"); require("core-js/modules/esnext.iterator.map.js"); var _imports = require("../imports"); var _convertRoomType = require("../utilities/convertRoomType"); var _error = require("../utilities/error"); var _infinityRoomControl = require("./infinity-room-control"); var _room = require("./interpreter-control/room"); var _joinBeforeHostWaitingroomControl = require("./join-before-host-waitingroom-control"); var _mainroomControl = require("./mainroom-control"); var _type = require("./type"); var _waitingroomControl = require("./waitingroom-control"); /** * 房间控制的创建参数 */ /** * 支持的房间控制类型映射 */ const ROOM_CONTROL_IMPLEMENTATIONS = { [_type.FcrRoomType.Waitingroom]: _waitingroomControl.FcrWaitingRoomControlImpl, [_type.FcrRoomType.JoinBeforeHostWaitingRoom]: _joinBeforeHostWaitingroomControl.FcrJoinBeforeHostWaitingRoomControlImpl, [_type.FcrRoomType.Mainroom]: _mainroomControl.FcrMainRoomControlImpl, [_type.FcrRoomType.Interpreterroom]: _room.FcrInterpreterRoomControlImpl, // 注意:Subroom 目前没有专门的实现类,使用主房间控制 [_type.FcrRoomType.Subroom]: _mainroomControl.FcrMainRoomControlImpl, [_type.FcrRoomType.Infinityroom]: _infinityRoomControl.FcrInfinityRoomControlImpl }; /** * 房间控制工厂类 * 负责根据房间类型创建相应的房间控制实例 */ class RoomControlFactory { /** * 创建房间控制实例 * @param params 创建参数 * @returns 房间控制实例 * @throws {FcrError} 当房间类型不支持时抛出错误 */ static create(params) { const { engine, scene, apiService, config, chatConnection, sharedCache, roomResponse, monitorControl } = params; const roomType = (0, _convertRoomType.convertServerRoomTypeToFcrRoomType)(roomResponse.room.roomProperties.roomType); if (roomType === null) { throw (0, _error.generateFcrCoreClientError)(_imports.ErrorModuleCode.FCR_ROOM, _imports.DetailErrorCode.UNDEFINED_ERROR, `Unsupported room types: ${roomResponse.room.roomProperties.roomType}`); } const RoomControlImpl = ROOM_CONTROL_IMPLEMENTATIONS[roomType]; if (!RoomControlImpl) { throw (0, _error.generateFcrCoreClientError)(_imports.ErrorModuleCode.FCR_ROOM, _imports.DetailErrorCode.UNDEFINED_ERROR, `Unsupported room types: ${roomType}`); } // 创建聊天室控制 const chatRoomControl = new _imports.FcrChatRoomControlImpl(scene, chatConnection, sharedCache, false); // 创建房间控制实例 return new RoomControlImpl(engine, scene, apiService, config, sharedCache, chatConnection, chatRoomControl, monitorControl); } /** * 验证房间类型是否受支持 * @param roomType 房间类型 * @returns 是否支持 */ static isRoomTypeSupported(roomType) { return roomType in ROOM_CONTROL_IMPLEMENTATIONS; } /** * 获取所有支持的房间类型 * @returns 支持的房间类型数组 */ static getSupportedRoomTypes() { return Object.keys(ROOM_CONTROL_IMPLEMENTATIONS).map(key => parseInt(key, 10)); } } exports.RoomControlFactory = RoomControlFactory;