184 lines
4.2 KiB
Go
184 lines
4.2 KiB
Go
|
/**
|
|||
|
* @Author: Echo
|
|||
|
* @Author:1711788888@qq.com
|
|||
|
* @Date: 2021/8/31 18:04
|
|||
|
* @Desc: 私聊消息实体
|
|||
|
*/
|
|||
|
|
|||
|
package private
|
|||
|
|
|||
|
import (
|
|||
|
"errors"
|
|||
|
|
|||
|
"git.echol.cn/loser/tencent-im/internal/entity"
|
|||
|
"git.echol.cn/loser/tencent-im/internal/types"
|
|||
|
)
|
|||
|
|
|||
|
var errNotSetMsgReceiver = errors.New("message receiver is not set")
|
|||
|
|
|||
|
type Message struct {
|
|||
|
entity.Message
|
|||
|
receivers []string // 接收方UserId(可以为多个)
|
|||
|
syncOtherMachine int // 同步到其他器
|
|||
|
timestamp int64 // 消息时间戳,UNIX 时间戳(单位:秒)
|
|||
|
seq int // 消息序列号
|
|||
|
customData interface{} // 自定义数据
|
|||
|
sendControls map[string]bool // 发送消息控制
|
|||
|
callbackControls map[string]bool // 禁用回调
|
|||
|
}
|
|||
|
|
|||
|
func NewMessage() *Message {
|
|||
|
return &Message{}
|
|||
|
}
|
|||
|
|
|||
|
// AddReceivers 添加接收方
|
|||
|
func (m *Message) AddReceivers(userId ...string) {
|
|||
|
if m.receivers == nil {
|
|||
|
m.receivers = make([]string, 0)
|
|||
|
}
|
|||
|
m.receivers = append(m.receivers, userId...)
|
|||
|
}
|
|||
|
|
|||
|
// SetReceivers 设置接收方
|
|||
|
func (m *Message) SetReceivers(userId ...string) {
|
|||
|
if m.receivers != nil {
|
|||
|
m.receivers = m.receivers[0:0]
|
|||
|
}
|
|||
|
m.AddReceivers(userId...)
|
|||
|
}
|
|||
|
|
|||
|
// GetReceivers 获取接收方
|
|||
|
func (m *Message) GetReceivers() []string {
|
|||
|
return m.receivers
|
|||
|
}
|
|||
|
|
|||
|
func (m *Message) GetLastReceiver() string {
|
|||
|
return m.receivers[0]
|
|||
|
}
|
|||
|
|
|||
|
// SetSyncOtherMachine 设置同步到其他机器
|
|||
|
func (m *Message) SetSyncOtherMachine(syncOtherMachine types.SyncOtherMachine) {
|
|||
|
m.syncOtherMachine = int(syncOtherMachine)
|
|||
|
}
|
|||
|
|
|||
|
// GetSyncOtherMachine 获取同步至其他设备
|
|||
|
func (m *Message) GetSyncOtherMachine() int {
|
|||
|
return m.syncOtherMachine
|
|||
|
}
|
|||
|
|
|||
|
// SetSerialNo 设置消息序列号
|
|||
|
func (m *Message) SetSerialNo(seq int) {
|
|||
|
m.seq = seq
|
|||
|
}
|
|||
|
|
|||
|
// GetSerialNo 获取消息序列号
|
|||
|
func (m *Message) GetSerialNo() int {
|
|||
|
return m.seq
|
|||
|
}
|
|||
|
|
|||
|
// SetTimestamp 设置消息的时间戳
|
|||
|
func (m *Message) SetTimestamp(timestamp int64) {
|
|||
|
m.timestamp = timestamp
|
|||
|
}
|
|||
|
|
|||
|
// GetTimestamp 获取消息的时间戳
|
|||
|
func (m *Message) GetTimestamp() int64 {
|
|||
|
return m.timestamp
|
|||
|
}
|
|||
|
|
|||
|
// SetCustomData 设置自定义数据
|
|||
|
func (m *Message) SetCustomData(data interface{}) {
|
|||
|
m.customData = data
|
|||
|
}
|
|||
|
|
|||
|
// GetCustomData 获取自定义数据
|
|||
|
func (m *Message) GetCustomData() interface{} {
|
|||
|
return m.customData
|
|||
|
}
|
|||
|
|
|||
|
// SetForbidBeforeSendMsgCallback 设置禁止发消息前回调
|
|||
|
func (m *Message) SetForbidBeforeSendMsgCallback() {
|
|||
|
if m.callbackControls == nil {
|
|||
|
m.callbackControls = make(map[string]bool, 0)
|
|||
|
}
|
|||
|
m.callbackControls["ForbidBeforeSendMsgCallback"] = true
|
|||
|
}
|
|||
|
|
|||
|
// SetForbidAfterSendMsgCallback 设置禁止发消息后回调
|
|||
|
func (m *Message) SetForbidAfterSendMsgCallback() {
|
|||
|
if m.callbackControls == nil {
|
|||
|
m.callbackControls = make(map[string]bool, 0)
|
|||
|
}
|
|||
|
m.callbackControls["ForbidAfterSendMsgCallback"] = true
|
|||
|
}
|
|||
|
|
|||
|
// GetForbidCallbackControl 获取消息回调禁止开关
|
|||
|
func (m *Message) GetForbidCallbackControl() (controls []string) {
|
|||
|
if m.callbackControls != nil {
|
|||
|
if n := len(m.callbackControls); n > 0 {
|
|||
|
controls = make([]string, 0, n)
|
|||
|
for k := range m.callbackControls {
|
|||
|
controls = append(controls, k)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetNoUnread 设置该条消息不计入未读数
|
|||
|
func (m *Message) SetNoUnread() {
|
|||
|
if m.sendControls == nil {
|
|||
|
m.sendControls = make(map[string]bool, 0)
|
|||
|
}
|
|||
|
m.sendControls["NoUnread"] = true
|
|||
|
}
|
|||
|
|
|||
|
// SetNoLastMsg 设置该条消息不更新会话列表
|
|||
|
func (m *Message) SetNoLastMsg() {
|
|||
|
if m.sendControls == nil {
|
|||
|
m.sendControls = make(map[string]bool, 0)
|
|||
|
}
|
|||
|
m.sendControls["NoLastMsg"] = true
|
|||
|
}
|
|||
|
|
|||
|
// GetSendMsgControl 获取消息发送控制选项
|
|||
|
func (m *Message) GetSendMsgControl() (controls []string) {
|
|||
|
if m.sendControls != nil {
|
|||
|
if n := len(m.sendControls); n > 0 {
|
|||
|
controls = make([]string, 0, n)
|
|||
|
for k := range m.sendControls {
|
|||
|
controls = append(controls, k)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// CheckError 检测错误
|
|||
|
func (m *Message) CheckError() (err error) {
|
|||
|
if err = m.CheckLifeTimeArgError(); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if err = m.CheckBodyArgError(); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if err = m.checkReceiverArgError(); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// checkReceiverArgError 检测接收方参数
|
|||
|
func (m *Message) checkReceiverArgError() error {
|
|||
|
if m.receivers == nil || len(m.receivers) == 0 {
|
|||
|
return errNotSetMsgReceiver
|
|||
|
}
|
|||
|
|
|||
|
return nil
|
|||
|
}
|