From e1af587040ce3856b84436dc44bb4215d9d46269 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 29 Jul 2022 15:56:16 +0800 Subject: [PATCH] mongodb superGroup --- internal/push/logic/callback.go | 52 ++++++++++++++++++++------- internal/push/logic/push_to_client.go | 3 +- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 5b95e9102..9cd5158ba 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -11,11 +11,15 @@ import ( http2 "net/http" ) -func callbackBeforePush(operationID string, userIDList []string, msg *commonPb.MsgData, command string, callbackResp cbApi.CommonCallbackResp, timeOut int) cbApi.CommonCallbackResp { +func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.MsgData) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} + if !config.Config.Callback.CallbackOfflinePush.Enable { + return callbackResp + } req := cbApi.CallbackBeforePushReq{ UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{ UserStatusBaseCallback: cbApi.UserStatusBaseCallback{ - CallbackCommand: command, + CallbackCommand: constant.CallbackOfflinePushCommand, OperationID: operationID, PlatformID: msg.SenderPlatformID, Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)), @@ -31,7 +35,7 @@ func callbackBeforePush(operationID string, userIDList []string, msg *commonPb.M Content: string(msg.Content), } resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp} - if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, timeOut); err != nil { + if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() if !config.Config.Callback.CallbackOfflinePush.CallbackFailedContinue { @@ -45,20 +49,42 @@ func callbackBeforePush(operationID string, userIDList []string, msg *commonPb.M return callbackResp } -func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.MsgData) cbApi.CommonCallbackResp { - callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} - if !config.Config.Callback.CallbackOfflinePush.Enable { - return callbackResp - } - return callbackBeforePush(operationID, userIDList, msg, constant.CallbackOfflinePushCommand, callbackResp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut) -} - func callbackOnlinePush(operationID string, userIDList []string, msg *commonPb.MsgData) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackOnlinePush.Enable { return callbackResp } - return callbackBeforePush(operationID, userIDList, msg, constant.CallbackOnlinePushCommand, callbackResp, config.Config.Callback.CallbackOnlinePush.CallbackTimeOut) + req := cbApi.CallbackBeforePushReq{ + UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{ + UserStatusBaseCallback: cbApi.UserStatusBaseCallback{ + CallbackCommand: constant.CallbackOnlinePushCommand, + OperationID: operationID, + PlatformID: msg.SenderPlatformID, + Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)), + }, + UserIDList: userIDList, + }, + OfflinePushInfo: msg.OfflinePushInfo, + SendID: msg.SendID, + GroupID: msg.GroupID, + ContentType: msg.ContentType, + SessionType: msg.SessionType, + AtUserIDList: msg.AtUserIDList, + Content: string(msg.Content), + } + resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp} + if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackOnlinePush.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + if !config.Config.Callback.CallbackOnlinePush.CallbackFailedContinue { + callbackResp.ActionCode = constant.ActionForbidden + return callbackResp + } else { + callbackResp.ActionCode = constant.ActionAllow + return callbackResp + } + } + return callbackResp } func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg *commonPb.MsgData, pushToUserList *[]string) cbApi.CommonCallbackResp { @@ -85,7 +111,7 @@ func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() - if !config.Config.Callback.CallbackOfflinePush.CallbackFailedContinue { + if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackFailedContinue { callbackResp.ActionCode = constant.ActionForbidden return callbackResp } else { diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 16087026b..11f304433 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -169,7 +169,8 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { return } log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "callback userIDList Resp", pushToUserIDList) - } else { + } + if len(pushToUserIDList) == 0 { getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pushMsg.OperationID, GroupID: pushMsg.MsgData.GroupID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, pushMsg.OperationID) if etcdConn == nil {