package service import ( "blazing/common/core" "blazing/common/data/entity" "blazing/common/socket/errorcode" "blazing/common/socket/handler" "github.com/panjf2000/gnet/v2" ) func GetPlayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优化,可能存在内存泄漏问题 //检查player初始化,是否为conn初始后取map,防止二次连接后存在两个player clientdata := c.Context().(*entity.ClientData) if clientdata.GetPlayer() != nil { return clientdata.GetPlayer() } var player *entity.Player if player1, ok := core.Mainplayer.Load((userid)); ok { player = player1.(*entity.Player) //取成功,否则创建 clientdata.SetPlayer(player) } return player // return nil } func KickPlayer(userid uint32) { //踢出玩家 //TODO 返回错误码 //var player *entity.Player if player1, ok := core.Mainplayer.Load((userid)); ok { player := player1.(*entity.Player) //取成功,否则创建 head := handler.NewTomeeHeader() head.Result = uint32(errorcode.ErrorCodes.ErrAlreadyLoggedIn) head.UserID = userid head.CMD = 1001 player.SendPack(core.Pack(*head, nil)) player.MainConn.MainConn.Close() // clientdata.Player = player } //return player // return nil } func SetPlayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优化, clientdata := c.Context().(*entity.ClientData) player := entity.NewPlayer( entity.WithUserID(userid), //注入ID entity.WithConn(c), //注入conn ) core.Mainplayer.Store(userid, player) clientdata.SetPlayer(player) //= player return player // return nil }