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