fcr-core
Version:
Core APIs for building online scenes
90 lines (83 loc) • 3.34 kB
JavaScript
;
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;