UNPKG

fcr-core

Version:

Core APIs for building online scenes

67 lines 3.02 kB
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); } }); }