This commit is contained in:
hahwu 2025-12-23 11:45:43 +08:00
parent 728656d23b
commit 574b9f49a1
7 changed files with 110 additions and 48 deletions

View File

@ -143,12 +143,13 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
}
v.(network.Agent).WriteMsg(data)
// 等待返回(直接接收一次)
timeout := time.After(15 * time.Second)
timeout := time.After(5 * time.Second)
select {
case backm := <-newChan:
if backm == nil {
return nil, fmt.Errorf("server %d not response", serverId)
}
log.Debug("CallServerMsg reply %v", backm)
return backm, nil
case <-timeout:
return nil, fmt.Errorf("timeout waiting for server %d response", serverId)
@ -169,13 +170,7 @@ func SendMsgAll(m *msg.Msg) {
func processMsg(a *Agent, m *msg.Msg) error {
var err error
// 先处理同步回调
if m.UniKey != "" {
if chanel, ok := CallbackChan[m.UniKey]; ok {
chanel <- m
return nil
}
}
if fun, ok := FuncMap[m.Type]; ok {
err = fun(a, m)
} else {

View File

@ -286,19 +286,6 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) {
})
}
func (ad *GameLogic) GetUserData(Uid int) *VarUserData {
result, err := ad.FriendMgr.Call(&MsgMod.Msg{
From: Uid,
To: Uid,
Type: MsgMod.HANDLE_TYPE_VAR_USER_GET,
SendT: GoUtil.Now(),
})
if err != nil {
return &VarUserData{}
}
return result.(*VarUserData)
}
func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} {
result, err := ad.FriendMgr.Call(m)
if err != nil {

View File

@ -2,6 +2,7 @@ package game
import (
"context"
"encoding/gob"
"fmt"
"runtime/debug"
mergeCluster "server/cluster"
@ -63,6 +64,7 @@ func (m *MessageMgr) MessageMgrInit() {
MessageList: make(map[int64]*MessageList),
PlayerList: make(map[int64]int),
}
gob.Register(msg.VarData{})
// 注册处理函数
m.init()
m.handler = make(map[int]MessageHandlerFunc)
@ -85,6 +87,7 @@ func (m *MessageMgr) MessageMgrInit() {
m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler))
} else {
m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler))
m.RegisterHandler(msg.HANDLE_MOD_REPLY_PLAYER_MSG, MessageHandlerFunc(PlayerReplyMsgHandler))
m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler))
}
}
@ -220,8 +223,21 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) {
defer p.lock.Unlock()
p.Send(data.Clone())
// 处理完后发送消费消息
data.HandleType = msg.HANDLE_MOD_COMSUME_MSG
go SendMsgToCenterAsync(data)
if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG {
data.HandleType = msg.HANDLE_MOD_COMSUME_MSG
go SendMsgToCenterAsync(data)
}
return nil, nil
}
func PlayerReplyMsgHandler(data *msg.Msg) (interface{}, error) {
// 先处理同步回调
if data.UniKey != "" {
if chanel, ok := mergeCluster.CallbackChan[data.UniKey]; ok {
log.Debug("reply message ")
chanel <- data
}
}
return nil, nil
}
@ -518,7 +534,7 @@ func sendMessageAsync(m *msg.Msg, node int) error {
// 同步消息到指定节点 节点不在线则保存消息
func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) {
msg, err := mergeCluster.CallServerMsg(m, node)
if err != nil {
if err != nil && conf.Server.ServerType == "center" {
saveMessage(m)
return nil, err
}
@ -545,6 +561,13 @@ func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
From: int(PlayerId),
HandleType: msg.HANDLE_MOD_USER_VAR_GET,
Extra: Key,
Extra: msg.VarData{Key: Key},
})
}
func GetServerData(Key string) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
HandleType: msg.HANDLE_MOD_VAR_GET,
Extra: msg.VarData{Key: Key},
})
}

View File

@ -32,17 +32,18 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}
var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE}
const (
HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息
HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息
HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息
HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息
HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息
HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息
HANDLE_MOD_VAR_GET = 20007 // 获取变量
HANDLE_MOD_VAR_SET = 20008 // 设置变量
HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴
HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量
HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量
HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息
HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息
HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息
HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息
HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息
HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息
HANDLE_MOD_VAR_GET = 20007 // 获取变量
HANDLE_MOD_VAR_SET = 20008 // 设置变量
HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴
HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量
HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量
HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息
)
const (

View File

@ -113,7 +113,6 @@ func (p *Player) PlayroomBackData() {
ItemId: int32(k),
})
}
data := G_GameLogicPtr.GetUserData(int(p.M_DwUin))
r.Dress = Dress
r.DressSet = GoUtil.MapIntToInt32(PlayroomMod.GetDressSet())
@ -156,7 +155,7 @@ func (p *Player) PlayroomBackData() {
r.Unlock = PlayroomMod.GetUnlockIds()
r.DailyTaskReward = GoUtil.IntToInt32(PlayroomMod.DailyTaskReward)
r.DailyTask = PlayroomMod.BackDataTask()
r.Kiss = int32(data.Kiss)
r.Kiss = int32(p.GetPlayroomKiss())
r.Revenge = PlayroomMod.RevengeUid
r.InteractNum = int32(PlayroomMod.InteractNum)
r.AdItem = AdWatch
@ -195,18 +194,16 @@ func (p *Player) PlayroomVisit(Uid int) {
r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList)
r.Items = Items
r.Status = int32(PlayroomMod.GameStatus)
data := G_GameLogicPtr.GetUserData(Uid)
r.UpvoteCount = int32(data.Upvote)
r.Chip = int32(data.Chip)
r.Kiss = int32(data.Kiss)
r.UpvoteCount = int32(p.GetPlayroomUpvote())
r.Chip = int32(p.GetPlayroomChip())
r.Kiss = int32(p.GetPlayroomKiss())
r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet)
p.PushClientRes(r)
}
func (p *Player) NotifyPlayroomKiss() {
data := G_GameLogicPtr.GetUserData(int(p.M_DwUin))
m := &proto.NotifyPlayroomKiss{
Kiss: int32(data.Kiss),
Kiss: int32(p.GetPlayroomKiss()),
}
p.PushClientRes(m)
}

View File

@ -25,11 +25,20 @@ func (p *Player) GetVarData(key string) interface{} {
return data.Extra
}
func GetServerVarData(key string) interface{} {
data, err := GetServerData(key)
if err != nil {
log.Error("GetServerVarData err : %s", err)
return nil
}
return data.Extra
}
func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) {
SendMsgToCenterAsync(&msg.Msg{
From: int(p.M_DwUin),
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
Extra: &msg.VarData{
Extra: msg.VarData{
Key: key,
Value: value,
SetType: opType,
@ -37,6 +46,32 @@ func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) {
})
}
func (p *Player) OpVarDataSync(key string, value interface{}, opType int) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
From: int(p.M_DwUin),
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
Extra: msg.VarData{
Key: key,
Value: value,
SetType: opType,
},
})
}
func (p *Player) OpServerVarDataAsync(key string, Value interface{}, opType int) {
SendMsgToCenterSync(&msg.Msg{
HandleType: msg.HANDLE_MOD_VAR_SET,
Extra: msg.VarData{Key: key, Value: Value, SetType: opType},
})
}
func (p *Player) OpServerVarDataSync(key string, Value interface{}, opType int) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
HandleType: msg.HANDLE_MOD_VAR_SET,
Extra: msg.VarData{Key: key, Value: Value, SetType: opType},
})
}
func (p *Player) SetVarDataAsync(key string, value interface{}) {
p.OpVarDataAsync(key, value, msg.VAR_OP_SET)
}
@ -61,10 +96,34 @@ func (p *Player) SubPlayroomChip(PlayerId int) {
p.SubVarDataAsync(VAR_PLAYROOM_CHIP)
}
func (p *Player) GetPlayroomUpvote() int {
data := p.GetVarData(VAR_PLAYROOM_UPVOTE)
if data == nil {
return 0
}
return data.(int)
}
func (p *Player) GetPlayroomChip() int {
data := p.GetVarData(VAR_PLAYROOM_CHIP)
if data == nil {
return 0
}
return data.(int)
}
func (p *Player) SetPlayroomKiss(PlayerId int) {
p.SetVarDataAsync(VAR_PLAYROOM_KISS, 1)
}
func (p *Player) GetPlayroomKiss() int {
data := p.GetVarData(VAR_PLAYROOM_KISS)
if data == nil {
return 0
}
return data.(int)
}
func (p *Player) GetGoldCard() *VarGoldCard {
data := p.GetVarData(VAR_GOLD_CARD)
if data == nil {

View File

@ -186,7 +186,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
data := getVarData()
data.mu.Lock()
defer data.mu.Unlock()
if v, ok := m.Extra.(*msg.VarData); ok {
if v, ok := m.Extra.(msg.VarData); ok {
ved, ok := data.NewVar[v.Key]
if !ok {
ved = &VarExpireData{}
@ -237,7 +237,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
data := getVarData()
data.mu.Lock()
defer data.mu.Unlock()
if v, ok := m.Extra.(*msg.VarData); ok {
if v, ok := m.Extra.(msg.VarData); ok {
varData := data.NewUseVar[m.From]
if varData == nil {
varData = make(map[string]*VarExpireData)
@ -278,7 +278,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
func GetVarDataHandler(m *msg.Msg) (interface{}, error) {
data := getVarData()
if v, ok := m.Extra.(*msg.VarData); ok {
if v, ok := m.Extra.(msg.VarData); ok {
if varData, ok := data.NewVar[v.Key]; ok {
return varData.D, nil
}