game_server.services
简介
以service实体的形式实现的service管理器
service实体的特性和普通实体的特性是一致的
service实体的基础组件是ServiceEntity,自定义扩展时需要包含该组件
组件接口
ServiceEntity.gs
service实体对象的基础类
一般情况下,使用pkg.game_server.services创建新的service实体对象时,需要component此对象
服务开启, override bool ServiceEntity.on_start()
服务关闭, override void ServiceEntity.on_stop()
服务心跳, override void ServiceEntity.on_heartbeat()
| 函数原型 | 函数作用 |
|---|---|
| void FEntityPrevClose.prev_close() | 虚函数: 析构时的前处理函数 |
| void set_service_name(string service_name) | 设置服务名称 |
| bool is_service() | 判断是否为服务实体 |
| void FEntity.post_factory_create(bool new_create) | 虚函数:创建对象时的后处理 |
| void FEntity.post_factory_fully_create(bool new_create) | 虚函数: 完整创建对象时的后处理函数 |
| bool start() | 启动服务 |
| void stop() | 停止服务 |
| void try_auto_save() | 尝试自动存盘 |
services.gs
| 函数原型 | 函数作用 |
|---|---|
| bool setup(map para = ) | 初始化模块 |
| object load_or_create_service(string name, mixed class_id_or_alias, map dbase = ) | 加载或创建service对象 |
| object get_service(string service_name) | 根据service名称获取service对象 |
| object get_service_by_rid(string rid) | 根据rid获取service对象 |
| void iterate_service(function func) | 遍历所有service对象 |
| object find_service(function func) | 查找第一个符合条件的service对象 |
| bool start_service(string name) | 启动指定名称的service对象服务 |
| void stop_service(string name) | 停止指定名称的service对象服务 |
| void stop_all_services() | 停止所有service对象服务 |
| void add_service(string name, object service_ob) | 添加service对象 |
| void remove_service(string name) | 移除service对象 |
| void dump() | 调试接口,输出service实体列表 |
样例
import pkg.game_server.services;
import engine.preimport;
public void test()
{
cfg.init_by_map({
"server_id" : 1,
"product_name" : "test_services",
"disable_mongo" : true
});
engine.boot();
//注册几个service的entity配置
EntityFactory.append_dynamic_entity_type("service", {
"type": "service",
"prefix" : "SER",
"class_id" : [ 200, 299 ],
"title":"服务",
"db_collection": "entity",
"entity_dbase": { "is_global": true }
});
EntityFactory.append_dynamic_entity_info("service", {
"class_id": 200,
"alias": "global",
"name":"全局服务",
"ob_file": __DIR__ "GlobalService.gs",
"desc":"全局服务,管理各种全局数据",
}, true);
// 因为没有提供mongodb,所以以下操作结果都是失败
string service_name = "test0";
object service_ob = services.load_or_create_service(service_name, 200);
test_equal(service_ob, nil);
bool start_result = services.start_service(service_name);
test_equal(start_result, false);
string service_name2 = "test2";
object service_ob2 = services.load_or_create_service(service_name2, "global");
test_equal(service_ob2, nil);
bool start_result2 = services.start_service(service_name2);
test_equal(start_result2, false);
}