solver-sdk
Version:
SDK для интеграции с Code Solver Backend API
123 lines • 4.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilesystemApi = void 0;
const code_solver_websocket_client_js_1 = require("../utils/code-solver-websocket-client.js");
/**
* API для работы с файловой системой через WebSocket
*/
class FilesystemApi {
/**
* Создает новый API для работы с файловой системой
* @param httpClient HTTP клиент
*/
constructor(httpClient) {
/** WebSocket клиент */
this.wsClient = null;
/** Родительский SDK */
this.parentSdk = null;
/** Активный ID проекта */
this.activeProjectId = null;
this.httpClient = httpClient;
}
/**
* Устанавливает родительский SDK
* @param sdk Родительский SDK
*/
setParent(sdk) {
this.parentSdk = sdk;
}
/**
* Подключается к WebSocket для файловой системы
* @param {string} projectId ID проекта
* @returns {Promise<boolean>} Результат подключения
*/
async connectWebSocket(projectId) {
if (!projectId) {
console.error('[FilesystemApi] Не указан projectId при подключении к WebSocket');
return false;
}
try {
if (!this.parentSdk || typeof this.parentSdk.getWebSocketClient !== 'function') {
throw new Error('Родительский SDK не настроен или не поддерживает WebSocket');
}
this.wsClient = this.parentSdk.getWebSocketClient();
// Используем метод getFileSystemClient из SDK для подключения
const fileSystemClient = this.parentSdk.getFileSystemClient();
if (!fileSystemClient) {
throw new Error('Клиент файловой системы не доступен');
}
// Подключаемся с projectId
const connected = await fileSystemClient.connectToProject(projectId);
if (!connected) {
console.warn('[FilesystemApi] Не удалось подключиться к WebSocket для файловой системы');
}
else {
// Сохраняем активный ID проекта
this.activeProjectId = projectId;
}
return connected;
}
catch (error) {
console.error('[FilesystemApi] Ошибка при подключении к WebSocket:', error.message);
return false;
}
}
/**
* Подключается к проекту через WebSocket (альтернативный синтаксис)
* @param projectId ID проекта
* @returns Результат подключения
*/
async connectToProject(projectId) {
return this.connectWebSocket(projectId);
}
/**
* Отключается от WebSocket
* @returns {Promise<void>}
*/
async disconnectWebSocket() {
if (this.wsClient) {
await this.wsClient.disconnect(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM);
this.activeProjectId = null;
}
}
/**
* Проверяет, подключен ли WebSocket
* @returns {boolean} Состояние подключения
*/
isWebSocketConnected() {
return this.wsClient ? this.wsClient.isConnected(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM) : false;
}
/**
* Получает активный ID проекта
* @returns ID проекта или null
*/
getActiveProjectId() {
return this.activeProjectId;
}
/**
* Подписывается на событие через WebSocket
* @param event Название события
* @param callback Функция обратного вызова
*/
on(event, callback) {
if (!this.wsClient) {
console.warn('[FilesystemApi] WebSocket не подключен');
return;
}
this.wsClient.on(event, callback);
}
/**
* Отправляет событие через WebSocket
* @param event Название события
* @param data Данные для отправки
*/
emitSocketEvent(event, data) {
if (!this.wsClient) {
console.warn('[FilesystemApi] WebSocket не подключен');
return;
}
this.wsClient.send(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM, event, data);
}
}
exports.FilesystemApi = FilesystemApi;
//# sourceMappingURL=filesystem-api.js.map