diff --git a/README.md b/README.md index 1b959f8..a5e706a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ Navmesh寻路 [服务器](https://github.com/jzyong/game-server/tree/master/game ### TODO -* Influxdb * mongoDB * 多网关测试,消息分发 * 编写测试客户端(测试tcp通信,模拟登录流程) (转发大厅返回消息给client) diff --git a/src/gate/manager/game_manager.go b/src/gate/manager/game_manager.go index 8d27079..18c4c27 100644 --- a/src/gate/manager/game_manager.go +++ b/src/gate/manager/game_manager.go @@ -27,7 +27,7 @@ func NewGameManager() *GameManager { func (this *GameManager) Init() error { log.Info("GameManager:init") //启动网络 - server, err := network.NewServer("game", config.GateConfigInstance.GameUrl, network.InnerServer, nil) + server, err := network.NewServer("game", config.GateConfigInstance.GameUrl, network.InnerServer, unregisterGameMessageDistribute) if err != nil { return err } @@ -104,6 +104,19 @@ func gameChannelInactive(channel network.Channel) { } } +//转发不在本地处理的消息 +func unregisterGameMessageDistribute(tcpMessage network.TcpMessage) { + //转发给客户端 + log.Debugf("转发消息:%d", tcpMessage.GetMsgId()) + user, _ := GetUserManager().GetIdUser(tcpMessage.GetObjectId()) + if user != nil { + user.SendMessageToClient(tcpMessage) + } else { + log.Warnf("%d send message %d fail, user not find", tcpMessage.GetObjectId(), tcpMessage.GetMsgId()) + } + +} + func (this *GameManager) Stop() { // 关闭服务器 if this.server != nil { diff --git a/src/gate/manager/user_manager.go b/src/gate/manager/user_manager.go index ab98c67..8222a07 100644 --- a/src/gate/manager/user_manager.go +++ b/src/gate/manager/user_manager.go @@ -171,6 +171,15 @@ func (u *User) SendTcpMessageToHall(tcpMessage network.TcpMessage) { network.SendMsg(u.GameChannel, tcpMessage.GetMsgId(), u.SessionId, u.Id, tcpMessage.GetData()) } +//发送消息给客户端 +func (u *User) SendMessageToClient(tcpMessage network.TcpMessage) { + if u.ClientChannel == nil { + log.Warn("%d client channel is nil,message %d send fail", u.Id, tcpMessage.GetMsgId()) + return + } + network.SendClientMsg(u.ClientChannel, tcpMessage.GetMsgId(), tcpMessage.GetData()) +} + func (u *User) GetGameChanel() network.Channel { if u.GameChannel == nil { //TODO 获取链接