mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-28 21:19:02 +08:00
Merge branch 'v2.3.0release' of github.com:OpenIMSDK/Open-IM-Server into v2.3.0release
This commit is contained in:
commit
f9b39e91ee
@ -1 +1 @@
|
|||||||
Subproject commit a9f57645a5edf7e327e711ea49137676b5e0fbe3
|
Subproject commit e7bf4b2a2066e8836dccd908d11b4d37c1c6a4ce
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user