165 lines
4.5 KiB
Go
165 lines
4.5 KiB
Go
package slots
|
|
|
|
import (
|
|
"mongo.games.com/game/gamesrv/base"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/global"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/key"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/module/player"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/module/shared"
|
|
"mongo.games.com/game/gamesrv/slotspkg/slots/machine"
|
|
"mongo.games.com/game/gamesrv/slotspkg/slots/types/cli"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
func (sm *SlotsMgr) Enter(s *base.SlotsSession, gameId int64) (*cli.SlotsEnterResponse, error) {
|
|
if gid, ok := key.GameKeyMap[gameId]; ok {
|
|
gameId = int64(gid)
|
|
} else {
|
|
logger.Logger.Error("[slotsMgr.Enter] gameId not exist")
|
|
return nil, errors.New("gameId not exist")
|
|
}
|
|
|
|
player.Get(s).Book.Coin.Set(s.Coin())
|
|
|
|
player.Init(s)
|
|
|
|
theme := key.GameMap[uint(gameId)]
|
|
|
|
m := machine.NewMachine(s, theme, DataSet(s).Shell, false)
|
|
if m == nil {
|
|
logger.Logger.Error("[slotsMgr.enter] module is nil")
|
|
return nil, errors.New("module is nil")
|
|
}
|
|
defer func() {
|
|
if m.Next().GetType() == key.BaseSpin {
|
|
DataSet(s).Update()
|
|
}
|
|
}()
|
|
Response := &cli.SlotsEnterResponse{
|
|
Code: errors.Nil.Code(),
|
|
NodeTree: m.PlayLiteClose(),
|
|
Coin: player.CoinCenter.Get(s).GetCoin(),
|
|
BetSizeIndex: m.BetSizeIndex(),
|
|
BetLevelIndex: m.BetLevelIndex(),
|
|
BetLineIndex: m.BetLineIndex(),
|
|
BetSizes: m.BetSizes(),
|
|
BetLevels: m.BetLevels(),
|
|
BetLines: m.BetLines(),
|
|
BaseBets: m.BaseBets(),
|
|
BetChangeList: m.BetChangeList(),
|
|
}
|
|
|
|
player.PushPlayer(s)
|
|
|
|
return Response, nil
|
|
}
|
|
|
|
func (sm *SlotsMgr) Play(s *base.SlotsSession, req *base.SpinReq) (*cli.SlotsPlayResponse, error) {
|
|
if gameId, ok := key.GameKeyMap[req.GameId]; ok {
|
|
req.GameId = int64(gameId)
|
|
} else {
|
|
logger.Logger.Error("[slotsMgr.play] gameId not exist")
|
|
return nil, errors.New("gameId not exist")
|
|
}
|
|
//s := sm.GetSession(uid)
|
|
if s == nil {
|
|
logger.Logger.Error("[slotsMgr.play] session is nil")
|
|
return nil, errors.New("session is nil")
|
|
}
|
|
|
|
if req.BetSizeIndex < 0 {
|
|
logger.Logger.Error("[slotsMgr.play] msg.BetSizeIndex < 0")
|
|
return nil, errors.New("msg.BetSizeIndex < 0")
|
|
}
|
|
|
|
if req.BetLevelIndex < 0 {
|
|
logger.Logger.Error("[slotsMgr.play] msg.BetLevelIndex < 0")
|
|
return nil, errors.New("msg.BetLevelIndex < 0")
|
|
}
|
|
|
|
player.Get(s).Book.Coin.Set(s.Coin())
|
|
|
|
theme := key.GameMap[uint(req.GameId)]
|
|
m := machine.NewMachine(s, theme, DataSet(s).Shell, false)
|
|
if m == nil {
|
|
logger.Logger.Error("[slotsMgr.play] module is nil")
|
|
return nil, errors.New("module is nil")
|
|
}
|
|
|
|
defer func() {
|
|
if m.Next().GetType() == key.BaseSpin {
|
|
DataSet(s).Update()
|
|
}
|
|
}()
|
|
|
|
var recorderResult = &shared.RecorderResult{}
|
|
if m.Next().GetType() == key.BaseSpin {
|
|
recorderResult = NewPlayAsRecorder(s)
|
|
m.Play(&shared.Act{
|
|
BetSizeIndex: req.BetSizeIndex,
|
|
BetLevelIndex: req.BetLevelIndex,
|
|
BetLineIndex: req.BetLineIndex,
|
|
Ratio: 1,
|
|
Mode: key.MachineModePlayer,
|
|
Vector: recorderResult.Vector,
|
|
//ExpectedWinCoin: recorderResult.ExpectedWinCoin,
|
|
Choice: req.BetMode,
|
|
PlayMode: recorderResult.PlayMode,
|
|
})
|
|
} else {
|
|
m.Play(&shared.Act{
|
|
BetSizeIndex: req.BetSizeIndex,
|
|
BetLevelIndex: req.BetLevelIndex,
|
|
BetLineIndex: req.BetLineIndex,
|
|
Ratio: 1,
|
|
Mode: key.MachineModePlayer,
|
|
Choice: req.BetMode,
|
|
})
|
|
}
|
|
res := &cli.SlotsPlayResponse{
|
|
Code: errors.Nil.Code(),
|
|
NodeTree: m.PlayLiteClose(),
|
|
ActualBet: m.ActualBet(),
|
|
ActualWin: m.ActualWin(),
|
|
Coin: player.CoinCenter.Get(s).GetCoin(),
|
|
IsEnd: m.Next().GetType() == key.BaseSpin,
|
|
}
|
|
if !global.Mock {
|
|
defer player.PushPlayer(s)
|
|
}
|
|
return res, nil
|
|
}
|
|
func (*SlotsMgr) PushPlayer(s *base.SlotsSession) map[string]string {
|
|
return player.PushPlayer(s)
|
|
}
|
|
func (*SlotsMgr) PullPlayer(s *base.SlotsSession, data map[string]string) {
|
|
player.PullPlayer(s, data)
|
|
}
|
|
func (*SlotsMgr) SetSessionContext(s *base.SlotsSession) {
|
|
sessionContext := &shared.SessionContext{
|
|
UID: int64(s.UID()),
|
|
}
|
|
s.Set(key.SessionContext, sessionContext)
|
|
}
|
|
func (*SlotsMgr) Leave(s *base.SlotsSession) (*cli.SlotsLeaveResponse, error) {
|
|
|
|
m := machine.NewMachine(s, "s.Theme", DataSet(s).Shell, false)
|
|
|
|
defer func() {
|
|
if m.Next().GetType() == key.BaseSpin {
|
|
DataSet(s).Update()
|
|
}
|
|
}()
|
|
|
|
m.QuitLiteClose()
|
|
Response := &cli.SlotsLeaveResponse{
|
|
Code: errors.Nil.Code(),
|
|
Coin: player.CoinCenter.Get(s).GetCoin(),
|
|
}
|
|
if !global.Mock {
|
|
defer player.PushPlayer(s)
|
|
}
|
|
return Response, nil
|
|
}
|