跳到主要内容

entity_client

简介

作为客户端接入实体对象服务器entity server

本pkg用于创建连接entity server的客户端连接对象;

组件接口

EntityClient.gs

处理entity server连接的对象

提示

本对象包含组件:pkg.request_client

函数原型函数作用
bool ping()检查目标主机是否可用
bool get_or_create_entity(string key, map dbase = )确保一个实体对象存在,必须要时新建一个实体对象
bool create_entity(string key, map dbase = )创建一个实体对象;特别的,实体对象已经存在时,返回失败
bool destroy_entity(string key)销毁一个实体对象
bool focus_entity(string key, function func)关注一个实体对象的数值变更
array query_entire_dbase(string key)获取一个实体对象的完整数据
array query(string key, string field)获取一个实体对象的指定字段的值
array query_by_path(string key, string path)获取一个实体对象的指定路径字段的值
array multi_query(string key, array paths)获取一个实体对象的多个字段的值
array sync_set(string key, string field, mixed value)设置一个实体对象的指定字段的值,并阻塞式同步给所有镜像对象
array sync_dict_set(string key, string d, mixed field, mixed value)设置一个实体对象的指定词典里字段的值,并阻塞式同步给所有镜像对象
array sync_dict_insert(string key, string d, int pos, mixed val)在一个实体对象的指定数组字段的指定位置插入值,并阻塞式同步给所有镜像对象
array sync_dict_push_back(string key, string d, mixed val)在一个实体对象的指定数组字段的尾部位置插入值,并阻塞式同步给所有镜像对象
array sync_delete(string key, string field)删除一个实体对象的指定字段值,并阻塞式同步给所有镜像对象
array sync_dict_delete(string key, string d, mixed field)删除一个实体对象的指定词典字段的值,并阻塞式同步给所有镜像对象
array sync_dict_delete_at(string key, string d, int pos)删除一个实体对象的指定数组字段的指定位置的值,并阻塞式同步给所有镜像对象
array sync_add(string key, string field, mixed val)在一个实体对象的指定字段增加指定值,并阻塞式同步给所有镜像对象
array async_set(string key, string field, mixed value)设置一个实体对象的指定字段的值,并非阻塞式同步给所有镜像对象
array async_dict_set(string key, string d, mixed field, mixed value)设置一个实体对象的指定词典里字段的值,并非阻塞式同步给所有镜像对象
array async_dict_insert(string key, string d, int pos, mixed val)在一个实体对象的指定数组字段的指定位置插入值,并非阻塞式同步给所有镜像对象
array async_dict_push_back(string key, string d, mixed val)在一个实体对象的指定数组字段的尾部位置插入值,并非阻塞式同步给所有镜像对象
array async_delete(string key, string field)删除一个实体对象的指定字段值,并非阻塞式同步给所有镜像对象
array async_dict_delete(string key, string d, mixed field)删除一个实体对象的指定词典字段的值,并非阻塞式同步给所有镜像对象
array async_dict_delete_at(string key, string d, int pos)删除一个实体对象的指定数组字段的指定位置的值,并非阻塞式同步给所有镜像对象
array async_add(string key, string field, mixed val)在一个实体对象的指定字段增加指定值,并非阻塞式同步给所有镜像对象
array invoke_entity(string key, string method, array method_args)调用一个实体对象的指定方法

entity_client.gs

函数原型函数作用
object create_client(map para)创建一个连接entity server的客户端连接对象

样例

#pragma parallel

import gs.lang.*;
import gs.util.*;

import pkg.entity_client;

readonly object _client;
readonly string _test_key := "abc";

void create()
{
map para = {
"using_websocket" : false, // 使用gs私有协议连接
"host" : "127.0.0.1", // entity server主机地址
"port" : 8931, // entity server主机端口
"token" : "CLTK1548468743", // 登录验证token
"server_id" : "demo_server1", // 本客户端身份id
"port_recv_size" : 1024 * 1024, // 接收缓冲区大小
"cookieless_msg_queue" : queue.create(""), // 接收entity server通知的队列
};
_client := entity_client.create_client(para);
_client.ping();

// 关注实体对象"abc"的数据变更
bool result = _client.focus_entity(_test_key, (map args) {
printf("key=%s, args=%O\n", args["key"], args);
});
printf("result: %O\n", result);

// 创建实体对象"abc"
map dbase = {
"a" : 1,
"b" : [ 2, 3, 4 ],
"c" : {
"x" : "o",
"y" : [ "p", "q" ],
"z" : {
"r" : "f"
}
}
};
if (! _client.get_or_create_entity(_test_key, dbase))
printf("create entity %s failed\n", _test_key);
}

void destruct()
{
_client.focus_entity(_test_key, nil);
_client.destroy_entity(_test_key);
}

public void sample()
{
bool success;
mixed v;

let success, v = _client.query_entire_dbase(_test_key);
if (success)
printf("entire dbase = %O\n", v);

let success, v = _client.query(_test_key, "a");
if (success)
printf("field a = %O\n", v);

let success, v = _client.multi_query(_test_key, [ "a", "b", "c" ]);
if (success)
printf("field a,b,c = %O\n", v);

let success, v = _client.query_by_path(_test_key, "c/z");
if (success)
printf("path c/z = %O\n", v);

let success, v = _client.sync_set(_test_key, "a", 10);
if (success)
printf("field a set success\n");

let success, v = _client.sync_delete(_test_key, "a");
if (success)
printf("field a delete success\n");

let success, v = _client.sync_dict_set(_test_key, "c", "x", "oooo");
if (success)
printf("field c.x set success\n");

let success, v = _client.sync_dict_delete(_test_key, "c", "x");
if (success)
printf("field c.x delete success\n");

let success, v = _client.async_set(_test_key, "a", 10);
if (success)
printf("field a set success\n");

let success, v = _client.async_delete(_test_key, "a");
if (success)
printf("field a delete success\n");

let success, v = _client.async_dict_set(_test_key, "c", "x", "oooo");
if (success)
printf("field c.x set success\n");

let success, v = _client.async_dict_delete(_test_key, "c", "x");
if (success)
printf("field c.x delete success\n");
}