mirror of
https://github.com/duanhf2012/origin.git
synced 2026-05-13 02:17:35 +08:00
优化排行榜RankService,支持RPC接口新增排行榜功能
This commit is contained in:
@@ -129,20 +129,23 @@ func (mp *MongoPersist) ReadCfg() error {
|
||||
func (mp *MongoPersist) OnStart() {
|
||||
}
|
||||
|
||||
func (mp *MongoPersist) OnFinishSetupRank(mapRankSkip map[uint64]*RankSkip) error{
|
||||
mp.mapRankSkip = map[uint64]IRankSkip{}
|
||||
for rankId,rank := range mapRankSkip {
|
||||
mp.mapRankSkip[rankId] = rank
|
||||
func (mp *MongoPersist) OnSetupRank(manual bool,rankSkip *RankSkip) error{
|
||||
if mp.mapRankSkip == nil {
|
||||
mp.mapRankSkip = map[uint64]IRankSkip{}
|
||||
}
|
||||
|
||||
for rankId,rank := range mp.mapRankSkip{
|
||||
err := mp.loadFromDB(rankId,rank.GetRankName())
|
||||
if err != nil {
|
||||
log.SError("load from db is fail :%s",err.Error())
|
||||
return err
|
||||
}
|
||||
mp.mapRankSkip[rankSkip.GetRankID()] = rankSkip
|
||||
if manual == true {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.SRelease("start load rank ",rankSkip.GetRankName()," from mongodb.")
|
||||
err := mp.loadFromDB(rankSkip.GetRankID(),rankSkip.GetRankName())
|
||||
if err != nil {
|
||||
log.SError("load from db is fail :%s",err.Error())
|
||||
return err
|
||||
}
|
||||
log.SRelease("finish load rank ",rankSkip.GetRankName()," from mongodb.")
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ type IRankSkip interface {
|
||||
type IRankModule interface {
|
||||
service.IModule
|
||||
|
||||
OnFinishSetupRank(map[uint64]*RankSkip) error //当完成安装排行榜对象时
|
||||
|
||||
OnSetupRank(manual bool,rankSkip *RankSkip) error //当完成安装排行榜对象时
|
||||
OnStart() //服务开启时回调
|
||||
OnEnterRank(rankSkip IRankSkip, enterData *RankData) //进入排行
|
||||
OnLeaveRank(rankSkip IRankSkip, leaveData *RankData) //离开排行
|
||||
|
||||
@@ -48,6 +48,30 @@ func (rs *RankService) SetupRankModule(rankModule IRankModule) {
|
||||
rs.rankModule = rankModule
|
||||
}
|
||||
|
||||
// RPC_ManualAddRankSkip 提供手动添加排行榜
|
||||
func (rs *RankService) RPC_ManualAddRankSkip(addInfo *rpc.AddRankList, addResult *rpc.RankResult) error {
|
||||
for _, addRankListData := range addInfo.AddList {
|
||||
if addRankListData.RankId == 0 {
|
||||
return fmt.Errorf("RPC_AddRankSkip must has rank id")
|
||||
}
|
||||
|
||||
//重复的排行榜信息不允许添加
|
||||
rank := rs.mapRankSkip[addRankListData.RankId]
|
||||
if rank != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
newSkip := NewRankSkip(addRankListData.RankId,addRankListData.RankName,addRankListData.IsDec, transformLevel(addRankListData.SkipListLevel), addRankListData.MaxRank,time.Duration(addRankListData.ExpireMs)*time.Millisecond)
|
||||
newSkip.SetupRankModule(rs.rankModule)
|
||||
|
||||
rs.mapRankSkip[addRankListData.RankId] = newSkip
|
||||
rs.rankModule.OnSetupRank(true,newSkip)
|
||||
}
|
||||
|
||||
addResult.AddCount = 1
|
||||
return nil
|
||||
}
|
||||
|
||||
// RPC_UpsetRank 更新排行榜
|
||||
func (rs *RankService) RPC_UpsetRank(upsetInfo *rpc.UpsetRankData, upsetResult *rpc.RankResult) error {
|
||||
rankSkip, ok := rs.mapRankSkip[upsetInfo.RankId]
|
||||
@@ -187,9 +211,13 @@ func (rs *RankService) dealCfg() error {
|
||||
newSkip := NewRankSkip(uint64(rankId),rankName,isDec, transformLevel(int32(level)), uint64(maxRank),time.Duration(expireMs)*time.Millisecond)
|
||||
newSkip.SetupRankModule(rs.rankModule)
|
||||
rs.mapRankSkip[uint64(rankId)] = newSkip
|
||||
err := rs.rankModule.OnSetupRank(false,newSkip)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return rs.rankModule.OnFinishSetupRank(rs.mapRankSkip)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package rpc;
|
||||
option go_package = ".;rpc";
|
||||
|
||||
// RankData 排行数据
|
||||
message RankData {
|
||||
uint64 Key = 1; //数据主建
|
||||
repeated int64 SortData = 2; //参与排行的数据
|
||||
bytes Data = 3; //不参与排行的数据
|
||||
int64 expireMs = 4; //剩余有效时间毫秒,如果为0永不过期
|
||||
}
|
||||
|
||||
// RankPosData 排行数据——查询返回
|
||||
message RankPosData {
|
||||
uint64 Key = 1; //数据主建
|
||||
uint64 RankPos = 2; //名次
|
||||
repeated int64 SortData = 3; //参与排行的数据
|
||||
bytes Data = 4; //不参与排行的数据
|
||||
}
|
||||
|
||||
// RankList 排行榜数据
|
||||
message RankList {
|
||||
uint64 RankId = 1; //排行榜类型
|
||||
int32 SkipListLevel = 2; //排行榜level-生成的跳表的level, 8/16/32/64等
|
||||
bool IsDec = 3; //不参与排行的数据
|
||||
uint64 MaxRank = 4; //最大排名
|
||||
}
|
||||
|
||||
// UpsetRankData 更新排行榜数据
|
||||
message UpsetRankData {
|
||||
uint64 RankId = 1; //排行榜的ID
|
||||
repeated RankData RankDataList = 2; //排行数据
|
||||
}
|
||||
|
||||
// DeleteByKey 更新排行榜数据
|
||||
message DeleteByKey {
|
||||
uint64 RankId = 1; //排行榜的分类ID
|
||||
repeated uint64 KeyList = 2; //排行数据
|
||||
}
|
||||
|
||||
// AddRankList 新增排行榜
|
||||
message AddRankList {
|
||||
repeated RankList AddList = 1; //添加的排行榜列表
|
||||
}
|
||||
|
||||
// FindRankDataByKey 查找排行信息
|
||||
message FindRankDataByKey {
|
||||
uint64 RankId = 1; //排行榜的ID
|
||||
uint64 Key = 2; //排行的key
|
||||
}
|
||||
|
||||
// FindRankDataByPos 查找排行信息
|
||||
message FindRankDataByPos {
|
||||
uint64 RankId = 1; //排行榜的ID
|
||||
uint64 Pos = 2; //排行名次
|
||||
}
|
||||
|
||||
// FindRankDataListStartTo 查找排行信息,StartPos开始Count个
|
||||
message FindRankDataListStartTo {
|
||||
uint64 RankId = 1; //排行榜的ID
|
||||
uint64 StartPos = 2; //排行的位置 0开始
|
||||
uint64 Count = 3; //查询格式
|
||||
}
|
||||
|
||||
// RankDataList
|
||||
message RankDataList {
|
||||
uint64 RankDataCount = 1; //排行长度
|
||||
repeated RankPosData RankPosDataList = 2; //排行数据
|
||||
}
|
||||
|
||||
// RankResult
|
||||
message RankResult {
|
||||
int32 AddCount = 1; //增加记录
|
||||
int32 RemoveCount = 2; //删除数量
|
||||
int32 ModifyCount = 3; //修改数量
|
||||
}
|
||||
Reference in New Issue
Block a user