refactor(messaging): replace WebSocket with SSE for real-time message handling
Some checks failed
Frontend CI / build-android-apk (push) Has been cancelled
Frontend CI / build-and-push-web (push) Has been cancelled
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / ota-android (pull_request) Has been skipped
Frontend CI / build-and-push-web (pull_request) Has been cancelled
Frontend CI / build-android-apk (pull_request) Has been cancelled
Some checks failed
Frontend CI / build-android-apk (push) Has been cancelled
Frontend CI / build-and-push-web (push) Has been cancelled
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / ota-android (pull_request) Has been skipped
Frontend CI / build-and-push-web (pull_request) Has been cancelled
Frontend CI / build-android-apk (pull_request) Has been cancelled
Replace WebSocket-based real-time communication with Server-Sent Events (SSE) across the messaging infrastructure. This includes: - Create new SSEClient datasource to manage SSE connections - Create new SSEMessageHandler to process SSE events - Update ProcessMessageUseCase to use SSEClient instead of WebSocketClient - Update MessageManager and MessageStateManager to work with SSE handlers - Rename connection state variables from `isWebSocketConnected` to `isSSEConnected` - Update type definitions in dto.ts (WSEventType → SSEEventType, etc.) - Delete obsolete WebSocketClient and WebSocketMessageHandler files - Update comments and documentation to reflect SSE terminology This refactoring aligns with the backend's SSE implementation for better compatibility with React Native's networking capabilities.
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
/**
|
||||
* ProcessMessageUseCase - 处理消息用例
|
||||
* 处理消息的业务逻辑,协调 Repository 和 WebSocketClient
|
||||
* 处理消息的业务逻辑,协调 Repository 和 SSEClient
|
||||
* 纯业务逻辑,无UI依赖
|
||||
*/
|
||||
|
||||
import { messageRepository } from '../../data/repositories/MessageRepository';
|
||||
import { webSocketClient, WebSocketEventType } from '../../data/datasources/WebSocketClient';
|
||||
import { sseClient, SSEEventType } from '../../data/datasources/SSEClient';
|
||||
import {
|
||||
Message,
|
||||
Conversation,
|
||||
@@ -62,7 +62,7 @@ class ProcessMessageUseCase {
|
||||
*/
|
||||
initialize(currentUserId: string | null): void {
|
||||
this.currentUserId = currentUserId;
|
||||
this.setupWebSocketListeners();
|
||||
this.setupSSEListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,51 +79,51 @@ class ProcessMessageUseCase {
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置WebSocket监听器
|
||||
* 设置SSE监听器
|
||||
*/
|
||||
private setupWebSocketListeners(): void {
|
||||
private setupSSEListeners(): void {
|
||||
// 监听私聊消息
|
||||
const unsubChat = webSocketClient.on('chat', (message) => {
|
||||
const unsubChat = sseClient.on('chat', (message) => {
|
||||
this.handleNewMessage(message);
|
||||
});
|
||||
|
||||
// 监听群聊消息
|
||||
const unsubGroupMessage = webSocketClient.on('group_message', (message) => {
|
||||
const unsubGroupMessage = sseClient.on('group_message', (message) => {
|
||||
this.handleNewMessage(message);
|
||||
});
|
||||
|
||||
// 监听私聊已读回执
|
||||
const unsubRead = webSocketClient.on('read', (message) => {
|
||||
const unsubRead = sseClient.on('read', (message) => {
|
||||
this.handleReadReceipt(message);
|
||||
});
|
||||
|
||||
// 监听群聊已读回执
|
||||
const unsubGroupRead = webSocketClient.on('group_read', (message) => {
|
||||
const unsubGroupRead = sseClient.on('group_read', (message) => {
|
||||
this.handleGroupReadReceipt(message);
|
||||
});
|
||||
|
||||
// 监听私聊消息撤回
|
||||
const unsubRecall = webSocketClient.on('recall', (message) => {
|
||||
const unsubRecall = sseClient.on('recall', (message) => {
|
||||
this.handleRecallMessage(message);
|
||||
});
|
||||
|
||||
// 监听群聊消息撤回
|
||||
const unsubGroupRecall = webSocketClient.on('group_recall', (message) => {
|
||||
const unsubGroupRecall = sseClient.on('group_recall', (message) => {
|
||||
this.handleGroupRecallMessage(message);
|
||||
});
|
||||
|
||||
// 监听群聊输入状态
|
||||
const unsubGroupTyping = webSocketClient.on('group_typing', (message) => {
|
||||
const unsubGroupTyping = sseClient.on('group_typing', (message) => {
|
||||
this.handleGroupTyping(message);
|
||||
});
|
||||
|
||||
// 监听群通知
|
||||
const unsubGroupNotice = webSocketClient.on('group_notice', (message) => {
|
||||
const unsubGroupNotice = sseClient.on('group_notice', (message) => {
|
||||
this.handleGroupNotice(message);
|
||||
});
|
||||
|
||||
// 监听连接状态
|
||||
const unsubConnected = webSocketClient.on('connected', () => {
|
||||
const unsubConnected = sseClient.on('connected', () => {
|
||||
this.notifySubscribers({
|
||||
type: 'connection_changed',
|
||||
payload: { connected: true },
|
||||
@@ -131,7 +131,7 @@ class ProcessMessageUseCase {
|
||||
});
|
||||
});
|
||||
|
||||
const unsubDisconnected = webSocketClient.on('disconnected', () => {
|
||||
const unsubDisconnected = sseClient.on('disconnected', () => {
|
||||
this.notifySubscribers({
|
||||
type: 'connection_changed',
|
||||
payload: { connected: false },
|
||||
@@ -397,7 +397,7 @@ class ProcessMessageUseCase {
|
||||
groupId: groupIdStr,
|
||||
data: data || {},
|
||||
timestamp: timestamp || Date.now(),
|
||||
messageId,
|
||||
messageId: message_id,
|
||||
seq,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user