game_sync/model/friend.go

131 lines
2.7 KiB
Go

package model
import (
"github.com/globalsign/mgo/bson"
"mongo.games.com/goserver/core/logger"
"time"
)
type Friend struct {
Id bson.ObjectId `bson:"_id"`
Platform string
SnId int32
BindFriend []*BindFriend
UpdateTime int64
Name string
Head int32
HeadUrl string
Sex int32
Coin int64
Diamond int64
VCard int64
Roles map[int32]int32 //人物
Pets map[int32]int32 //宠物
Shield []int32
Age int32
Signature string
GameID []int32
LogoutTime int64 //登出时间
Dirty bool `bson:"-"`
}
type BindFriend struct {
SnId int32
CreateTime int64 //建立时间
//缓存数据
Platform string `bson:"-"`
Name string `bson:"-"`
Head int32 `bson:"-"`
HeadUrl string `bson:"-"`
Sex int32 `bson:"-"`
LogoutTime int64 `bson:"-"`
RoleId int32 `bson:"-"`
}
type FriendRet struct {
Fri *Friend
}
type FriendByKey struct {
Platform string
SnId int32
}
type FriendsRet struct {
Fris []*Friend
}
type FriendsByKey struct {
Platform string
SnIds []int32
}
func NewFriend(platform string, snid int32) *Friend {
f := &Friend{Id: bson.NewObjectId()}
f.Platform = platform
f.SnId = snid
f.Roles = make(map[int32]int32)
f.Pets = make(map[int32]int32)
f.Shield = []int32{}
f.UpdateTime = time.Now().Unix()
f.BindFriend = []*BindFriend{}
f.GameID = []int32{}
f.Dirty = true
return f
}
func UpsertFriend(friend *Friend) *Friend {
if rpcCli == nil {
logger.Logger.Error("model.UpsertFriend rpcCli == nil")
return nil
}
ret := &FriendRet{}
err := rpcCli.CallWithTimeout("FriendSvc.UpsertFriend", friend, ret, time.Second*30)
if err != nil {
logger.Logger.Error("UpsertFriend error:", err)
return nil
}
return ret.Fri
}
func QueryFriendBySnid(platform string, snid int32) (friend *Friend, err error) {
if rpcCli == nil {
logger.Logger.Error("model.QueryFriendBySnid rpcCli == nil")
return
}
args := &FriendByKey{
Platform: platform,
SnId: snid,
}
var ret *FriendRet
err = rpcCli.CallWithTimeout("FriendSvc.QueryFriendByKey", args, &ret, time.Second*30)
if err != nil {
logger.Logger.Error("QueryFriendBySnid error:", err)
}
if ret != nil {
friend = ret.Fri
}
return
}
func QueryFriendsBySnids(platform string, snids []int32) (fris []*Friend, err error) {
if rpcCli == nil {
logger.Logger.Error("model.QueryFriendsBySnids rpcCli == nil")
return
}
args := &FriendsByKey{
Platform: platform,
SnIds: snids,
}
ret := &FriendsRet{}
err = rpcCli.CallWithTimeout("FriendSvc.QueryFriendsByKey", args, &ret, time.Second*30)
if err != nil {
logger.Logger.Error("QueryFriendsBySnids error:", err)
}
if ret != nil {
fris = ret.Fris
}
return
}