game_server.entity_sync
简介
基于engine和发布/订阅机制实现的实体数据同步功能
组件接口
FEntitySync.gs
基于发布/订阅机制实现的实体对象数据同步组件
函数原型 | 函数作用 |
---|---|
string new_sync_id(string name) | 申请一个同步频道 |
void stop_sync(string sync_id) | 停止同步频道(所有参与者退出) |
bool join_sync(string sync_id, function func) | 加入同步频道 |
void quit_sync(string sync_id) | 退出已参加的同步频道 |
void quit_all_sync() | 从已参与的所有同步频道中退出 |
void sync_raise(string sync_id, string event, ...) | 发布数据同步事件! |
bool sync_flush(string sync_id, mixed wait_time = -1) | 等待频道消息执行完 |
样例
object create_hero()
{
map hero_dbase = {};
return EntityFactory.create_entity(1, hero_dbase);
}
public void test()
{
int i;
object ob1 = create_hero();
object ob2 = create_hero();
string sync_id = ob1=>new_sync_id("NAME");
ob2=>join_sync(sync_id, (: on_event_sync_id1 :));
for (i = 1 upto 10)
ob1=>sync_raise(sync_id, "event_id", i);
ob1=>stop_sync(sync_id);
for (i = 11 upto 20)
ob1=>sync_raise(sync_id, "event_id", i);
string sync_id2 = ob1=>new_sync_id("NAME2");
ob2=>join_sync(sync_id2, (: on_event_sync_id2 :));
for (i = 1 upto 10)
ob1=>sync_raise(sync_id2, "event_id2", i);
ob2=>quit_sync(sync_id2);
for (i = 11 upto 20)
ob1=>sync_raise(sync_id2, "event_id2", i);
}
void on_event_sync_id1(string sync_id, string event, object raiser, ...)
{
printf("event1: %O", $<);
}
void on_event_sync_id2(string sync_id, string event, object raiser, ...)
{
printf("event2: %O", $<);
}