Files
open-im-server/internal/rpc/msg/pull_message.go
T

127 lines
4.5 KiB
Go
Raw Normal View History

2021-12-23 17:34:32 +08:00
package msg
2021-05-26 19:40:38 +08:00
import (
2022-07-22 17:51:17 +08:00
"Open_IM/pkg/utils"
2021-05-26 19:40:38 +08:00
"context"
2022-06-15 16:50:45 +08:00
go_redis "github.com/go-redis/redis/v8"
2021-05-26 19:40:38 +08:00
commonDB "Open_IM/pkg/common/db"
"Open_IM/pkg/common/log"
2022-01-20 11:36:43 +08:00
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
2022-09-15 12:07:28 +08:00
promePkg "Open_IM/pkg/common/prometheus"
2021-05-26 19:40:38 +08:00
)
2022-05-28 18:10:08 +08:00
func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAndMinSeqReq) (*open_im_sdk.GetMaxAndMinSeqResp, error) {
2022-05-10 09:09:37 +08:00
log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String())
2022-05-28 18:10:08 +08:00
resp := new(open_im_sdk.GetMaxAndMinSeqResp)
m := make(map[string]*open_im_sdk.MaxAndMinSeq)
2022-07-22 16:55:29 +08:00
var maxSeq, minSeq uint64
2022-07-22 17:51:17 +08:00
var err1, err2 error
maxSeq, err1 = commonDB.DB.GetUserMaxSeq(in.UserID)
minSeq, err2 = commonDB.DB.GetUserMinSeq(in.UserID)
if (err1 != nil && err1 != go_redis.Nil) || (err2 != nil && err2 != go_redis.Nil) {
log.NewError(in.OperationID, "getMaxSeq from redis error", in.String())
if err1 != nil {
log.NewError(in.OperationID, utils.GetSelfFuncName(), err1.Error())
}
if err2 != nil {
log.NewError(in.OperationID, utils.GetSelfFuncName(), err2.Error())
}
resp.ErrCode = 200
resp.ErrMsg = "redis get err"
2022-07-22 16:55:29 +08:00
return resp, nil
}
resp.MaxSeq = uint32(maxSeq)
resp.MinSeq = uint32(minSeq)
for _, groupID := range in.GroupIDList {
x := new(open_im_sdk.MaxAndMinSeq)
maxSeq, _ := commonDB.DB.GetGroupMaxSeq(groupID)
minSeq, _ := commonDB.DB.GetGroupUserMinSeq(groupID, in.UserID)
x.MaxSeq = uint32(maxSeq)
x.MinSeq = uint32(minSeq)
m[groupID] = x
2021-05-26 19:40:38 +08:00
}
2022-07-22 19:20:57 +08:00
resp.GroupMaxAndMinSeq = m
return resp, nil
2021-05-26 19:40:38 +08:00
}
2022-07-26 15:16:46 +08:00
2021-12-23 17:34:32 +08:00
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())
2021-12-23 17:34:32 +08:00
resp := new(open_im_sdk.PullMessageBySeqListResp)
2022-05-28 18:10:08 +08:00
m := make(map[string]*open_im_sdk.MsgDataList)
2022-05-24 17:36:11 +08:00
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID)
if err != nil {
2022-06-15 16:50:45 +08:00
if err != go_redis.Nil {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromRedisFailedCounter, len(failedSeqList))
2022-05-24 17:36:11 +08:00
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 {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromMongoFailedCounter, len(failedSeqList))
2022-11-02 15:32:36 +08:00
log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error())
2022-05-24 17:36:11 +08:00
resp.ErrCode = 201
2022-11-02 15:32:36 +08:00
resp.ErrMsg = err1.Error()
2022-05-24 17:36:11 +08:00
return resp, nil
} else {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromMongoSuccessCounter, len(msgList))
2022-05-24 17:36:11 +08:00
redisMsgList = append(redisMsgList, msgList...)
resp.List = redisMsgList
}
} else {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromRedisSuccessCounter, len(redisMsgList))
2022-05-24 17:36:11 +08:00
resp.List = redisMsgList
}
2022-09-15 12:07:28 +08:00
2022-05-28 18:10:08 +08:00
for k, v := range in.GroupSeqList {
x := new(open_im_sdk.MsgDataList)
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID)
if err != nil {
2022-06-15 16:50:45 +08:00
if err != go_redis.Nil {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromRedisFailedCounter, len(failedSeqList))
2022-05-28 18:10:08 +08:00
log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList)
} else {
log.Debug(in.OperationID, "get message from redis is nil", failedSeqList)
}
2023-02-27 12:29:40 +08:00
msgList, _, err1 := commonDB.DB.GetSuperGroupMsgBySeqListMongo(k, failedSeqList, in.OperationID)
2022-05-28 18:10:08 +08:00
if err1 != nil {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromMongoFailedCounter, len(failedSeqList))
2022-11-02 15:32:36 +08:00
log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error())
2022-05-28 18:10:08 +08:00
resp.ErrCode = 201
2022-11-02 15:32:36 +08:00
resp.ErrMsg = err1.Error()
2022-05-28 18:10:08 +08:00
return resp, nil
} else {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromMongoSuccessCounter, len(msgList))
2022-05-28 18:10:08 +08:00
redisMsgList = append(redisMsgList, msgList...)
x.MsgDataList = redisMsgList
m[k] = x
}
} else {
2022-09-15 12:07:28 +08:00
promePkg.PromeAdd(promePkg.MsgPullFromRedisSuccessCounter, len(redisMsgList))
2022-05-28 18:10:08 +08:00
x.MsgDataList = redisMsgList
m[k] = x
}
}
resp.GroupMsgDataList = m
2022-01-20 11:36:43 +08:00
return resp, nil
2021-05-26 19:40:38 +08:00
}
2021-12-23 17:34:32 +08:00
type MsgFormats []*open_im_sdk.MsgData
2021-05-26 19:40:38 +08:00
2021-05-31 10:03:57 +08:00
// Implement the sort.Interface interface to get the number of elements method
2021-05-26 19:40:38 +08:00
func (s MsgFormats) Len() int {
return len(s)
}
2021-05-31 10:03:57 +08:00
//Implement the sort.Interface interface comparison element method
2021-05-26 19:40:38 +08:00
func (s MsgFormats) Less(i, j int) bool {
return s[i].SendTime < s[j].SendTime
}
2021-05-31 10:03:57 +08:00
//Implement the sort.Interface interface exchange element method
2021-05-26 19:40:38 +08:00
func (s MsgFormats) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}