feat(ws): implement sync_required event and message acknowledgement
Add support for a new `sync_required` WebSocket message type to trigger incremental synchronization of conversations, unread counts, and active messages. Also implement an `ack` mechanism to acknowledge received messages.
This commit is contained in:
@@ -155,7 +155,7 @@ export class WSMessageHandler implements IWSMessageHandler {
|
||||
if (now - this.lastReconnectSyncAt > 1500) {
|
||||
this.lastReconnectSyncAt = now;
|
||||
const activeConversation = useMessageStore.getState().getActiveConversation();
|
||||
|
||||
|
||||
if (!activeConversation) {
|
||||
this.fetchConversationsCallback(true, 'sse-reconnect').catch(error => {
|
||||
console.error('[WSMessageHandler] 连接后同步会话失败:', error);
|
||||
@@ -165,7 +165,7 @@ export class WSMessageHandler implements IWSMessageHandler {
|
||||
console.error('[WSMessageHandler] 连接后同步未读数失败:', error);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (activeConversation) {
|
||||
this.fetchMessagesCallback(activeConversation).catch(error => {
|
||||
console.error('[WSMessageHandler] 连接后同步当前会话消息失败:', error);
|
||||
@@ -174,6 +174,25 @@ export class WSMessageHandler implements IWSMessageHandler {
|
||||
}
|
||||
});
|
||||
|
||||
// 监听 sync_required 事件,触发增量同步
|
||||
wsService.on('sync_required', () => {
|
||||
console.log('[WSMessageHandler] 收到 sync_required,开始增量同步');
|
||||
const activeConversation = useMessageStore.getState().getActiveConversation();
|
||||
|
||||
this.fetchConversationsCallback(true, 'sync_required').catch(error => {
|
||||
console.error('[WSMessageHandler] sync_required 同步会话失败:', error);
|
||||
});
|
||||
this.fetchUnreadCountCallback().catch(error => {
|
||||
console.error('[WSMessageHandler] sync_required 同步未读数失败:', error);
|
||||
});
|
||||
|
||||
if (activeConversation) {
|
||||
this.fetchMessagesCallback(activeConversation).catch(error => {
|
||||
console.error('[WSMessageHandler] sync_required 同步消息失败:', error);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
wsService.onDisconnect(() => {
|
||||
useMessageStore.getState().setSSEConnected(false);
|
||||
});
|
||||
@@ -263,6 +282,9 @@ export class WSMessageHandler implements IWSMessageHandler {
|
||||
}
|
||||
this.deduplication.markMessageAsProcessed(id);
|
||||
|
||||
// 发送 ACK 确认
|
||||
wsService.sendAck(id);
|
||||
|
||||
// 对于群聊消息,获取发送者信息
|
||||
if (message.type === 'group_message' && sender_id && sender_id !== currentUserId && sender_id !== '10000') {
|
||||
this.userCacheService.getSenderInfo(sender_id).then(user => {
|
||||
|
||||
Reference in New Issue
Block a user