fcr-core
Version:
Core APIs for building online scenes
226 lines (209 loc) • 8.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.roomControlErrorHelper = exports.liveStreamingErrorHelper = exports.engineErrorHelper = exports.defaultErrorHelper = exports.FcrErrorHelper = exports.ControllerType = void 0;
var _error = require("./error");
/**
* 通用错误处理辅助工具
*
* 提供统一的错误创建和处理机制,支持实例化配置
*/
/**
* 控制器类型枚举
*/
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(config = {}) {
this.config = {
defaultModuleCode: _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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 = (0, _error.generateFcrCoreClientErrorNew)(module, _error.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: _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();