tencent-im/internal/entity/mesage.go
2022-09-27 11:31:23 +08:00

171 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @Author: Echo
* @Author:1711788888@qq.com
* @Date: 2021/9/3 18:19
* @Desc: 基础消息实体
*/
package entity
import (
"errors"
"math/rand"
"git.echol.cn/loser/tencent-im/internal/enum"
"git.echol.cn/loser/tencent-im/internal/types"
)
var (
errInvalidMsgContent = errors.New("invalid message content")
errInvalidMsgLifeTime = errors.New("invalid message life time")
errNotSetMsgContent = errors.New("message content is not set")
)
type Message struct {
sender string // 发送方UserId
lifeTime int // 消息离线保存时长单位最长为7天604800秒
random uint32 // 消息随机数,由随机函数产生
body []*types.MsgBody // 消息体
offlinePush *offlinePush // 推送实体
}
// SetSender 设置发送方UserId
func (m *Message) SetSender(userId string) {
m.sender = userId
}
// GetSender 获取发送者
func (m *Message) GetSender() string {
return m.sender
}
// SetLifeTime 设置消息离线保存时长
func (m *Message) SetLifeTime(lifeTime int) {
m.lifeTime = lifeTime
}
// GetLifeTime 获取消息离线保存时长
func (m *Message) GetLifeTime() int {
return m.lifeTime
}
// SetRandom 设置消息随机数
func (m *Message) SetRandom(random uint32) {
m.random = random
}
// GetRandom 获取消息随机数
func (m *Message) GetRandom() uint32 {
if m.random == 0 {
m.random = rand.Uint32()
}
return m.random
}
// AddContent 添加消息内容(添加会累加之前的消息内容)
func (m *Message) AddContent(msgContent ...interface{}) {
if m.body == nil {
m.body = make([]*types.MsgBody, 0)
}
if len(msgContent) > 0 {
var msgType string
for _, content := range msgContent {
switch content.(type) {
case types.MsgTextContent, *types.MsgTextContent:
msgType = enum.MsgText
case types.MsgLocationContent, *types.MsgLocationContent:
msgType = enum.MsgLocation
case types.MsgFaceContent, *types.MsgFaceContent:
msgType = enum.MsgFace
case types.MsgCustomContent, *types.MsgCustomContent:
msgType = enum.MsgCustom
case types.MsgSoundContent, *types.MsgSoundContent:
msgType = enum.MsgSound
case types.MsgImageContent, *types.MsgImageContent:
msgType = enum.MsgImage
case types.MsgFileContent, *types.MsgFileContent:
msgType = enum.MsgFile
case types.MsgVideoContent, *types.MsgVideoContent:
msgType = enum.MsgVideo
default:
msgType = ""
}
m.body = append(m.body, &types.MsgBody{
MsgType: msgType,
MsgContent: content,
})
}
}
}
// SetContent 设置消息内容(设置会冲掉之前的消息内容)
func (m *Message) SetContent(msgContent ...interface{}) {
if m.body != nil {
m.body = m.body[0:0]
}
m.AddContent(msgContent...)
}
// GetBody 获取消息体
func (m *Message) GetBody() []*types.MsgBody {
return m.body
}
// OfflinePush 新建离线推送对象
func (m *Message) OfflinePush() *offlinePush {
if m.offlinePush == nil {
m.offlinePush = newOfflinePush()
}
return m.offlinePush
}
// GetOfflinePushInfo 获取离线推送消息
func (m *Message) GetOfflinePushInfo() *types.OfflinePushInfo {
if m.offlinePush == nil {
return nil
}
return &types.OfflinePushInfo{
PushFlag: m.offlinePush.pushFlag,
Title: m.offlinePush.title,
Desc: m.offlinePush.desc,
Ext: m.offlinePush.ext,
AndroidInfo: m.offlinePush.androidInfo,
ApnsInfo: m.offlinePush.apnsInfo,
}
}
// CheckLifeTimeArgError 检测参数错误
func (m *Message) CheckLifeTimeArgError() error {
if m.body != nil && len(m.body) > 0 {
for _, item := range m.body {
if item.MsgType == "" {
return errInvalidMsgContent
}
}
} else {
return errNotSetMsgContent
}
return nil
}
// CheckBodyArgError 检测参数错误
func (m *Message) CheckBodyArgError() error {
if m.body != nil && len(m.body) > 0 {
for _, item := range m.body {
if item.MsgType == "" {
return errInvalidMsgContent
}
}
} else {
return errNotSetMsgContent
}
return nil
}