game_sync/gamesrv/clawdoll/action_clawdoll.go

280 lines
8.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"
"mongo.games.com/game/model"
"mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/game/protocol/machine"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/core/task"
"mongo.games.com/goserver/core/timer"
"strconv"
)
type CSPlayerOpPacketFactory struct {
}
type CSPlayerOpHandler struct {
}
func (f *CSPlayerOpPacketFactory) CreatePacket() interface{} {
pack := &clawdoll.CSCLAWDOLLOp{}
return pack
}
func (h *CSPlayerOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerOpHandler Process recv ", data)
if msg, ok := data.(*clawdoll.CSCLAWDOLLOp); ok {
p := base.PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerOpHandler p == nil")
return nil
}
scene := p.GetScene()
if scene == nil {
logger.Logger.Warn("CSPlayerOpHandler p.scene == nil")
return nil
}
if scene.KeyGameDif != common.GameDifClawdoll {
logger.Logger.Error("CSPlayerOpHandler gameId Error ", scene.GameId)
return nil
}
if !scene.HasPlayer(p) {
return nil
}
sp := scene.GetScenePolicy()
if sp != nil {
sp.OnPlayerOp(scene, p, int(msg.GetOpCode()), msg.GetParams())
}
return nil
}
return nil
}
func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("收到返回上分结果!!!!!!!!!!")
if msg, ok := data.(*machine.MSDollMachineoPerateResult); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid())
if p == nil {
logger.Logger.Warn("MSDollMachineoCoinResultHandler p == nil")
return nil
}
s := p.GetScene()
if s == nil {
logger.Logger.Warn("MSDollMachineoCoinResultHandler p.scene == nil")
return nil
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return nil
}
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return nil
}
switch msg.TypeId {
case 1:
logger.Logger.Tracef("ClawDoll OnPlayerOp payCoin response, SnId= %v", p.SnId)
if msg.Result == 1 {
logger.Logger.Tracef("上分成功snid = %v", msg.Snid)
playerEx.CostPlayCoin()
sceneEx.playingSnid = p.SnId
//发送向前移动指令
sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonBack)
s.ChangeSceneState(rule.ClawDollSceneStateStart)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
ClawdollBroadcastPlayingInfo(s)
} else {
logger.Logger.Tracef("上分失败snid = %v", msg.Snid)
}
case 2:
if msg.Result == 1 {
// 获得娃娃卡
playerEx.CatchCardClawdoll()
playerEx.IsWin = true
logger.Logger.Tracef("下抓成功snid = %v", msg.Snid)
} else {
logger.Logger.Tracef("下抓失败snid = %v", msg.Snid)
playerEx.IsWin = false
}
playerEx.SendPlayerGameBilled(int32(sceneEx.RoundId))
logger.Logger.Tracef("ClawDoll StatePlayGame OnPlayerOp Grab response, SnId= %v", msg.Snid)
s.ChangeSceneState(rule.ClawDollSceneStateBilled)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
if sceneEx.grabTimerHandle != timer.TimerHandle(0) {
timer.StopTimer(sceneEx.grabTimerHandle)
sceneEx.grabTimerHandle = timer.TimerHandle(0)
}
}
}
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("CSGetTokenHandler 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
}
type CSGetPlayerLogPacketFactory struct {
}
type CSGetPlayerLogHandler struct {
}
func (f *CSGetPlayerLogPacketFactory) CreatePacket() interface{} {
pack := &clawdoll.CSCLAWDOLLGetPlayerLog{}
return pack
}
func (h *CSGetPlayerLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
//转发到娃娃机主机
logger.Logger.Tracef("CSGetPlayerLogHandler")
if msg, ok := data.(*clawdoll.CSCLAWDOLLGetPlayerLog); ok {
p := base.PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetPlayerLogHandler 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("CSGetPlayerLogHandler machineId = %v not found", machineId)
return nil
}
logger.Logger.Tracef("CSGetPlayerLogHandler appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId)
ret := &clawdoll.SCCLAWDOLLSendPlayerLog{}
ret.Type = msg.GetType()
var err error
var ItemLogs []model.ClawdollSuccessItemLog
//娃娃机道具使用日志
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
ItemLogs, err = model.GetClawdollSuccessItemLog(p.Platform, p.SnId)
return err
}), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
for _, logData := range ItemLogs {
infoData := &clawdoll.ClawdollSuccessItemLog{}
infoData.SnId = logData.SnId
infoData.Name = logData.Name
infoData.ModId = logData.ModId
infoData.Time = logData.Time
ret.ItemLogs = append(ret.ItemLogs, infoData)
}
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDPLAYERLOG), ret)
logger.Logger.Tracef("CSGetPlayerLogHandler:%v", ret)
}), "GetPlayerLogHandler").Start()
}
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{})
common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETPLAYERLOG), &CSGetPlayerLogHandler{})
netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETPLAYERLOG), &CSGetPlayerLogPacketFactory{})
}