ваше сообщение коммита

This commit is contained in:
2025-08-01 16:33:10 +03:00
parent 3ee29f16bd
commit e30d672c52
69 changed files with 690 additions and 2130 deletions

View File

@@ -16,7 +16,7 @@
class WebSocketService {
constructor() {
console.log('🔌 [WebSocket] Конструктор вызван');
// console.log('🔌 [WebSocket] Конструктор вызван');
this.ws = null;
this.isConnected = false;
this.reconnectAttempts = 0;
@@ -24,14 +24,14 @@ class WebSocketService {
this.reconnectDelay = 1000; // 1 секунда
this.listeners = new Map();
this.userId = null;
console.log('🔌 [WebSocket] Конструктор завершен');
// console.log('🔌 [WebSocket] Конструктор завершен');
}
// Подключение к WebSocket серверу
connect(userId = null) {
console.log('🔌 [WebSocket] Попытка подключения, userId:', userId);
// console.log('🔌 [WebSocket] Попытка подключения, userId:', userId);
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
console.log('🔌 [WebSocket] Уже подключен');
// console.log('🔌 [WebSocket] Уже подключен');
return;
}
@@ -43,13 +43,13 @@ class WebSocketService {
// В Docker окружении используем тот же хост, что и для HTTP
const wsUrl = `${protocol}//${window.location.host}/ws`;
console.log('🔌 [WebSocket] Подключение к:', wsUrl);
console.log('🔌 [WebSocket] Текущий хост:', window.location.host);
// console.log('🔌 [WebSocket] Подключение к:', wsUrl);
// console.log('🔌 [WebSocket] Текущий хост:', window.location.host);
this.ws = new WebSocket(wsUrl);
this.ws.onopen = () => {
console.log('✅ [WebSocket] Подключение установлено');
// console.log('✅ [WebSocket] Подключение установлено');
this.isConnected = true;
this.reconnectAttempts = 0;
@@ -65,66 +65,42 @@ class WebSocketService {
};
this.ws.onclose = (event) => {
console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason);
// console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason);
this.isConnected = false;
this.emit('disconnected', event);
// Попытка переподключения
if (this.reconnectAttempts < this.maxReconnectAttempts) {
this.reconnectAttempts++;
console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
// console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
setTimeout(() => {
this.connect(this.userId);
}, this.reconnectDelay * this.reconnectAttempts);
} else {
console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения');
// console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения');
this.emit('reconnect-failed');
}
};
this.ws.onerror = (error) => {
console.error('❌ [WebSocket] Ошибка соединения:', error);
// console.error('❌ [WebSocket] Ошибка соединения:', error);
this.emit('error', error);
};
this.ws.onmessage = (event) => {
try {
const data = JSON.parse(event.data);
console.log('📨 [WebSocket] Получено сообщение:', data);
console.log('📨 [WebSocket] Тип сообщения:', data.type);
// console.log('📨 [WebSocket] Получено сообщение:', data);
// console.log('📨 [WebSocket] Тип сообщения:', data.type);
this.handleMessage(data);
} catch (error) {
console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error);
// console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error);
}
};
this.ws.onclose = (event) => {
console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason);
this.isConnected = false;
this.emit('disconnected', event);
// Попытка переподключения
if (this.reconnectAttempts < this.maxReconnectAttempts) {
this.reconnectAttempts++;
console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
setTimeout(() => {
this.connect(this.userId);
}, this.reconnectDelay * this.reconnectAttempts);
} else {
console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения');
this.emit('reconnect-failed');
}
};
this.ws.onerror = (error) => {
console.error('❌ [WebSocket] Ошибка соединения:', error);
this.emit('error', error);
};
} catch (error) {
console.error('❌ [WebSocket] Ошибка создания соединения:', error);
// console.error('❌ [WebSocket] Ошибка создания соединения:', error);
this.emit('error', error);
}
}
@@ -134,7 +110,7 @@ class WebSocketService {
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
this.ws.send(JSON.stringify(data));
} else {
console.warn('⚠️ [WebSocket] Соединение не установлено, сообщение не отправлено:', data);
// console.warn('⚠️ [WebSocket] Соединение не установлено, сообщение не отправлено:', data);
}
}
@@ -142,57 +118,57 @@ class WebSocketService {
handleMessage(data) {
switch (data.type) {
case 'auth-success':
console.log('✅ [WebSocket] Аутентификация успешна для пользователя:', data.userId);
// console.log('✅ [WebSocket] Аутентификация успешна для пользователя:', data.userId);
this.emit('auth-success', data);
break;
case 'chat-message':
console.log('💬 [WebSocket] Новое сообщение чата:', data.message);
// console.log('💬 [WebSocket] Новое сообщение чата:', data.message);
this.emit('chat-message', data.message);
break;
case 'conversation-updated':
console.log('📝 [WebSocket] Обновление диалога:', data.conversationId);
// console.log('📝 [WebSocket] Обновление диалога:', data.conversationId);
this.emit('conversation-updated', data.conversationId);
break;
case 'messages-updated':
console.log('📨 [WebSocket] Обновление сообщений');
// console.log('📨 [WebSocket] Обновление сообщений');
this.emit('messages-updated');
break;
case 'contacts-updated':
console.log('👥 [WebSocket] Обновление контактов');
// console.log('👥 [WebSocket] Обновление контактов');
this.emit('contacts-updated');
break;
case 'tags-updated':
console.log('🔔 [websocketService] Получено сообщение tags-updated:', data);
console.log('🔔 [websocketService] Количество слушателей tags-updated:', this.listeners.get('tags-updated')?.length || 0);
// console.log('🔔 [websocketService] Получено сообщение tags-updated:', data);
// console.log('🔔 [websocketService] Количество слушателей tags-updated:', this.listeners.get('tags-updated')?.length || 0);
this.emit('tags-updated', data);
break;
case 'table-updated':
console.log('[WebSocket] table-updated:', data.tableId);
// console.log('[WebSocket] table-updated:', data.tableId);
if (tableUpdateSubscribers[data.tableId]) {
tableUpdateSubscribers[data.tableId].forEach(cb => cb(data));
}
break;
default:
console.log('❓ [WebSocket] Неизвестный тип сообщения:', data.type);
// console.log('❓ [WebSocket] Неизвестный тип сообщения:', data.type);
this.emit('unknown-message', data);
}
}
// Подписка на события
on(event, callback) {
console.log('🔌 [WebSocket] Подписка на событие:', event);
// console.log('🔌 [WebSocket] Подписка на событие:', event);
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event).push(callback);
console.log('🔌 [WebSocket] Количество слушателей для', event, ':', this.listeners.get(event).length);
// console.log('🔌 [WebSocket] Количество слушателей для', event, ':', this.listeners.get(event).length);
}
// Отписка от событий
@@ -208,20 +184,20 @@ class WebSocketService {
// Эмиссия событий
emit(event, data) {
console.log('🔌 [WebSocket] Эмиссия события:', event, 'с данными:', data);
// console.log('🔌 [WebSocket] Эмиссия события:', event, 'с данными:', data);
if (this.listeners.has(event)) {
const callbacks = this.listeners.get(event);
console.log('🔌 [WebSocket] Количество колбэков для', event, ':', callbacks.length);
// console.log('🔌 [WebSocket] Количество колбэков для', event, ':', callbacks.length);
callbacks.forEach((callback, index) => {
try {
console.log('🔌 [WebSocket] Выполняем колбэк #', index, 'для события', event);
// console.log('🔌 [WebSocket] Выполняем колбэк #', index, 'для события', event);
callback(data);
} catch (error) {
console.error(`❌ [WebSocket] Ошибка в обработчике события ${event}:`, error);
// console.error(`❌ [WebSocket] Ошибка в обработчике события ${event}:`, error);
}
});
} else {
console.log('🔌 [WebSocket] Нет слушателей для события:', event);
// console.log('🔌 [WebSocket] Нет слушателей для события:', event);
}
}
@@ -233,7 +209,7 @@ class WebSocketService {
}
this.isConnected = false;
this.listeners.clear();
console.log('🔌 [WebSocket] Отключен');
// console.log('🔌 [WebSocket] Отключен');
}
// Получение статуса соединения
@@ -249,7 +225,7 @@ class WebSocketService {
// Создаем единственный экземпляр
const websocketService = new WebSocketService();
console.log('🔌 [WebSocket] Сервис создан');
// console.log('🔌 [WebSocket] Сервис создан');
// Подписчики на обновления таблиц: tableId -> [callback]
const tableUpdateSubscribers = {};
@@ -269,17 +245,17 @@ export default {
websocketService,
onTableUpdate,
};
console.log('🔌 [WebSocket] Экспорт завершен');
// console.log('🔌 [WebSocket] Экспорт завершен');
// Автоматически подключаемся при загрузке модуля
console.log('🔌 [WebSocket] Автоматическое подключение...');
// console.log('🔌 [WebSocket] Автоматическое подключение...');
setTimeout(() => {
console.log('🔌 [WebSocket] Подключаемся через 1 секунду...');
// console.log('🔌 [WebSocket] Подключаемся через 1 секунду...');
websocketService.connect();
}, 1000);
// Добавляем периодическую проверку состояния соединения
setInterval(() => {
const status = websocketService.getStatus();
console.log('🔌 [WebSocket] Статус соединения:', status);
// console.log('🔌 [WebSocket] Статус соединения:', status);
}, 10000); // Проверяем каждые 10 секунд