fcr-core
Version:
Core APIs for building online scenes
41 lines • 1.97 kB
JavaScript
import "core-js/modules/es.json.stringify.js";
import { FcrAnnotationControlImpl, FcrStandaloneAnnotationControlImpl } from './control';
import { createLogger } from '../../../utilities/logger';
import { generateFcrCoreClientError, handleRequestError } from '../../../utilities/error';
import { getAnnotationBoardOptions } from '../../../utilities/shared-storage';
import { DetailErrorCode, ErrorModuleCode } from '../../../imports';
export class FcrAnnotationControlFactoryImpl {
logger = createLogger({
prefix: 'FcrAnnotationControlFactory'
});
createForSubProcess(rtmClient, config, annotationSceneConfig) {
this.logger.info(`create for sub process with config: ${JSON.stringify(config)}`);
return new FcrStandaloneAnnotationControlImpl(rtmClient, config, () => {
const forgeInitConfig = getAnnotationBoardOptions();
if (!forgeInitConfig) {
throw generateFcrCoreClientError(ErrorModuleCode.FCR_ROOM_WHITEBOARD, DetailErrorCode.UNDEFINED_ERROR, `whiteboard init config is not exist`);
}
return Promise.resolve(forgeInitConfig);
}, annotationSceneConfig);
}
createForMainProcess(rtmClient, config, annotationSceneConfig, api) {
const boardPerformance = annotationSceneConfig.getBoardPerformance();
const control = new FcrAnnotationControlImpl(rtmClient, config, this._createForgeInitConfigFetcher(api, config.roomId, config.userId, boardPerformance), annotationSceneConfig, api);
return control;
}
_createForgeInitConfigFetcher(api, roomId, userId, boardPerformance) {
const getObjectInitConfig = async (roomId, userId) => {
return await handleRequestError(() => api.getAnnotationToken({
roomId,
userId
}), ErrorModuleCode.FCR_ROOM_WHITEBOARD, 'get annotation token failed');
};
return async () => {
const response = await getObjectInitConfig(roomId, userId);
return {
...response.data,
boardPerformance
};
};
}
}