|
|
|
@ -13,6 +13,7 @@ import (
|
|
|
|
|
"Open_IM/pkg/common/token_verify"
|
|
|
|
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
|
|
|
|
pbChat "Open_IM/pkg/proto/chat"
|
|
|
|
|
"Open_IM/pkg/proto/sdk_ws"
|
|
|
|
|
"Open_IM/pkg/utils"
|
|
|
|
|
"context"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
@ -25,20 +26,22 @@ import (
|
|
|
|
|
var validate *validator.Validate
|
|
|
|
|
|
|
|
|
|
type paramsManagementSendMsg struct {
|
|
|
|
|
OperationID string `json:"operationID" binding:"required"`
|
|
|
|
|
SendID string `json:"sendID" binding:"required"`
|
|
|
|
|
RecvID string `json:"recvID" binding:"required"`
|
|
|
|
|
SenderNickName string `json:"senderNickName" `
|
|
|
|
|
SenderFaceURL string `json:"senderFaceURL" `
|
|
|
|
|
SenderPlatformID int32 `json:"senderPlatformID"`
|
|
|
|
|
ForceList []string `json:"forceList" `
|
|
|
|
|
Content map[string]interface{} `json:"content" binding:"required"`
|
|
|
|
|
ContentType int32 `json:"contentType" binding:"required"`
|
|
|
|
|
SessionType int32 `json:"sessionType" binding:"required"`
|
|
|
|
|
IsOnlineOnly bool `json:"isOnlineOnly"`
|
|
|
|
|
OperationID string `json:"operationID" binding:"required"`
|
|
|
|
|
SendID string `json:"sendID" binding:"required"`
|
|
|
|
|
RecvID string `json:"recvID" `
|
|
|
|
|
GroupID string `json:"groupID" `
|
|
|
|
|
SenderNickName string `json:"senderNickName" `
|
|
|
|
|
SenderFaceURL string `json:"senderFaceURL" `
|
|
|
|
|
SenderPlatformID int32 `json:"senderPlatformID"`
|
|
|
|
|
ForceList []string `json:"forceList" `
|
|
|
|
|
Content map[string]interface{} `json:"content" binding:"required"`
|
|
|
|
|
ContentType int32 `json:"contentType" binding:"required"`
|
|
|
|
|
SessionType int32 `json:"sessionType" binding:"required"`
|
|
|
|
|
IsOnlineOnly bool `json:"isOnlineOnly"`
|
|
|
|
|
OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newUserSendMsgReq(params *paramsManagementSendMsg) *pbChat.UserSendMsgReq {
|
|
|
|
|
func newUserSendMsgReq(params *paramsManagementSendMsg) *pbChat.SendMsgReq {
|
|
|
|
|
var newContent string
|
|
|
|
|
switch params.ContentType {
|
|
|
|
|
case constant.Text:
|
|
|
|
@ -53,26 +56,31 @@ func newUserSendMsgReq(params *paramsManagementSendMsg) *pbChat.UserSendMsgReq {
|
|
|
|
|
newContent = utils.StructToJsonString(params.Content)
|
|
|
|
|
default:
|
|
|
|
|
}
|
|
|
|
|
options := make(map[string]int32, 2)
|
|
|
|
|
options := make(map[string]bool, 2)
|
|
|
|
|
if params.IsOnlineOnly {
|
|
|
|
|
options["history"] = 0
|
|
|
|
|
options["persistent"] = 0
|
|
|
|
|
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
|
|
|
|
utils.SetSwitchFromOptions(options, constant.IsHistory, false)
|
|
|
|
|
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
|
|
|
|
}
|
|
|
|
|
pbData := pbChat.UserSendMsgReq{
|
|
|
|
|
ReqIdentifier: constant.WSSendMsg,
|
|
|
|
|
SendID: params.SendID,
|
|
|
|
|
SenderNickName: params.SenderNickName,
|
|
|
|
|
SenderFaceURL: params.SenderFaceURL,
|
|
|
|
|
OperationID: params.OperationID,
|
|
|
|
|
PlatformID: params.SenderPlatformID,
|
|
|
|
|
SessionType: params.SessionType,
|
|
|
|
|
MsgFrom: constant.UserMsgType,
|
|
|
|
|
ContentType: params.ContentType,
|
|
|
|
|
RecvID: params.RecvID,
|
|
|
|
|
ForceList: params.ForceList,
|
|
|
|
|
Content: newContent,
|
|
|
|
|
ClientMsgID: utils.GetMsgID(params.SendID),
|
|
|
|
|
Options: utils.MapIntToJsonString(options),
|
|
|
|
|
pbData := pbChat.SendMsgReq{
|
|
|
|
|
OperationID: params.OperationID,
|
|
|
|
|
MsgData: &open_im_sdk.MsgData{
|
|
|
|
|
SendID: params.SendID,
|
|
|
|
|
RecvID: params.RecvID,
|
|
|
|
|
GroupID: params.GroupID,
|
|
|
|
|
ClientMsgID: utils.GetMsgID(params.SendID),
|
|
|
|
|
SenderPlatformID: params.SenderPlatformID,
|
|
|
|
|
SenderNickName: params.SenderNickName,
|
|
|
|
|
SenderFaceURL: params.SenderFaceURL,
|
|
|
|
|
SessionType: params.SessionType,
|
|
|
|
|
MsgFrom: constant.SysMsgType,
|
|
|
|
|
ContentType: params.ContentType,
|
|
|
|
|
Content: []byte(newContent),
|
|
|
|
|
ForceList: params.ForceList,
|
|
|
|
|
CreateTime: utils.GetCurrentTimestampByNano(),
|
|
|
|
|
Options: options,
|
|
|
|
|
OfflinePushInfo: params.OfflinePushInfo,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
return &pbData
|
|
|
|
|
}
|
|
|
|
@ -135,6 +143,19 @@ func ManagementSendMsg(c *gin.Context) {
|
|
|
|
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""})
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
switch params.SessionType {
|
|
|
|
|
case constant.SingleChatType:
|
|
|
|
|
if len(params.RecvID) == 0 {
|
|
|
|
|
log.NewError(params.OperationID, "recvID is a null string")
|
|
|
|
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""})
|
|
|
|
|
}
|
|
|
|
|
case constant.GroupChatType:
|
|
|
|
|
if len(params.GroupID) == 0 {
|
|
|
|
|
log.NewError(params.OperationID, "groupID is a null string")
|
|
|
|
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
log.InfoByKv("Ws call success to ManagementSendMsgReq", params.OperationID, "Parameters", params)
|
|
|
|
|
|
|
|
|
@ -146,7 +167,7 @@ func ManagementSendMsg(c *gin.Context) {
|
|
|
|
|
|
|
|
|
|
log.Info("", "", "api ManagementSendMsg call, api call rpc...")
|
|
|
|
|
|
|
|
|
|
reply, err := client.UserSendMsg(context.Background(), pbData)
|
|
|
|
|
reply, err := client.SendMsg(context.Background(), pbData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
|
|
|
|
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
|
|
|
|
|