game.server.rank
简介
组件接口
FRankBoard.gs
为排行榜对象提供启动、收集参与者数据等接口,所有排行榜对象都应该包含本组件
函数原型 | 函数作用 |
---|---|
string get_board_id() | 获取排行榜id |
string get_group_id() | 获取排行榜的分组id |
string get_board_name() | 获取排行榜的名字(跟排行榜服务器中存储排行数据的KEY相关) |
bool start() | 启动排行榜 |
float calc_time_score(mixed t) | 将时间值转换城一个介于0和1之间的浮点数(用来辅助排名权重计算,时间越小,值越大) |
string desc() | 排行榜对象的描述对象(本函数用于调试) |
RankRequest new_request(string cmd) | 新建一个对排行榜进行操作的排行服务器请求 |
bool drop() | 删除排行服务器上的排行数据并切析构自己 |
FRankPlayer.gs
为排行榜参与者提供一组更新排行榜上排名和数据接口的组件 所有排行榜参与者都应该包含该组件
函数原型 | 函数作用 |
---|---|
void refresh_rank(string board_id) | 立刻刷新指定排行榜 |
void refresh_all_ranks() | 刷新所有和参与者类型一致的排行榜 |
void refresh_rank_fields(string board_id, map fields) | 只更新指定排行榜数据但不更新排名 |
void refresh_all_rank_fields(map fields) | 所有排行榜只更新指定排行榜数据但不更新排名 |
void heartbeat_rank() | 排行榜心跳函数,定时刷新参与的带有指定刷新间隔的排行榜排名(可在参与者的心跳函数中执行) |
rank.gs
基于pkg.game.server实现的排行榜功能模块 由三方组成:
- 排行榜对象,排行榜对象必须包含FRankBoard组件
- 参与排行的实体对象,实体对象必须包含本模块提供的FRankPlayer组件
- 排行榜管理对象(rank.gs) 流程简要概括:
- 加载排行榜管理对象 a. rank_board.xlsx表配置 b. rank_server的连接配置(通过cfg.get_config读取) c. 加载排行榜对象的静态对象(rank.load_all_entry方式加载)
- 排行榜管理对象启动服务 管理对象将为rank_board.xlsx表中指定的所有排行榜逐一创建排行榜对象(new_object)并执行 启动操作;需要自行确保所有排行榜对象都创建并且启动
- 一般的,参与排行的实体对象,通过在心跳函数中执行heartbeat_rank()函数更新自己所有的排行榜数据; 同时也可以调用refresh_all_ranks()/reresh_rank()立刻更新所有或者指定的排行榜数据
类
RankRequest
排行榜操作请求class
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
cmd | string | nil | 可选 | |
args | map | nil | 可选 |
成员方法
函数原型 | 函数作用 |
---|---|
void set_cmd(string cmd) | 设置排行榜操作命令 |
void set_args(map args) | 设置排行榜操作参数 |
void append_args(map args) | 追加排行榜操作参数 |
void append_arg(mixed key, mixed value) | 追加一个排行榜操作参数 |
void send() | 发送排行榜操作请求(非阻塞,不等待操作结果) |
mixed send_request() | 发送排行榜操作请求(阻塞,等待操作结果) |
array send_request_rich() | 发送排行榜操作请求,包装返回结果(阻塞,等待操作结果) |
样例
public void test()
{
cfg.init_by_map({
"server_id" : 1,
"disable_mongo" : true,
"product_name" : "test_rank",
"rank_server" : {
"ip" : "127.0.0.1",
"port" : 6634
}
});
etc.set("transform_to_dat", false);
server_base.boot();
// 增加类型
EntityFactory.append_dynamic_entity_type("user", {
"type" : "user",
"prefix" : "U",
"class_id" : [ 1, 100],
"title" : "