Merge remote-tracking branch 'origin/Cluster' into develop
This commit is contained in:
commit
11d38f9483
@ -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)
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -111,4 +111,5 @@ func init() {
|
||||
gob.Register(&GameResult{})
|
||||
gob.Register(CatnipMsg{})
|
||||
gob.Register(&CatnipLock{})
|
||||
gob.Register(CRank{})
|
||||
}
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user