301 lines
9.6 KiB
Go
301 lines
9.6 KiB
Go
package base
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"mongo.games.com/game/model"
|
|
|
|
"github.com/globalsign/mgo/bson"
|
|
"mongo.games.com/goserver/core/basic"
|
|
"mongo.games.com/goserver/core/logger"
|
|
"mongo.games.com/goserver/core/module"
|
|
"mongo.games.com/goserver/core/task"
|
|
)
|
|
|
|
// HundredJackListManager 排行榜 key: platform+gamefreeId
|
|
type HundredJackListManager struct {
|
|
HundredJackTsList map[string][]*HundredJackInfo
|
|
HundredJackSortList map[string][]*HundredJackInfo
|
|
}
|
|
|
|
// HundredJackListMgr 实例化
|
|
var HundredJackListMgr = &HundredJackListManager{
|
|
HundredJackTsList: make(map[string][]*HundredJackInfo),
|
|
HundredJackSortList: make(map[string][]*HundredJackInfo),
|
|
}
|
|
|
|
// HundredJackInfo 数据结构
|
|
type HundredJackInfo struct {
|
|
model.HundredjackpotLog
|
|
linkSnids []int32 //点赞人数
|
|
}
|
|
|
|
// ModuleName .
|
|
func (hm *HundredJackListManager) ModuleName() string {
|
|
return "HundredJackListManager"
|
|
}
|
|
|
|
// Init .
|
|
func (hm *HundredJackListManager) Init() {
|
|
//data := model.
|
|
}
|
|
|
|
// Update .
|
|
func (hm *HundredJackListManager) Update() {
|
|
}
|
|
|
|
// Shutdown .
|
|
func (hm *HundredJackListManager) Shutdown() {
|
|
module.UnregisteModule(hm)
|
|
}
|
|
|
|
// ISInitJackInfo 仅初始化一次
|
|
var ISInitJackInfo bool
|
|
|
|
// InitTsJackInfo 初始化TsJackInfo
|
|
func (hm *HundredJackListManager) InitTsJackInfo(platform string, freeID int32) {
|
|
key := fmt.Sprintf("%v-%v", platform, freeID)
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
datas, err := model.GetHundredjackpotLogTsByPlatformAndGameFreeID(platform, freeID)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager DelOneJackInfo ", err)
|
|
return nil
|
|
}
|
|
return datas
|
|
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
|
|
datas := data.([]model.HundredjackpotLog)
|
|
if data != nil && datas != nil {
|
|
for i := range datas {
|
|
if i == model.HundredjackpotLogMaxLimitPerQuery {
|
|
break
|
|
}
|
|
data := &HundredJackInfo{
|
|
HundredjackpotLog: datas[i],
|
|
}
|
|
strlikeSnids := strings.Split(datas[i].LinkeSnids, "|")
|
|
for _, v := range strlikeSnids {
|
|
if v == "" {
|
|
break
|
|
}
|
|
snid, err := strconv.Atoi(v)
|
|
if err == nil {
|
|
data.linkSnids = append(data.linkSnids, int32(snid))
|
|
}
|
|
}
|
|
hm.HundredJackTsList[key] = append(hm.HundredJackTsList[key], data)
|
|
}
|
|
// logger.Logger.Warnf("InitTsJackInfo data:%v", datas)
|
|
} else {
|
|
hm.HundredJackTsList[key] = []*HundredJackInfo{}
|
|
}
|
|
return
|
|
}), "InitTsJackInfo").Start()
|
|
}
|
|
|
|
// InitSortJackInfo 初始化SortJackInfo
|
|
func (hm *HundredJackListManager) InitSortJackInfo(platform string, freeID int32) {
|
|
|
|
key := fmt.Sprintf("%v-%v", platform, freeID)
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
datas, err := model.GetHundredjackpotLogCoinByPlatformAndGameFreeID(platform, freeID)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager DelOneJackInfo ", err)
|
|
return nil
|
|
}
|
|
return datas
|
|
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
|
|
datas := data.([]model.HundredjackpotLog)
|
|
if data != nil && datas != nil {
|
|
for i := range datas {
|
|
if i == model.HundredjackpotLogMaxLimitPerQuery {
|
|
break
|
|
}
|
|
data := &HundredJackInfo{
|
|
HundredjackpotLog: datas[i],
|
|
}
|
|
strlikeSnids := strings.Split(datas[i].LinkeSnids, "|")
|
|
for _, v := range strlikeSnids {
|
|
snid, err := strconv.Atoi(v)
|
|
if err == nil {
|
|
data.linkSnids = append(data.linkSnids, int32(snid))
|
|
}
|
|
}
|
|
hm.HundredJackSortList[key] = append(hm.HundredJackSortList[key], data)
|
|
}
|
|
// logger.Logger.Warnf("InitSortJackInfo data:%v", datas)
|
|
} else {
|
|
hm.HundredJackSortList[key] = []*HundredJackInfo{}
|
|
}
|
|
return
|
|
}), "InitSortJackInfo").Start()
|
|
}
|
|
|
|
// InitHundredJackListInfo 初始化 HundredJackListInfo
|
|
func (hm *HundredJackListManager) InitHundredJackListInfo(platform string, freeID int32) {
|
|
if ISInitJackInfo {
|
|
return
|
|
}
|
|
key := fmt.Sprintf("%v-%v", platform, freeID)
|
|
if _, exist := hm.HundredJackTsList[key]; !exist {
|
|
hm.InitTsJackInfo(platform, freeID)
|
|
}
|
|
if _, exist := hm.HundredJackSortList[key]; !exist {
|
|
hm.InitSortJackInfo(platform, freeID)
|
|
}
|
|
ISInitJackInfo = true
|
|
return
|
|
}
|
|
|
|
// GetJackTsInfo 返回TsInfo
|
|
func (hm *HundredJackListManager) GetJackTsInfo(platform string, freeID int32) []*HundredJackInfo {
|
|
key := fmt.Sprintf("%v-%v", platform, freeID)
|
|
if _, exist := hm.HundredJackTsList[key]; !exist { // 玩家进入scene 已经初始化
|
|
hm.InitTsJackInfo(platform, freeID)
|
|
}
|
|
return hm.HundredJackTsList[key]
|
|
}
|
|
|
|
// GetJackSortInfo 返回SortInfo
|
|
func (hm *HundredJackListManager) GetJackSortInfo(platform string, freeID int32) []*HundredJackInfo {
|
|
key := fmt.Sprintf("%v-%v", platform, freeID)
|
|
if _, exist := hm.HundredJackSortList[key]; !exist {
|
|
hm.InitSortJackInfo(platform, freeID)
|
|
}
|
|
return hm.HundredJackSortList[key]
|
|
}
|
|
|
|
// Insert 插入
|
|
func (hm *HundredJackListManager) Insert(coin, turncoin int64, snid, roomid, jackType, inGame, vip int32, platform, channel, name string, gamedata []string) {
|
|
key := fmt.Sprintf("%v-%v", platform, roomid)
|
|
log := model.NewHundredjackpotLogEx(snid, coin, turncoin, roomid, jackType, inGame, vip, platform, channel, name, gamedata)
|
|
///////////////////实际不走这里
|
|
if _, exist := hm.HundredJackTsList[key]; !exist {
|
|
hm.InitTsJackInfo(platform, roomid)
|
|
}
|
|
if _, exist := hm.HundredJackSortList[key]; !exist {
|
|
hm.InitSortJackInfo(platform, roomid)
|
|
}
|
|
/////////////////////
|
|
hm.InsertLog(log)
|
|
data := &HundredJackInfo{
|
|
HundredjackpotLog: *log,
|
|
}
|
|
/*logger.Logger.Trace("HundredJackListManager log 1 ", log.SnID, log.LogID, data.GameData)
|
|
for _, v := range hm.HundredJackTsList[key] {
|
|
logger.Logger.Trace("HundredJackListManager log 2 ", v.SnID, v.LogID, v.GameData)
|
|
}*/
|
|
for i, v := range hm.HundredJackSortList[key] { // 插入
|
|
if v.Coin < log.Coin {
|
|
d1 := append([]*HundredJackInfo{}, hm.HundredJackSortList[key][i:]...)
|
|
hm.HundredJackSortList[key] = append(hm.HundredJackSortList[key][:i], data)
|
|
hm.HundredJackSortList[key] = append(hm.HundredJackSortList[key], d1...)
|
|
goto Exit
|
|
}
|
|
}
|
|
if len(hm.HundredJackSortList[key]) < model.HundredjackpotLogMaxLimitPerQuery {
|
|
hm.HundredJackSortList[key] = append(hm.HundredJackSortList[key], data)
|
|
}
|
|
Exit:
|
|
d1 := append([]*HundredJackInfo{}, hm.HundredJackTsList[key][0:]...)
|
|
hm.HundredJackTsList[key] = append(hm.HundredJackTsList[key][:0], data)
|
|
hm.HundredJackTsList[key] = append(hm.HundredJackTsList[key], d1...)
|
|
var delList []*HundredJackInfo
|
|
if len(hm.HundredJackTsList[key]) > model.HundredjackpotLogMaxLimitPerQuery {
|
|
delList = append(delList, hm.HundredJackTsList[key][model.HundredjackpotLogMaxLimitPerQuery:]...)
|
|
hm.HundredJackTsList[key] = hm.HundredJackTsList[key][:model.HundredjackpotLogMaxLimitPerQuery]
|
|
}
|
|
if len(hm.HundredJackSortList[key]) > model.HundredjackpotLogMaxLimitPerQuery {
|
|
delList = append(delList, hm.HundredJackSortList[key][model.HundredjackpotLogMaxLimitPerQuery:]...)
|
|
hm.HundredJackSortList[key] = hm.HundredJackSortList[key][:model.HundredjackpotLogMaxLimitPerQuery]
|
|
}
|
|
/*for _, v := range hm.HundredJackTsList[key] {
|
|
logger.Logger.Trace("HundredJackListManager log 3 ", v.SnID, v.LogID, v.GameData)
|
|
}*/
|
|
for _, v := range delList {
|
|
if hm.IsCanDel(v, hm.HundredJackTsList[key], hm.HundredJackSortList[key]) { // 两个排行帮都不包含
|
|
logger.Logger.Info("HundredJackListManager DelOneJackInfo ", v.LogID)
|
|
hm.DelOneJackInfo(v.Platform, v.LogID)
|
|
}
|
|
}
|
|
}
|
|
|
|
// IsCanDel 能否删除
|
|
func (hm *HundredJackListManager) IsCanDel(deldata *HundredJackInfo, tsList, sortList []*HundredJackInfo) bool {
|
|
for _, v := range tsList {
|
|
if v.LogID == deldata.LogID {
|
|
return false
|
|
}
|
|
}
|
|
for _, v := range sortList {
|
|
if v.LogID == deldata.LogID {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// InsertLog insert db
|
|
func (hm *HundredJackListManager) InsertLog(log *model.HundredjackpotLog) {
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
err := model.InsertHundredjackpotLog(log)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager Insert ", err)
|
|
}
|
|
return err
|
|
}), nil, "InsertHundredJack").Start()
|
|
}
|
|
|
|
// UpdateLikeNum updata likenum
|
|
func (hm *HundredJackListManager) UpdateLikeNum(plt string, gid bson.ObjectId, like int32, likesnids string) {
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
err := model.UpdateLikeNum(plt, gid, like, likesnids)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager UpdateHundredLikeNum ", err)
|
|
}
|
|
return err
|
|
}), nil, "UpdateHundredLikeNum").Start()
|
|
}
|
|
|
|
// UpdatePlayBlackNum updata playblacknum
|
|
func (hm *HundredJackListManager) UpdatePlayBlackNum(plt string, gid bson.ObjectId, playblack int32) []string {
|
|
var ret []string
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
data, err := model.UpdatePlayBlackNum(plt, gid, playblack)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager DelOneJackInfo ", err)
|
|
return nil
|
|
}
|
|
return data
|
|
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
|
|
if data != nil {
|
|
ret = data.([]string)
|
|
logger.Logger.Warnf("UpdatePlayBlackNum data:%v", ret)
|
|
}
|
|
return
|
|
}), "UpdatePlayBlackNum").Start()
|
|
|
|
logger.Logger.Error("HundredJackListManager UpdatePlayBlackNum ", ret)
|
|
if len(ret) == 0 {
|
|
return ret
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DelOneJackInfo del
|
|
func (hm *HundredJackListManager) DelOneJackInfo(plt string, gid bson.ObjectId) {
|
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
err := model.RemoveHundredjackpotLogOne(plt, gid)
|
|
if err != nil {
|
|
logger.Logger.Error("HundredJackListManager DelOneJackInfo ", err)
|
|
}
|
|
return err
|
|
}), nil, "DelOneJackInfo").Start()
|
|
}
|
|
|
|
func init() {
|
|
module.RegisteModule(HundredJackListMgr, time.Hour, 0)
|
|
}
|