handle.go 2.53 KB
package cardholder

import (
	"apigame/models"
	"apigame/service/constd"
	"apigame/util/util-lx/lxtime"
	"apigame/util/uttype"
	"strconv"
)

// HandleGetConfig 活动配置
func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp models.RspCardHolderGetConfig) {
	rsp = models.RspCardHolderGetConfig{}
	code = constd.RECODE_OK

	// 尝试更新配置
	config, _ := TryUpdateConfig(req.GameID)
	rsp.ActivityId = config.Id
	rsp.PrepareTime = config.Raw.PreviewTime
	rsp.StartTime = config.Raw.StartTime
	rsp.EndTime = config.Raw.EndTime
	rsp.OpenLevel = config.Raw.OpenLevel

	rsp.Config = config.Client

	return
}

// HandleInfo 卡包信息
func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardHolderInfo) {
	rsp = models.RspCardHolderInfo{}
	code = constd.RECODE_OK

	// 尝试更新配置
	config, hasConfig := TryUpdateConfig(req.GameID)
	if !hasConfig {
		code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
		return
	}

	// 判断预告时间
	sec := lxtime.NowUninx()
	if sec < config.Raw.StartTime {
		code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
		return
	}

	// 读取游戏数据
	gameData := LoadData(req.GameID, req.UID, config.Id)

	rsp.CardHolderInfo = GetInfo(gameData, config)

	return
}

// HandleOpen 打开卡包
func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) {
	rsp = models.RspCardHolderOpen{
		NewCards:   make([]int, 0),
		AwardAlbum: make(map[int]string),
	}
	code = constd.RECODE_OK

	// 尝试更新配置
	config, hasConfig := TryUpdateConfig(req.GameID)
	if !hasConfig {
		code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
		return
	}

	// 检查活动状态
	code = CheckStatus(config)
	if code != constd.RECODE_OK {
		return
	}
	// 检查卡包ID
	confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(req.Id)]
	if !okCardholderConfig {
		code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
		return
	}

	// 读取游戏数据
	gameData := LoadData(req.GameID, req.UID, config.Id)
	// 检查游戏数据 轮次等
	code = CheckGameData(gameData, config)
	if code != constd.RECODE_OK {
		return
	}

	// 开始处理抽卡
	sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
	newCards, awardAlbum, awardRound := DoOpen(req.GameID,
		gameData, config, confCardholder,
		sequenceId, cohort,
		0)
	rsp.NewCards = newCards
	rsp.AwardAlbum = awardAlbum
	rsp.AwardRound = awardRound

	// 存档
	SaveData(req.GameID, gameData)

	uttype.Shuffle(rsp.NewCards)

	// 返回信息
	rsp.CardHolderInfo = GetInfo(gameData, config)

	return
}