跳到主要内容

game_server.entity_domain

简介

组件接口

entity_domain.gs

基于权重分配的entity域管理器,处理游戏服务器中实体对象的域分配

  1. 通过entity_domain分配出来的域,关联着一个资源对象
  2. 相同的域共享资源对象所提供的资源:心跳对象、延迟处理对象等
  3. 域的分配策略: 优先获取权重值最小的资源对象所在的域
函数原型函数作用
void setup(map para = nil)本模块的初始化函数
domain create_entity_domain(mixed class_id, string entity_rid = nil)为一个有class id的实体申请域
void release_entity_domain(mixed entity_ob_or_rid)实体归还所在的域
domain exclusive_allocate_domain(string rid)实体以独占模式分配一个域
domain allocate_domain(string rid, int weight = 1)实体以普通模式(权重)分配一个域
void release_domain(string rid)实体归还域
object find_asset_ob(domain d)查找域对应的资源对象
object find_asset_ob_by_rid(string rid)根据rid查找对应的资源对象
void dump_all()调试接口: 输出所有资源池信息

FEntityDomainAsset.gs

实体对象使用域资源的组件 实体对象如果希望共享域资源,需要使用此组件

函数原型函数作用
object get_asset_ob()获取使用的域资源对象
object get_delay()获取使用的延迟对象

样例

public void test()
{
cfg.init_by_map({
"server_id" : 1,
"disable_mongo" : true
});
engine.boot();

map para = {
"asset_pool" : {
"initial_asset_count" : 1
}
};

entity_domain.setup(para);

string rid = RidD.new_rid("T");
domain d = entity_domain.create_entity_domain(1, rid);
test_equal(d != nil, true);

string rid2 = RidD.new_rid("X");
domain d2 = entity_domain.allocate_domain(rid2, 10);
test_equal(d2 != nil, true);

test_equal(d == d2, true);

string rid3 = RidD.new_rid("E");
domain d3 = entity_domain.exclusive_allocate_domain(rid3);
test_equal(d3 != nil, true);

test_equal(d != d3, true);
}