You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Open-IM-Server/internal/rpc/msg/pull_message.go

85 lines
2.8 KiB

package msg
4 years ago
import (
"context"
"github.com/garyburd/redigo/redis"
4 years ago
commonDB "Open_IM/pkg/common/db"
"Open_IM/pkg/common/log"
pbMsg "Open_IM/pkg/proto/chat"
3 years ago
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
4 years ago
)
func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeqReq) (*pbMsg.GetMaxAndMinSeqResp, error) {
3 years ago
log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String())
4 years ago
//seq, err := model.GetBiggestSeqFromReceive(in.UserID)
maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID)
minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID)
resp := new(pbMsg.GetMaxAndMinSeqResp)
if err1 == nil {
3 years ago
resp.MaxSeq = uint32(maxSeq)
} else if err1 == redis.ErrNil {
resp.MaxSeq = 0
4 years ago
} else {
log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err1.Error())
resp.ErrCode = 200
resp.ErrMsg = "redis get err"
4 years ago
}
if err2 == nil {
3 years ago
resp.MinSeq = uint32(minSeq)
} else if err2 == redis.ErrNil {
resp.MinSeq = 0
} else {
log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error())
resp.ErrCode = 201
resp.ErrMsg = "redis get err"
}
return resp, nil
4 years ago
}
func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) {
log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String())
resp := new(open_im_sdk.PullMessageBySeqListResp)
3 years ago
//msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID)
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID)
if err != nil {
if err != redis.ErrNil {
log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList)
} else {
log.Debug(in.OperationID, "get message from redis is nil", failedSeqList)
}
msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, failedSeqList, in.OperationID)
if err1 != nil {
log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error())
resp.ErrCode = 201
resp.ErrMsg = err.Error()
return resp, nil
} else {
redisMsgList = append(redisMsgList, msgList...)
resp.List = redisMsgList
}
} else {
resp.List = redisMsgList
}
3 years ago
//respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID)
//respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat)
return resp, nil
4 years ago
}
type MsgFormats []*open_im_sdk.MsgData
4 years ago
// Implement the sort.Interface interface to get the number of elements method
4 years ago
func (s MsgFormats) Len() int {
return len(s)
}
//Implement the sort.Interface interface comparison element method
4 years ago
func (s MsgFormats) Less(i, j int) bool {
return s[i].SendTime < s[j].SendTime
}
//Implement the sort.Interface interface exchange element method
4 years ago
func (s MsgFormats) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}