UNPKG

fcr-core

Version:

Core APIs for building online scenes

223 lines (203 loc) 7.55 kB
/** * 通用错误处理辅助工具 * * 提供统一的错误创建和处理机制,支持实例化配置 */ import { FcrErrorCode, FcrErrorModuleCode, generateFcrCoreClientErrorNew } from './error'; /** * 控制器类型枚举 */ export let ControllerType = /*#__PURE__*/function (ControllerType) { ControllerType["USER"] = "user"; ControllerType["STREAM"] = "stream"; ControllerType["ROOM_SESSION"] = "room session"; ControllerType["CHAT_ROOM"] = "chat room"; ControllerType["PRIVILEGE"] = "privilege"; ControllerType["ROOM_CONNECTOR"] = "room connector"; ControllerType["ABILITY"] = "ability"; ControllerType["SHARING"] = "sharing"; ControllerType["WHITEBOARD"] = "whiteboard"; ControllerType["MONITOR"] = "monitor"; ControllerType["MEDIA"] = "media"; ControllerType["STT"] = "stt"; return ControllerType; }({}); /** * 错误处理配置接口 */ /** * 错误处理助手类 - 支持实例化配置 */ export class FcrErrorHelper { constructor(config = {}) { this.config = { defaultModuleCode: FcrErrorModuleCode.ROOM, enableDetailedMessages: true, logPrefix: 'FCR', autoLog: false, ...config }; } /** * 生成控制器未初始化错误 * @param controllerType 控制器类型 * @param moduleCode 模块错误码 * @returns FcrError */ createControllerNotInitializedError(controllerType, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] The ${controllerType} controller is not initialized, please join the room first` : `${controllerType} controller not initialized`; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`); } return error; } /** * 生成操作冲突错误 * @param operation 操作名称 * @param reason 冲突原因 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationConflictError(operation, reason, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] Failed to ${operation}: ${reason}` : `${operation} failed: ${reason}`; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.JOIN_CONFLICT, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`); } return error; } /** * 生成操作取消错误 * @param operation 操作名称 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationCanceledError(operation, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] ${operation} operation has been cancelled` : `${operation} cancelled`; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`); } return error; } /** * 生成消息发送错误 * @param originalError 原始错误 * @param moduleCode 模块错误码 * @returns FcrError */ createSendMessageError(originalError, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] Send message failed: ${originalError.message}` : 'send message failed'; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.UNDEFINED_ERROR, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`, originalError); } return error; } /** * 生成通用操作错误 * @param operation 操作类型 * @param originalError 原始错误 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationError(operation, originalError, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] ${operation} failed${originalError ? `: ${originalError.message}` : ''}` : `${operation} failed`; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`, originalError); } return error; } /** * 生成网络请求相关错误 * @param message 错误消息 * @param moduleCode 模块错误码 * @returns FcrError */ createNetworkError(message, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const formattedMessage = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] Network error: ${message}` : message; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.LOCAL_HTTP_REQUEST_FAILED, formattedMessage); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${formattedMessage}`); } return error; } /** * 生成参数无效错误 * @param paramName 参数名 * @param reason 无效原因 * @param moduleCode 模块错误码 * @returns FcrError */ createInvalidParamsError(paramName, reason, moduleCode) { const module = moduleCode ?? this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? `[${this.config.logPrefix}] Invalid parameter '${paramName}': ${reason}` : `Invalid parameter '${paramName}': ${reason}`; const error = generateFcrCoreClientErrorNew(module, FcrErrorCode.INVALID_PARAMS, message); if (this.config.autoLog) { console.error(`${this.config.logPrefix}: ${message}`); } return error; } /** * 生成房间加入冲突错误的便捷方法 */ createJoinConflictError(isAlreadyJoined) { const reason = isAlreadyJoined ? 'the room has been joined' : 'the previous join operation is not completed'; return this.createOperationConflictError('join the room', reason); } /** * 静态工厂方法 - 创建默认实例 */ static createDefault() { return new FcrErrorHelper(); } /** * 为房间控制创建专用实例 */ static forRoomControl() { return new FcrErrorHelper({ defaultModuleCode: FcrErrorModuleCode.ROOM, logPrefix: 'RoomControl', enableDetailedMessages: true }); } /** * 为引擎创建专用实例 */ static forEngine() { return new FcrErrorHelper({ defaultModuleCode: FcrErrorModuleCode.ENGINE, logPrefix: 'Engine', enableDetailedMessages: true }); } /** * 为直播创建专用实例 */ static forLiveStreaming() { return new FcrErrorHelper({ defaultModuleCode: FcrErrorModuleCode.ROOM_LIVE_STREAMING, logPrefix: 'LiveStreaming', enableDetailedMessages: true }); } } /** * 预配置的错误处理器实例 */ // 默认实例 - 用于通用错误处理 export const defaultErrorHelper = FcrErrorHelper.createDefault(); // 房间控制专用实例 - 用于房间相关错误 export const roomControlErrorHelper = FcrErrorHelper.forRoomControl(); // 引擎专用实例 - 用于引擎相关错误 export const engineErrorHelper = FcrErrorHelper.forEngine(); // 直播专用实例 - 用于直播相关错误 export const liveStreamingErrorHelper = FcrErrorHelper.forLiveStreaming();