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:
@@ -41,7 +41,8 @@ export type WSMessageType =
|
||||
| 'call_ended'
|
||||
| 'call_peer_muted'
|
||||
| 'call_invited'
|
||||
| 'call_answered_elsewhere';
|
||||
| 'call_answered_elsewhere'
|
||||
| 'sync_required';
|
||||
|
||||
export interface WSCallIncomingMessage {
|
||||
type: 'call_incoming';
|
||||
@@ -249,6 +250,10 @@ export interface WSGroupRecallMessage {
|
||||
message_id: string;
|
||||
}
|
||||
|
||||
export interface WSSyncRequiredMessage {
|
||||
type: 'sync_required';
|
||||
}
|
||||
|
||||
export interface WSServerMessage {
|
||||
event_id?: number;
|
||||
type: string;
|
||||
@@ -279,7 +284,8 @@ export type WSMessage =
|
||||
| WSCallPeerMutedMessage
|
||||
| WSCallInvitedMessage
|
||||
| WSCallAnsweredElsewhereMessage
|
||||
| WSErrorMessage;
|
||||
| WSErrorMessage
|
||||
| WSSyncRequiredMessage;
|
||||
|
||||
type MessageHandler<T extends WSMessage = WSMessage> = (message: T) => void;
|
||||
type ConnectionHandler = () => void;
|
||||
@@ -496,6 +502,9 @@ class WebSocketService {
|
||||
case 'call_answered_elsewhere':
|
||||
this.handleCallAnsweredElsewhere(payload);
|
||||
break;
|
||||
case 'sync_required':
|
||||
this.emit('sync_required', { type: 'sync_required' });
|
||||
break;
|
||||
default:
|
||||
console.log('Unknown message type:', type);
|
||||
}
|
||||
@@ -886,6 +895,11 @@ class WebSocketService {
|
||||
this.ws.send(JSON.stringify(message));
|
||||
}
|
||||
|
||||
// 发送 ACK 确认(fire-and-forget)
|
||||
sendAck(messageId: string): void {
|
||||
this.sendFireAndForget('ack', { message_id: messageId });
|
||||
}
|
||||
|
||||
// 通过WebSocket发送
|
||||
private sendViaWebSocket(type: string, payload: any): Promise<any> {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
Reference in New Issue
Block a user