From 634247a5c71aea7f0da06dccde13df53c9bf40e1 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Wed, 31 May 2023 10:36:58 +0800 Subject: [PATCH] PullMessageBySeqs --- internal/rpc/msg/sync_msg.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/sync_msg.go b/internal/rpc/msg/sync_msg.go index ae5412fd2..a9fa374f3 100644 --- a/internal/rpc/msg/sync_msg.go +++ b/internal/rpc/msg/sync_msg.go @@ -15,23 +15,47 @@ func (m *msgServer) PullMessageBySeqs(ctx context.Context, req *sdkws.PullMessag resp.NotificationMsgs = make(map[string]*sdkws.PullMsgs) for _, seq := range req.SeqRanges { if !utils.IsNotification(seq.ConversationID) { - _, msgs, err := m.MsgDatabase.GetMsgBySeqsRange(ctx, req.UserID, seq.ConversationID, seq.Begin, seq.End, seq.Num) + minSeq, msgs, err := m.MsgDatabase.GetMsgBySeqsRange(ctx, req.UserID, seq.ConversationID, seq.Begin, seq.End, seq.Num) if err != nil { log.ZWarn(ctx, "GetMsgBySeqsRange error", err, "conversationID", seq.ConversationID, "seq", seq) continue } - resp.Msgs[seq.ConversationID] = &sdkws.PullMsgs{Msgs: msgs} + var isEnd bool + switch req.Order { + case sdkws.PullOrder_PullOrderAsc: + maxSeq, err := m.MsgDatabase.GetMaxSeq(ctx, seq.ConversationID) + if err != nil { + log.ZError(ctx, "GetMaxSeq error", err, "conversationID", seq.ConversationID) + continue + } + isEnd = maxSeq <= seq.End + case sdkws.PullOrder_PullOrderDesc: + isEnd = seq.Begin <= minSeq + } + resp.Msgs[seq.ConversationID] = &sdkws.PullMsgs{Msgs: msgs, IsEnd: isEnd} } else { var seqs []int64 for i := seq.Begin; i <= seq.End; i++ { seqs = append(seqs, i) } - _, notificationMsgs, err := m.MsgDatabase.GetMsgBySeqs(ctx, req.UserID, seq.ConversationID, seqs) + minSeq, notificationMsgs, err := m.MsgDatabase.GetMsgBySeqs(ctx, req.UserID, seq.ConversationID, seqs) if err != nil { log.ZWarn(ctx, "GetMsgBySeqs error", err, "conversationID", seq.ConversationID, "seq", seq) continue } - resp.NotificationMsgs[seq.ConversationID] = &sdkws.PullMsgs{Msgs: notificationMsgs} + maxSeq, err := m.MsgDatabase.GetMaxSeq(ctx, seq.ConversationID) + if err != nil { + log.ZError(ctx, "GetMaxSeq error", err, "conversationID", seq.ConversationID) + continue + } + var isEnd bool + switch req.Order { + case sdkws.PullOrder_PullOrderAsc: + isEnd = maxSeq <= seq.End + case sdkws.PullOrder_PullOrderDesc: + isEnd = seq.Begin <= minSeq + } + resp.NotificationMsgs[seq.ConversationID] = &sdkws.PullMsgs{Msgs: notificationMsgs, IsEnd: isEnd} } } return resp, nil