fix: reinstall app sync data split.

This commit is contained in:
Gordon
2024-06-28 11:41:27 +08:00
parent b162725bd6
commit f0bd767d81
15 changed files with 292 additions and 70 deletions

View File

@@ -16,6 +16,7 @@ package interaction
import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
"strings"
"github.com/openimsdk/openim-sdk-core/v3/pkg/common"
@@ -148,15 +149,31 @@ func (m *MsgSyncer) compareSeqsAndBatchSync(ctx context.Context, maxSeqToSync ma
messagesSeqMap[conversationID] = seq
}
}
var notificationSeqs []*model_struct.NotificationSeqs
for conversationID, seq := range notificationsSeqMap {
err := m.db.SetNotificationSeq(ctx, conversationID, seq)
if err != nil {
log.ZWarn(ctx, "SetNotificationSeq err", err, "conversationID", conversationID, "seq", seq)
continue
} else {
m.syncedMaxSeqs[conversationID] = seq
}
notificationSeqs = append(notificationSeqs, &model_struct.NotificationSeqs{
ConversationID: conversationID,
Seq: seq,
})
m.syncedMaxSeqs[conversationID] = seq
}
err := m.db.BatchInsertNotificationSeq(ctx, notificationSeqs)
if err != nil {
log.ZWarn(ctx, "BatchInsertNotificationSeq err", err)
}
//for conversationID, seq := range notificationsSeqMap {
// err := m.db.SetNotificationSeq(ctx, conversationID, seq)
// if err != nil {
// log.ZWarn(ctx, "SetNotificationSeq err", err, "conversationID", conversationID, "seq", seq)
// continue
// } else {
// m.syncedMaxSeqs[conversationID] = seq
// }
//}
for conversationID, maxSeq := range messagesSeqMap {
if syncedMaxSeq, ok := m.syncedMaxSeqs[conversationID]; ok {
if maxSeq > syncedMaxSeq {
@@ -217,7 +234,12 @@ func (m *MsgSyncer) pushTriggerAndSync(ctx context.Context, pullMsgs map[string]
// Called after successful reconnection to synchronize the latest message
func (m *MsgSyncer) doConnected(ctx context.Context) {
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncBegin}, m.conversationCh)
reinstalled := m.reinstalled
if reinstalled {
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.AppDataSyncStart}, m.conversationCh)
} else {
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncBegin}, m.conversationCh)
}
var resp sdkws.GetMaxSeqResp
if err := m.longConnMgr.SendReqWaitResp(m.ctx, &sdkws.GetMaxSeqReq{UserID: m.loginUserID}, constant.GetNewestSeq, &resp); err != nil {
log.ZError(m.ctx, "get max seq error", err)
@@ -227,7 +249,11 @@ func (m *MsgSyncer) doConnected(ctx context.Context) {
log.ZDebug(m.ctx, "get max seq success", "resp", resp)
}
m.compareSeqsAndBatchSync(ctx, resp.MaxSeqs, connectPullNums)
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncEnd}, m.conversationCh)
if reinstalled {
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.AppDataSyncFinish}, m.conversationCh)
} else {
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncEnd}, m.conversationCh)
}
}
func IsNotification(conversationID string) bool {
@@ -363,24 +389,24 @@ func (m *MsgSyncer) syncMsgBySeqs(ctx context.Context, conversationID string, se
// triggers a conversation with a new message.
func (m *MsgSyncer) triggerConversation(ctx context.Context, msgs map[string]*sdkws.PullMsgs) error {
if len(msgs) >= 0 {
if len(msgs) > 0 {
err := common.TriggerCmdNewMsgCome(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
if err != nil {
log.ZError(ctx, "triggerCmdNewMsgCome err", err, "msgs", msgs)
}
log.ZDebug(ctx, "triggerConversation", "msgs", msgs)
return err
} else {
log.ZDebug(ctx, "triggerConversation is nil", "msgs", msgs)
}
return nil
}
func (m *MsgSyncer) triggerNotification(ctx context.Context, msgs map[string]*sdkws.PullMsgs) error {
if len(msgs) >= 0 {
err := common.TriggerCmdNotification(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
if err != nil {
log.ZError(ctx, "triggerCmdNewMsgCome err", err, "msgs", msgs)
}
return err
if len(msgs) > 0 {
common.TriggerCmdNotification(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
} else {
log.ZDebug(ctx, "triggerNotification is nil", "msgs", msgs)
}
return nil