Merge remote-tracking branch 'origin/Cluster' into develop

This commit is contained in:
hahwu 2025-12-18 10:25:28 +08:00
commit 11d38f9483
7 changed files with 53 additions and 18 deletions

View File

@ -127,6 +127,13 @@ func SendServerMsg(m *msg.Msg, serverId int) error {
func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m))
// 先注册回调通道,避免发送出去后对方快速返回导致丢失
newChan := make(chan *msg.Msg, 1)
registerChanel(m.UniKey, newChan)
defer unregisterChanel(m.UniKey)
// 之后再发送消息
if v, ok := serverAgent.Load(serverId); ok {
data, err := GoUtil.GobMarshal(m)
if err != nil {
@ -134,14 +141,14 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
return nil, err
}
v.(network.Agent).WriteMsg(data)
} else {
return nil, fmt.Errorf("server %d not online", serverId)
}
newChan := make(chan *msg.Msg, 1)
registerChanel(m.UniKey, newChan)
// 等待返回(直接接收一次)
timeout := time.After(15 * time.Second)
select {
case <-newChan:
backm := <-newChan
unregisterChanel(m.UniKey)
case backm := <-newChan:
if backm == nil {
return nil, fmt.Errorf("server %d not response", serverId)
}
@ -169,8 +176,8 @@ func processMsg(a *Agent, m *msg.Msg) error {
if m.UniKey != "" {
if chanel, ok := CallbackChan[m.UniKey]; ok {
chanel <- m
return nil
}
return nil
}
if fun, ok := FuncMap[m.Type]; ok {
err = fun(a, m)

View File

@ -22,12 +22,12 @@
"ServerOpenTime": "2018-01-01 00:00:00",
"ServerName": "Merge_Pet",
"ServerStatus" : 1,
"ServerCenter" : 1,
"ServerCenter" : 0,
"GameConfPath": "D:/Github/pet_home_server/src/server/gamedata/config/",
"ListenAddr":":9001",
"CenterAddr": "pethome.bywaystudios.com:9000",
"RemoteAddr":"host.docker.internal:9001",
"CenterAddr": "127.0.0.1:9000",
"RemoteAddr":"127.0.0.1:9001",
"RedisAddr":"127.0.0.1",
"RedisPort" :"6379",

View File

@ -39,6 +39,7 @@ func init() {
RegisterClusterHandler(msg.CLUSTER_FRIEND_SYNC, ClusterFriendSync)
RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, champshipInrankHandler)
RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_RANK_INFO, champshipRankInfoHandler)
RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_MY_RANK, champshipMyRankHandler)
}
func champshipInrankHandler(m *msg.Msg) error {
@ -54,3 +55,12 @@ func champshipRankInfoHandler(m *msg.Msg) error {
FriendMgrSend(m)
return nil
}
func champshipMyRankHandler(m *msg.Msg) error {
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(m.From)
m.To = m.From
m.From = 0
m.Extra = MyRank
FriendMgrSend(m)
return nil
}

View File

@ -93,6 +93,7 @@ func (f *FriendMgr) Init() {
f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter)
}
func (f *FriendMgr) getData() *FirendData {
@ -276,3 +277,11 @@ func FriendMgrCall(m *msg.Msg) interface{} {
}
return G_GameLogicPtr.FriendMgrCall(m.Clone())
}
func SendMsgToCenter(m *msg.Msg) error {
return mergeCluster.SendServerMsg(m, conf.Server.CenterNode)
}
func CallMsgToCenter(m *msg.Msg) (interface{}, error) {
return mergeCluster.CallServerMsg(m, conf.Server.CenterNode)
}

View File

@ -111,4 +111,5 @@ func init() {
gob.Register(&GameResult{})
gob.Register(CatnipMsg{})
gob.Register(&CatnipLock{})
gob.Register(CRank{})
}

View File

@ -113,6 +113,7 @@ const (
HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息
HANDLE_TYPE_SET_CATNIP_PARTNER // 设置猫薄荷伙伴
HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情
HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名
)
const (
@ -127,15 +128,16 @@ const (
func (m *Msg) Clone() *Msg {
return &Msg{
Type: m.Type,
To: m.To,
From: m.From,
Item: m.Item,
SendT: m.SendT,
End: m.End,
Extra: m.Extra,
Id: m.Id,
H: m.H,
Type: m.Type,
To: m.To,
From: m.From,
Item: m.Item,
SendT: m.SendT,
End: m.End,
Extra: m.Extra,
Id: m.Id,
H: m.H,
UniKey: m.UniKey,
}
}

View File

@ -238,6 +238,12 @@ func GobUnmarshal(data []byte, obj interface{}) error {
}
func GetServerIdByUid(uid int) int {
if uid <= 100000 {
return uid
}
if uid <= 100000000 {
return uid / 100000
}
return int((uid % 100000000) / 100000)
}