UNPKG

fcr-core

Version:

Core APIs for building online scenes

233 lines (216 loc) 9.91 kB
"use strict"; require("core-js/modules/es.array.push.js"); require("core-js/modules/esnext.iterator.constructor.js"); require("core-js/modules/esnext.iterator.filter.js"); require("core-js/modules/esnext.iterator.for-each.js"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.roomControlErrorHelper = exports.liveStreamingErrorHelper = exports.engineErrorHelper = exports.defaultErrorHelper = exports.FcrErrorHelper = exports.ControllerType = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _error = require("./error"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /** * 通用错误处理辅助工具 * * 提供统一的错误创建和处理机制,支持实例化配置 */ /** * 控制器类型枚举 */ let ControllerType = exports.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; }({}); /** * 错误处理配置接口 */ /** * 错误处理助手类 - 支持实例化配置 */ class FcrErrorHelper { constructor() { let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.config = _objectSpread({ defaultModuleCode: _error.FcrErrorModuleCode.ROOM, enableDetailedMessages: true, logPrefix: 'FCR', autoLog: false }, config); } /** * 生成控制器未初始化错误 * @param controllerType 控制器类型 * @param moduleCode 模块错误码 * @returns FcrError */ createControllerNotInitializedError(controllerType, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] The ").concat(controllerType, " controller is not initialized, please join the room first") : "".concat(controllerType, " controller not initialized"); const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(message)); } return error; } /** * 生成操作冲突错误 * @param operation 操作名称 * @param reason 冲突原因 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationConflictError(operation, reason, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] Failed to ").concat(operation, ": ").concat(reason) : "".concat(operation, " failed: ").concat(reason); const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.JOIN_CONFLICT, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(message)); } return error; } /** * 生成操作取消错误 * @param operation 操作名称 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationCanceledError(operation, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] ").concat(operation, " operation has been cancelled") : "".concat(operation, " cancelled"); const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(message)); } return error; } /** * 生成消息发送错误 * @param originalError 原始错误 * @param moduleCode 模块错误码 * @returns FcrError */ createSendMessageError(originalError, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] Send message failed: ").concat(originalError.message) : 'send message failed'; const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.UNDEFINED_ERROR, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(message), originalError); } return error; } /** * 生成通用操作错误 * @param operation 操作类型 * @param originalError 原始错误 * @param moduleCode 模块错误码 * @returns FcrError */ createOperationError(operation, originalError, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] ").concat(operation, " failed").concat(originalError ? ": ".concat(originalError.message) : '') : "".concat(operation, " failed"); const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.NOT_JOINED_ROOM, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(message), originalError); } return error; } /** * 生成网络请求相关错误 * @param message 错误消息 * @param moduleCode 模块错误码 * @returns FcrError */ createNetworkError(message, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const formattedMessage = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] Network error: ").concat(message) : message; const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.LOCAL_HTTP_REQUEST_FAILED, formattedMessage); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(formattedMessage)); } return error; } /** * 生成参数无效错误 * @param paramName 参数名 * @param reason 无效原因 * @param moduleCode 模块错误码 * @returns FcrError */ createInvalidParamsError(paramName, reason, moduleCode) { const module = moduleCode !== null && moduleCode !== void 0 ? moduleCode : this.config.defaultModuleCode; const message = this.config.enableDetailedMessages ? "[".concat(this.config.logPrefix, "] Invalid parameter '").concat(paramName, "': ").concat(reason) : "Invalid parameter '".concat(paramName, "': ").concat(reason); const error = (0, _error.generateFcrCoreClientErrorNew)(module, _error.FcrErrorCode.INVALID_PARAMS, message); if (this.config.autoLog) { console.error("".concat(this.config.logPrefix, ": ").concat(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: _error.FcrErrorModuleCode.ROOM, logPrefix: 'RoomControl', enableDetailedMessages: true }); } /** * 为引擎创建专用实例 */ static forEngine() { return new FcrErrorHelper({ defaultModuleCode: _error.FcrErrorModuleCode.ENGINE, logPrefix: 'Engine', enableDetailedMessages: true }); } /** * 为直播创建专用实例 */ static forLiveStreaming() { return new FcrErrorHelper({ defaultModuleCode: _error.FcrErrorModuleCode.ROOM_LIVE_STREAMING, logPrefix: 'LiveStreaming', enableDetailedMessages: true }); } } /** * 预配置的错误处理器实例 */ // 默认实例 - 用于通用错误处理 exports.FcrErrorHelper = FcrErrorHelper; const defaultErrorHelper = exports.defaultErrorHelper = FcrErrorHelper.createDefault(); // 房间控制专用实例 - 用于房间相关错误 const roomControlErrorHelper = exports.roomControlErrorHelper = FcrErrorHelper.forRoomControl(); // 引擎专用实例 - 用于引擎相关错误 const engineErrorHelper = exports.engineErrorHelper = FcrErrorHelper.forEngine(); // 直播专用实例 - 用于直播相关错误 const liveStreamingErrorHelper = exports.liveStreamingErrorHelper = FcrErrorHelper.forLiveStreaming();