game_sync/robot/fishing/scfish.go

290 lines
9.2 KiB
Go

package fishing
import (
"mongo.games.com/game/common"
"mongo.games.com/game/proto"
fish_proto "mongo.games.com/game/protocol/fishing"
hall_proto "mongo.games.com/game/protocol/gamehall"
"mongo.games.com/game/robot/base"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
// FIPacketID_FISHING_SC_ROOMINFO
type SCFishingRoomInfoPacketFactory struct {
}
type SCFishingRoomInfoHandler struct {
}
func (this *SCFishingRoomInfoPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFishingRoomInfo{}
return pack
}
func (this *SCFishingRoomInfoHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
logger.Logger.Trace("(this *SCFishingRoomInfoHandler) Process ", s.GetSessionConfig().Id, pack)
if msg, ok := pack.(*fish_proto.SCFishingRoomInfo); ok {
sceneEx, _ := base.SceneMgrSingleton.GetScene(msg.GetRoomId()).(*FishingScene)
if sceneEx == nil {
sceneEx = NewFishingScene(msg)
base.SceneMgrSingleton.AddScene(sceneEx)
}
if sceneEx != nil {
for _, pd := range msg.GetPlayers() {
if oldPlayer, ok := sceneEx.GetPlayerBySnid(pd.GetSnId()).(*FishingPlayer); ok {
oldPlayer.UpdatePlayerData(pd)
} else {
p := NewFishingPlayer(pd, sceneEx, sceneEx.GetGameFreeId(), sceneEx.GetRoomId())
if p != nil {
sceneEx.AddPlayer(p)
}
}
}
//logger.Logger.Trace(msg)
var me *FishingPlayer
if sceneEx.GetMe(s) != nil {
me = sceneEx.GetMe(s).(*FishingPlayer)
sceneEx.InitPlayer(s, me)
}
}
} else {
logger.Logger.Error("SCFishingRoomInfo package data error.")
}
return nil
}
type SCFishingRoomStatePacketFactory struct {
}
type SCFishingRoomStateHandler struct {
}
func (this *SCFishingRoomStatePacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFishingRoomState{}
return pack
}
func (this *SCFishingRoomStateHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
if _, ok := pack.(*fish_proto.SCFishingRoomState); ok {
if sceneEx, ok := base.GetScene(s).(*FishingScene); ok {
sceneEx.Clear()
}
} else {
logger.Logger.Error("SCFishingRoomStateHandler package data error.")
}
return nil
}
// FIPacketID_FISHING_SC_SEATS
type SCFishingSeatsPacketFactory struct {
}
type SCFishingSeatsHandler struct {
}
func (this *SCFishingSeatsPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFishingSeats{}
return pack
}
func (this *SCFishingSeatsHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
logger.Logger.Trace("(this *SCFishingSeatsHandler) Process ", s.GetSessionConfig().Id, pack)
if scFishingSeats, ok := pack.(*fish_proto.SCFishingSeats); ok {
if sceneEx, ok := base.GetScene(s).(*FishingScene); ok {
var leftPlayers []int32
for _, pd := range scFishingSeats.GetData() {
if oldPlayer, ok := sceneEx.GetPlayerBySnid(pd.GetSnId()).(*FishingPlayer); ok {
oldPlayer.UpdatePlayerData(pd)
} else {
p := NewFishingPlayer(pd, sceneEx, sceneEx.GetGameFreeId(), sceneEx.GetRoomId())
if p != nil {
sceneEx.AddPlayer(p)
}
}
leftPlayers = append(leftPlayers, pd.GetSnId())
}
sceneEx.UpdateOnlinePlayers(leftPlayers)
//if sceneEx.AllIsRobot() {
// sceneEx.Clear()
// base.SceneMgrSingleton.DelScene(sceneEx.GetRoomId())
//}
}
} else {
logger.Logger.Error("SCFishingSeatsHandler package data error.")
}
return nil
}
// FIPacketID_FISHING_SC_FIREPOWER
type SCFishingFirePowerPacketFactory struct {
}
type SCFishingFirePowerHandler struct {
}
func (this *SCFishingFirePowerPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFirePower{}
return pack
}
func (this *SCFishingFirePowerHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
//logger.Logger.Trace("(this *SCFishingFirePowerHandler) Process ", s.GetSessionConfig().Id, pack)
if _, ok := pack.(*fish_proto.SCFirePower); ok {
//logger.Logger.Trace(scPack)
} else {
logger.Logger.Error("SCFishingSeatsHandler package data error.")
}
return nil
}
// FIPacketID_FISHING_SC_FIREPOWER
type SCFishingSynFishPacketFactory struct {
}
type SCFishingSynFishHandler struct {
}
func (this *SCFishingSynFishPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCSyncRefreshFish{}
return pack
}
func (this *SCFishingSynFishHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
//logger.Logger.Trace("(this *SCFishingSynFishHandler) Process ", s.GetSessionConfig().Id, pack)
if msg, ok := pack.(*fish_proto.SCSyncRefreshFish); ok {
//logger.Logger.Trace(scPack)
if sceneEx, ok := base.GetScene(s).(*FishingScene); ok {
sceneEx.flushFish(msg.GetPolicyId(), msg.GetTimePoint())
}
} else {
logger.Logger.Error("SCFishingSynFishHandler package data error.")
}
return nil
}
// FIPacketID_FISHING_SC_FIREPOWER
type SCFishingOpPacketFactory struct {
}
type SCFishingOpHandler struct {
}
func (this *SCFishingOpPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFishingOp{}
return pack
}
func (this *SCFishingOpHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
if scPack, ok := pack.(*fish_proto.SCFishingOp); ok {
if scPack.GetOpCode() == FishingPlayerOpRobotFire {
logger.Logger.Infof("SCFishingSynFishHandler package data ==> snid %v opcode %v opRetCode %v ", scPack.GetSnId(), scPack.GetOpCode(), scPack.GetOpRetCode())
if scPack.GetOpRetCode() == fish_proto.OpResultCode_OPRC_CoinNotEnough || scPack.GetOpRetCode() == fish_proto.OpResultCode_OPRC_Sucess {
//退出
logger.Logger.Infof("SCFishingSynFishHandler package data ==> snid %v opcode %v opRetCode %v ", scPack.GetSnId(), scPack.GetOpCode(), scPack.GetOpRetCode())
pack := &hall_proto.CSCoinSceneOp{
Id: proto.Int32(0),
OpType: proto.Int32(common.CoinSceneOp_Leave),
}
proto.SetDefaults(pack)
//s.Send(int(fish_proto.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), pack)
base.DelaySendSecond(s, int(hall_proto.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), pack, 3, 10)
//ExePMCmd(s, fmt.Sprintf("%v%v%v", common.PMCmd_AddCoin, common.PMCmd_SplitToken, 50000))
}
} else if scPack.GetOpCode() == FishingRobotWantLeave {
pack := &hall_proto.CSCoinSceneOp{
Id: proto.Int32(0),
OpType: proto.Int32(common.CoinSceneOp_Leave),
}
proto.SetDefaults(pack)
base.DelaySendSecond(s, int(hall_proto.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), pack, 3, 10)
}
} else {
logger.Logger.Error("SCFishingSynFishHandler package data error.")
}
return nil
}
// FIPacketID_FISHING_SC_FIREPOWER
type SCFishingFirePacketFactory struct {
}
type SCFishingFireHandler struct {
}
func (this *SCFishingFirePacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFire{}
return pack
}
func (this *SCFishingFireHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
if _, ok := pack.(*fish_proto.SCFire); ok {
} else {
logger.Logger.Error("SCFishingFireHandler package data error.")
}
return nil
}
type SCFishingFireHitPacketFactory struct {
}
type SCFishingFireHitHandler struct {
}
func (this *SCFishingFireHitPacketFactory) CreatePacket() interface{} {
pack := &fish_proto.SCFireHit{}
return pack
}
func (this *SCFishingFireHitHandler) Process(s *netlib.Session, packid int, pack interface{}) error {
if msg, ok := pack.(*fish_proto.SCFireHit); ok {
if sceneEx, ok := base.GetScene(s).(*FishingScene); ok {
ids := msg.GetFishId()
for _, id := range ids {
f := sceneEx.GetFish(id)
if f != nil {
sceneEx.DelFish(f)
}
}
}
} else {
logger.Logger.Error("SCFishingFireHitHandler package data error.")
}
return nil
}
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
func init() {
//SCFishingRoomInfo
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_ROOMINFO), &SCFishingRoomInfoHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_ROOMINFO), &SCFishingRoomInfoPacketFactory{})
//SCFishingSeats
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_SEATS), &SCFishingSeatsHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_SEATS), &SCFishingSeatsPacketFactory{})
//SCFishingSeats
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_FIREPOWER), &SCFishingFirePowerHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_FIREPOWER), &SCFishingFirePowerPacketFactory{})
//SCFishingSeats
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_SYNCFISH), &SCFishingSynFishHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_SYNCFISH), &SCFishingSynFishPacketFactory{})
//SCFishingOp
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_OP), &SCFishingOpHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_OP), &SCFishingOpPacketFactory{})
//SCFire
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_FIRE), &SCFishingFireHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_FIRE), &SCFishingFirePacketFactory{})
//SCFireHit
netlib.RegisterHandler(int(fish_proto.FIPacketID_FISHING_SC_FIREHIT), &SCFishingFireHitHandler{})
netlib.RegisterFactory(int(fish_proto.FIPacketID_FISHING_SC_FIREHIT), &SCFishingFireHitPacketFactory{})
}