fcr-core
Version:
Core APIs for building online scenes
67 lines • 3.02 kB
JavaScript
import { ErrorModuleCode, get, jsonstring } from '../../imports';
import { handleRequestError } from '../../utilities/error';
import { getBoardPerformance } from '../../utilities/scene-properties';
import { setAnnotationBoardOptions, setWhiteboardOptions } from '../../utilities/shared-storage';
async function _getAnnotationToken(api, roomId, userId) {
return await handleRequestError(() => api.getAnnotationToken({
roomId,
userId
}), ErrorModuleCode.FCR_ROOM_WHITEBOARD, 'get whiteboard token failed');
}
async function _getBoardToken(api, roomId, userId) {
return await handleRequestError(() => api.getWhiteboardToken({
roomId,
userId
}), ErrorModuleCode.FCR_ROOM_WHITEBOARD, 'get whiteboard token failed');
}
async function initAnnotationInfo(scene, api, logger) {
const roomId = scene.sceneId;
const userId = scene.localUser.getLocalUserId();
const boardToken = (await _getAnnotationToken(api, roomId, userId)).data;
if (!boardToken) {
logger.error(`get annotation board options failed, roomId: ${roomId}, userId: ${userId}, boardOptions: ${jsonstring(boardToken)}`);
} else {
const boardOptions = {
...boardToken,
boardPerformance: getBoardPerformance(scene)
};
logger.info(`get annotation board options success, roomId: ${roomId}, userId: ${userId}, boardOptions: ${jsonstring(boardOptions)}`);
setAnnotationBoardOptions(boardOptions);
}
}
async function initBoardInfo(scene, api, logger) {
const roomId = scene.sceneId;
const userId = scene.localUser.getLocalUserId();
const boardToken = (await _getBoardToken(api, roomId, userId)).data;
if (!boardToken) {
logger.error(`get whiteboard options failed, roomId: ${roomId}, userId: ${userId}, boardToken: ${jsonstring(boardToken)}`);
} else {
const boardOptions = {
...boardToken,
boardPerformance: getBoardPerformance(scene)
};
logger.info(`get whiteboard options success, roomId: ${roomId}, userId: ${userId}, boardOptions: ${jsonstring(boardOptions)}`);
setWhiteboardOptions(boardOptions);
}
}
export function addBoardInitInfoObserver(scene, api, logger) {
scene.addObserver({
onScenePropertiesUpdated: (_sceneId, event) => {
const annotationBoardAppId = get(event.changedProperties, 'widgets.annotation.extra.boardAppId');
if (annotationBoardAppId) {
logger.info('widgets.annotation.extra.boardAppId updated, re-initializing annotation info');
initAnnotationInfo(scene, api, logger);
}
const whiteboardBoardAppId = get(event.changedProperties, 'widgets.netlessBoard.extra.boardAppId');
if (whiteboardBoardAppId) {
logger.info('widgets.netlessBoard.extra.boardAppId updated, re-initializing whiteboard info');
initBoardInfo(scene, api, logger);
}
},
onJoinSceneSuccess: () => {
logger.info('join scene success, re-initializing annotation and whiteboard info');
initAnnotationInfo(scene, api, logger);
initBoardInfo(scene, api, logger);
}
});
}