game_sync/model/message.go

361 lines
8.8 KiB
Go

package model
import (
"errors"
"time"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
)
const (
MSGSTATE_UNREAD int32 = iota
MSGSTATE_READED
MSGSTATE_REMOVEED
)
const (
MSGATTACHSTATE_DEFAULT int32 = iota
MSGATTACHSTATE_GOT
)
const (
MSGTYPE_MAIL int32 = iota
MSGTYPE_GONGGAO
MSGTYPE_INVITECODE
MSGTYPE_GIFT
MSGTYPE_GOLDCOMERANK
MSGTYPE_YEB // 余额宝
MSGTYPE_ClubGet // 俱乐部会长给会员 会员得到
MSGTYPE_ClubPump // 俱乐部会长给会员 会长获得抽水
MSGTYPE_IOSINSTALLSTABLE //IOS安装稳定版
MSGTYPE_REBATE //奖励流水返利
MSGTYPE_RANDCOIN //红包雨
MSGTYPE_MATCH_SIGNUPFEE //比赛报名费
MSGTYPE_MATCH_TICKETREWARD //比赛报名券奖励
MSGTYPE_MATCH_SHOPEXCHANGE //积分商城兑换
MSGTYPE_MATCH_SHOPERETURN //积分商城兑换退还
MSGTYPE_ITEM //获取道具
MSGTYPE_RANK_REWARD //排行榜奖励
MSGTYPE_ITEM_CHANGE //背包使用兑换
MSGTYPE_RANK_PermitReward // 通行证排行奖励
MSGTYPE_ClientUpgrade // 客户端升级
MSGTYPE_Lottery // 开奖码抽奖
MSGTYPE_TelCode // 手机兑换码
)
const (
HallAll int64 = 1 << iota //所有大厅都显示
HallMain //主大厅显示
HallTienlen //len大厅显示
HallFish //fish大厅显示
)
const MSG_MAX_COUNT int = 100 //玩家最多保存100封邮件 ,调整大一点
var (
MessageDBName = "user"
MessageCollName = "user_msg"
)
type Message struct {
Id bson.ObjectId `bson:"_id"`
Pid string //原始消息的ID
MType int32 //消息类型
Title string //标题
Content string //内容
Oper int32 //0.系统 1.玩家
SrcId int32 //发送人ID
SrcName string //发送人名字
SnId int32 //目标人ID
Coin int64 //携带金币数量
Ticket int64 //比赛报名券
Grade int64 //积分
Diamond int64 //钻石
State int32 //当前消息的状态
CreatTs int64 //创建时间戳
AttachState int32 //附件状态
GiftId string //
Params []int64 //额外参数
Platform string //平台信息
ShowId int64 //区分主子游戏大厅
Channel []string //渠道
}
func NewMessage(pid string, srcId int32, srcName string, snid, mType int32, title, content string, coin, diamond int64,
state int32, addTime int64, attachState int32, giftId string, params []int64, platform string, showId int64, channel []string) *Message {
if srcName == "" {
srcName = "{\"zh\":\"系统\",\"vi\":\"GM\",\"en\":\"GM\",\"kh\":\"GM\"}"
}
msg := &Message{
Id: bson.NewObjectId(),
Pid: pid,
MType: mType,
Title: title,
Content: content,
SrcId: srcId,
SrcName: srcName,
SnId: snid,
Coin: coin,
State: state,
CreatTs: addTime,
AttachState: attachState,
GiftId: giftId,
Params: params,
Platform: platform,
Diamond: diamond,
ShowId: showId,
Channel: channel,
}
if msg.Pid == "" {
msg.Pid = msg.Id.Hex()
}
return msg
}
func NewMessageByPlayer(pid string, oper, srcId int32, srcName string, snid, mType int32, title, content string, coin, diamond int64,
state int32, addTime int64, attachState int32, giftId string, params []int64, platform string, showId int64) *Message {
msg := &Message{
Id: bson.NewObjectId(),
Pid: pid,
MType: mType,
Title: title,
Content: content,
Oper: oper,
SrcId: srcId,
SrcName: srcName,
SnId: snid,
Coin: coin,
State: state,
CreatTs: addTime,
AttachState: attachState,
GiftId: giftId,
Params: params,
Platform: platform,
Diamond: diamond,
ShowId: showId,
}
if msg.Pid == "" {
msg.Pid = msg.Id.Hex()
}
return msg
}
type InsertMsgArg struct {
Platform string
Msgs []Message
}
func InsertMessage(plt string, msgs ...*Message) (err error) {
if rpcCli == nil {
return ErrRPClientNoConn
}
docs := make([]Message, 0, len(msgs))
for _, msg := range msgs {
docs = append(docs, *msg)
}
if len(docs) == 0 {
return errors.New("no data")
}
args := &InsertMsgArg{Platform: plt, Msgs: docs}
var ret bool
err = rpcCli.CallWithTimeout("MessageSvc.InsertMessage", args, &ret, time.Second*30)
if err != nil {
return err
}
if !ret {
return errors.New("InsertMessage error")
}
return nil
}
type GetMessageArgs struct {
Plt string
SnId int32
}
func GetNotDelMessage(plt string, snid int32) (ret []Message, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
args := &GetMessageArgs{Plt: plt, SnId: snid}
err = rpcCli.CallWithTimeout("MessageSvc.GetNotDelMessage", args, &ret, time.Second*30)
if err != nil {
return nil, err
}
return ret, nil
}
func GetMessage(plt string, snid int32) (ret []Message, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
args := &GetMessageArgs{Plt: plt, SnId: snid}
err = rpcCli.CallWithTimeout("MessageSvc.GetMessage", args, &ret, time.Second*30)
if err != nil {
return nil, err
}
return ret, nil
}
//func GetMessageByState(snid, state int32) (ret []Message, err error) {
// err = MessageCollection().Find(bson.M{"snid": snid, "state": state}).All(&ret)
// return
//}
//func GetMessageByNotState(snid, state int32) (ret []Message, err error) {
// err = MessageCollection().Find(bson.M{"snid": snid, "state": bson.M{"$ne": state}}).All(&ret)
// return
//}
type GetMsgArg struct {
Platform string
IdStr string
}
func GetMessageById(IdStr string, plt string) (msg *Message, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
args := &GetMsgArg{Platform: plt, IdStr: IdStr}
err = rpcCli.CallWithTimeout("MessageSvc.GetMessageById", args, &msg, time.Second*30)
if err != nil {
return nil, err
}
return msg, nil
}
func GetSubscribeMessage(plt string) (msg []Message, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
err = rpcCli.CallWithTimeout("MessageSvc.GetSubscribeMessage", plt, &msg, time.Second*30)
if err != nil {
return nil, err
}
return msg, nil
}
type MsgArgs struct {
Platform string
StartTs, EndTs int64
ToIndex, DestSnId, MsgType, FromIndex int
}
type RetMsg struct {
Msg []Message
Count int
}
func GetMessageInRangeTsLimitByRange(mas *MsgArgs) (ret *RetMsg, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
err = rpcCli.CallWithTimeout("MessageSvc.GetMessageInRangeTsLimitByRange", mas, &ret, time.Second*30)
if err != nil {
return nil, err
}
return ret, nil
}
type ReadMsgArgs struct {
Platform string
Id bson.ObjectId
}
func ReadMessage(id bson.ObjectId, plt string) (err error) {
if rpcCli == nil {
return ErrRPClientNoConn
}
args := &ReadMsgArgs{
Platform: plt,
Id: id,
}
var ret bool
err = rpcCli.CallWithTimeout("MessageSvc.ReadMessage", args, &ret, time.Second*30)
return err
}
type DelMsgArgs struct {
Platform string
Id bson.ObjectId
Del int32 // 默认0 1为假删
}
type DelAllMsgArgs struct {
Platform string
Ids []bson.ObjectId
Del int32 // 默认0 1为假删
}
func DelMessage(args *DelMsgArgs) (err error) {
if rpcCli == nil {
return ErrRPClientNoConn
}
var ret bool
err = rpcCli.CallWithTimeout("MessageSvc.DelMessage", args, &ret, time.Second*30)
return err
}
func DelAllMessage(args *DelAllMsgArgs) (err error) {
if rpcCli == nil {
return ErrRPClientNoConn
}
var ret bool
err = rpcCli.CallWithTimeout("MessageSvc.DelAllMessage", args, &ret, time.Second*30)
if !ret {
return err
}
return nil
}
type AttachMsgArgs struct {
Platform string
Id bson.ObjectId
Ts int64
}
func GetMessageAttach(id bson.ObjectId, plt string) (err error) {
if rpcCli == nil {
return ErrRPClientNoConn
}
args := &AttachMsgArgs{
Platform: plt,
Id: id,
}
var ret bool
err = rpcCli.CallWithTimeout("MessageSvc.GetMessageAttach", args, &ret, time.Second*30)
return err
}
type AttachMsgsArgs struct {
Platform string
Ids []string
}
func GetMessageAttachs(ids []string, plt string) (*[]string, error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
args := &AttachMsgsArgs{
Platform: plt,
Ids: ids,
}
var ret []string
err := rpcCli.CallWithTimeout("MessageSvc.GetMessageAttachs", args, &ret, time.Second*30)
return &ret, err
}
func RemoveMessages(platform string, ts int64) (ret *mgo.ChangeInfo, err error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
args := &AttachMsgArgs{
Platform: platform,
Ts: ts,
}
err = rpcCli.CallWithTimeout("MessageSvc.RemoveMessages", args, &ret, time.Second*30)
return
}