diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 8e67d2d..76e7758 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" @@ -8,6 +9,7 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "strconv" ) type CSPlayerOpPacketFactory struct { @@ -95,8 +97,69 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data return nil } +type CSGetTokenPacketFactory struct { +} + +type CSGetTokenHandler struct { +} + +func (f *CSGetTokenPacketFactory) CreatePacket() interface{} { + pack := &clawdoll.CSCLAWDOLLGetToken{} + return pack +} + +func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { + //转发到娃娃机主机 + logger.Logger.Tracef("CSGetTokenHandler") + if _, ok := data.(*clawdoll.CSCLAWDOLLGetToken); ok { + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSGetTokenHandler p == nil") + return nil + } + + scene := p.GetScene() + if scene == nil { + return nil + } + sceneEx, ok := scene.ExtraData.(*SceneEx) + if !ok { + return nil + } + + machineId := scene.GetDBGameFree().GetId() % 6080000 + machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + logger.Logger.Warn("CSGetTokenHandler machineId = %v not found", machineId) + return nil + } + + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId) + + //生成token + token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 3600, "") + if err != nil { + logger.Logger.Error(err) + return err + } + logger.Logger.Trace("======================token========================", token) + + pack := &clawdoll.SCCLAWDOLLSendToken{ + LogicId: scene.DBGameFree.GetId(), + Appid: machineInfo.AppId, + Token: token, + StreamId: machineInfo.StreamId, + } + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) + } + return nil +} + func init() { common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{}) netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) + //客户端请求token + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{}) }