Merge branch 'v2.3.0release' of github.com:OpenIMSDK/Open-IM-Server into v2.3.0release

This commit is contained in:
wangchuxiao 2023-01-13 19:47:47 +08:00
commit f9b39e91ee
9 changed files with 88 additions and 63 deletions

@ -1 +1 @@
Subproject commit a9f57645a5edf7e327e711ea49137676b5e0fbe3 Subproject commit e7bf4b2a2066e8836dccd908d11b4d37c1c6a4ce

View File

@ -72,7 +72,7 @@ func GetMessageListReactionExtensions(c *gin.Context) {
reqPb rpc.GetMessageListReactionExtensionsReq reqPb rpc.GetMessageListReactionExtensionsReq
) )
if err := c.BindJSON(&req); err != nil { if err := c.BindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
@ -86,7 +86,7 @@ func GetMessageListReactionExtensions(c *gin.Context) {
if !ok { if !ok {
errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
log.NewError(req.OperationID, errMsg) log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusOK, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }

View File

@ -376,7 +376,7 @@ func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOffl
oldConnMap := ws.getUserAllCons(v) oldConnMap := ws.getUserAllCons(v)
if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn]
log.NewWarn(req.OperationID, "send kick msg, close connection ", req.PlatformID, v) log.NewWarn(req.OperationID, "send kick msg, close connection ", req.PlatformID, v)
ws.sendKickMsg(conn) ws.sendKickMsg(conn, req.OperationID)
conn.Close() conn.Close()
} }
} }

View File

@ -253,7 +253,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn
if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn]
if oldConn, ok := oldConnMap[platformID]; ok { if oldConn, ok := oldConnMap[platformID]; ok {
log.NewDebug(operationID, uid, platformID, "kick old conn") log.NewDebug(operationID, uid, platformID, "kick old conn")
ws.sendKickMsg(oldConn) ws.sendKickMsg(oldConn, operationID)
m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID))
if err != nil && err != go_redis.Nil { if err != nil && err != go_redis.Nil {
log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID))
@ -302,11 +302,12 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn
case constant.WebAndOther: case constant.WebAndOther:
} }
} }
func (ws *WServer) sendKickMsg(oldConn *UserConn) { func (ws *WServer) sendKickMsg(oldConn *UserConn, operationID string) {
mReply := Resp{ mReply := Resp{
ReqIdentifier: constant.WSKickOnlineMsg, ReqIdentifier: constant.WSKickOnlineMsg,
ErrCode: constant.ErrTokenInvalid.ErrCode, ErrCode: constant.ErrTokenInvalid.ErrCode,
ErrMsg: constant.ErrTokenInvalid.ErrMsg, ErrMsg: constant.ErrTokenInvalid.ErrMsg,
OperationID: operationID,
} }
var b bytes.Buffer var b bytes.Buffer
enc := gob.NewEncoder(&b) enc := gob.NewEncoder(&b)
@ -422,7 +423,7 @@ func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn {
return nil return nil
} }
//func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { // func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) {
// rwLock.RLock() // rwLock.RLock()
// defer rwLock.RUnlock() // defer rwLock.RUnlock()
// //
@ -434,7 +435,7 @@ func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn {
// return uid, platform // return uid, platform
// } // }
// return "", 0 // return "", 0
//} // }
func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operationID string) (isPass, compression bool) { func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operationID string) (isPass, compression bool) {
status := http.StatusUnauthorized status := http.StatusUnauthorized
query := r.URL.Query() query := r.URL.Query()

View File

@ -743,6 +743,27 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
resp.ErrMsg = constant.ErrDB.ErrMsg resp.ErrMsg = constant.ErrDB.ErrMsg
return &resp, nil return &resp, nil
} }
reqPb := pbConversation.ModifyConversationFieldReq{Conversation: &pbConversation.Conversation{}}
reqPb.OperationID = req.OperationID
reqPb.UserIDList = okUserIDList
reqPb.FieldType = constant.FieldUnread
reqPb.Conversation.GroupID = req.GroupID
reqPb.Conversation.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.SuperGroupChatType)
reqPb.Conversation.ConversationType = int32(constant.SuperGroupChatType)
reqPb.Conversation.UpdateUnreadCountTime = utils.GetCurrentTimestampByMill()
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID)
if etcdConn == nil {
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(req.OperationID, errMsg)
}
client := pbConversation.NewConversationClient(etcdConn)
respPb, err := client.ModifyConversationField(context.Background(), &reqPb)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ModifyConversationField rpc failed, ", reqPb.String(), err.Error())
} else {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "ModifyConversationField success", respPb.String())
}
} }
if groupInfo.GroupType != constant.SuperGroup { if groupInfo.GroupType != constant.SuperGroup {

View File

@ -300,18 +300,19 @@ func (rpc *rpcChat) AddMessageReactionExtensions(ctx context.Context, req *msg.A
} }
return &rResp, nil return &rResp, nil
} }
if !req.IsExternalExtensions {
rResp.ErrCode = 200 //if !req.IsExternalExtensions {
rResp.ErrMsg = "only extenalextensions message can be used" // rResp.ErrCode = 200
for _, value := range req.ReactionExtensionList { // rResp.ErrMsg = "only extenalextensions message can be used"
temp := new(msg.KeyValueResp) // for _, value := range req.ReactionExtensionList {
temp.KeyValue = value // temp := new(msg.KeyValueResp)
temp.ErrMsg = callbackResp.ErrMsg // temp.KeyValue = value
temp.ErrCode = 100 // temp.ErrMsg = callbackResp.ErrMsg
rResp.Result = append(rResp.Result, temp) // temp.ErrCode = 100
} // rResp.Result = append(rResp.Result, temp)
return &rResp, nil // }
} // return &rResp, nil
//}
//if ExternalExtension //if ExternalExtension
var isHistory bool var isHistory bool
if req.IsReact { if req.IsReact {
@ -321,6 +322,7 @@ func (rpc *rpcChat) AddMessageReactionExtensions(ctx context.Context, req *msg.A
} }
rResp.MsgFirstModifyTime = callbackResp.MsgFirstModifyTime rResp.MsgFirstModifyTime = callbackResp.MsgFirstModifyTime
rResp.Result = callbackResp.ResultReactionExtensionList rResp.Result = callbackResp.ResultReactionExtensionList
rResp.IsReact = callbackResp.IsReact
ExtendMessageAddedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, isHistory, false) ExtendMessageAddedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, isHistory, false)
return &rResp, nil return &rResp, nil
} }

View File

@ -78,7 +78,7 @@ type ModifyMessageReactionExtensionsResp struct {
type OperateMessageListReactionExtensionsReq struct { type OperateMessageListReactionExtensionsReq struct {
OperationID string `json:"operationID" binding:"required"` OperationID string `json:"operationID" binding:"required"`
SourceID string `json:"sourceID" binding:"required"` SourceID string `json:"sourceID" binding:"required"`
SessionType string `json:"sessionType" binding:"required"` SessionType int32 `json:"sessionType" binding:"required"`
IsExternalExtensions bool `json:"isExternalExtensions"` IsExternalExtensions bool `json:"isExternalExtensions"`
TypeKeyList []string `json:"typeKeyList"` TypeKeyList []string `json:"typeKeyList"`
MessageReactionKeyList []*msg.GetMessageListReactionExtensionsReq_MessageReactionKey `json:"messageReactionKeyList" binding:"required"` MessageReactionKeyList []*msg.GetMessageListReactionExtensionsReq_MessageReactionKey `json:"messageReactionKeyList" binding:"required"`
@ -95,6 +95,7 @@ type OperateMessageListReactionExtensionsResp struct {
type SetMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq type SetMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq
type SetMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp type SetMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp
type AddMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq type AddMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq
type AddMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp type AddMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp

View File

@ -128,5 +128,6 @@ type CallbackAddMessageReactionExtReq struct {
type CallbackAddMessageReactionExtResp struct { type CallbackAddMessageReactionExtResp struct {
*CommonCallbackResp *CommonCallbackResp
ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"` ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
IsReact bool `json:"isReact"`
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
} }

View File

@ -145,40 +145,6 @@ func DelJoinedGroupIDListFromCache(userID string) error {
return db.DB.Rc.TagAsDeleted(joinedGroupListCache + userID) return db.DB.Rc.TagAsDeleted(joinedGroupListCache + userID)
} }
func GetGroupMemberIDListFromCache(groupID string) ([]string, error) {
f := func() (string, error) {
groupInfo, err := GetGroupInfoFromCache(groupID)
if err != nil {
return "", utils.Wrap(err, "GetGroupInfoFromCache failed")
}
var groupMemberIDList []string
if groupInfo.GroupType == constant.SuperGroup {
superGroup, err := db.DB.GetSuperGroup(groupID)
if err != nil {
return "", utils.Wrap(err, "")
}
groupMemberIDList = superGroup.MemberIDList
} else {
groupMemberIDList, err = imdb.GetGroupMemberIDListByGroupID(groupID)
if err != nil {
return "", utils.Wrap(err, "")
}
}
bytes, err := json.Marshal(groupMemberIDList)
if err != nil {
return "", utils.Wrap(err, "")
}
return string(bytes), nil
}
groupIDListStr, err := db.DB.Rc.Fetch(groupCache+groupID, time.Second*30*60, f)
if err != nil {
return nil, utils.Wrap(err, "")
}
var groupMemberIDList []string
err = json.Unmarshal([]byte(groupIDListStr), &groupMemberIDList)
return groupMemberIDList, utils.Wrap(err, "")
}
func DelGroupMemberIDListFromCache(groupID string) error { func DelGroupMemberIDListFromCache(groupID string) error {
err := db.DB.Rc.TagAsDeleted(groupCache + groupID) err := db.DB.Rc.TagAsDeleted(groupCache + groupID)
return err return err
@ -458,6 +424,39 @@ func GetGroupMemberListHashFromCache(groupID string) (uint64, error) {
hashCodeUint64, err := strconv.Atoi(hashCode) hashCodeUint64, err := strconv.Atoi(hashCode)
return uint64(hashCodeUint64), err return uint64(hashCodeUint64), err
} }
func GetGroupMemberIDListFromCache(groupID string) ([]string, error) {
f := func() (string, error) {
groupInfo, err := GetGroupInfoFromCache(groupID)
if err != nil {
return "", utils.Wrap(err, "GetGroupInfoFromCache failed")
}
var groupMemberIDList []string
if groupInfo.GroupType == constant.SuperGroup {
superGroup, err := db.DB.GetSuperGroup(groupID)
if err != nil {
return "", utils.Wrap(err, "")
}
groupMemberIDList = superGroup.MemberIDList
} else {
groupMemberIDList, err = imdb.GetGroupMemberIDListByGroupID(groupID)
if err != nil {
return "", utils.Wrap(err, "")
}
}
bytes, err := json.Marshal(groupMemberIDList)
if err != nil {
return "", utils.Wrap(err, "")
}
return string(bytes), nil
}
groupIDListStr, err := db.DB.Rc.Fetch(groupCache+groupID, time.Second*30*60, f)
if err != nil {
return nil, utils.Wrap(err, "")
}
var groupMemberIDList []string
err = json.Unmarshal([]byte(groupIDListStr), &groupMemberIDList)
return groupMemberIDList, utils.Wrap(err, "")
}
func DelGroupMemberListHashFromCache(groupID string) error { func DelGroupMemberListHashFromCache(groupID string) error {
err := db.DB.Rc.TagAsDeleted(groupMemberListHashCache + groupID) err := db.DB.Rc.TagAsDeleted(groupMemberListHashCache + groupID)