global_ob
简介
基于pkg.ob_sync实现的全局对象
可以通过镜像对象和全局对象保持数据同步
组件接口
GlobalObBase.gs
全局对象、镜像对象的基础组件
函数原型 | 函数作用 |
---|---|
void auto_sync(float seconds) | 开始和全局对象同步 |
void stop_auto_sync() | 停止和全局对象同步 |
map query_entire_dbase() | 返回所有须同步的数据 |
mixed query(string key) | 查询须同步的数据 |
void set(mixed key, mixed val) | 设置须同步的数据 |
void delete(mixed key) | 删除须同步的数据 |
void raise(...) | 全局对象抛出一个事件 |
mixed query_temp(mixed key) | 查询无须同步的临时数据 |
void set_temp(mixed key, mixed val) | 设置无须同步的临时数据 |
void delete_temp(mixed key) | 删除无须同步的临时数据 |
GlobalObMaster.gs
全局对象
函数原型 | 函数作用 |
---|---|
object create_mirror(domain d) | 创建一个跟我同步的镜像对象 |
void remove_mirror(object mirror_ob) | 移除一个镜像对象 |
global_ob.gs
函数原型 | 函数作用 |
---|---|
object new_one(string name, map dbase = ) | 创建一个全局对象 |
object find_one(string name) | 根据名称找一个全局对象 |
object new_mirror(string name, domain d = nil) | 从指定名字的全局对象本体创建一个镜像 |
void focus_on(string name, object follower, function fn) | 关注一个全局对象;全局对象数据发生变更时,将通知回调函数 |
void cancel_focus(string name, object follower) | 取消对指定全局对象的关注 |
样例
#pragma parallel
import gs.lang.*;
import gs.util.*;
import pkg.global_ob;
void create()
{
}
public void test()
{
// 创建一个名为"abc"的全局对象
map para = {
"j" : 1,
"k" : 2,
};
object ob = global_ob.new_one("abc", para);
defer ob.close();
sync_object sem = sync_object.create_semaphore();
defer sem.close();
// 创建一个"abc"的镜像,并且关注abc的数据变更
object m1 = global_ob.new_mirror("abc", domain.create());
defer m1.close();
m1=>auto_sync(0.1);
global_ob.focus_on("abc", m1, (: on_event, m1, sem :));
sem.take();
printf("j=%d\n", m1=>query("j"));
printf("k=%d\n", m1=>query("k"));
ob=>set("j", 10);
sem.take();
printf("j=%d\n", m1=>query("j"));
ob=>set("k", 20);
sem.take();
printf("k=%d\n", m1=>query("k"));
}
void on_event(object m1, sync_object sem, ...)
{
printf("master changed: %M\n", $<);
sem.give();
}