fcr-core
Version:
Core APIs for building online scenes
233 lines (216 loc) • 9.91 kB
JavaScript
;
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();