client_plugin
TSL语言的跨平台实现的Client插件,用于发起向服务器发送请求。
安装
(已集成到mytsl
发行版中)
动态库文件:Windows: client_plugin.dll, Linux: libclient_plugin.so。
把相关的动态库文件拷贝到执行服务器或者TSL目录的plugin目录。
(如果需要下载兼容正式版的Windows版本的动态库文件请访问这里)。
使用指南
提供的TSL函数:
client_session
client_session(host, port, user, passwd, [proxy])
: 发起会话。
-
参数列表
参数 描述 host 服务器地址。 port 服务器端口。 user 用户名 password 密码。 proxy 代理服务器信息,字符串对数组类型,包含的字段如下: Address 代理服务器地址。 Port 代理服务器端口。 -
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 会话ID 会话ID将会在下面的函数中用到。
client_session_alias
client_session_alias(alias)
: 用配置别名发起会话。
-
参数列表
参数 描述 alias 别名。 配置文件是tslclient.ini,配置和天软客户端一致。
-
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 会话ID
client_destroy
client_destroy(session)
: 关闭会话。
-
参数列表
参数 描述 session client_session 返回的会话ID。 -
返回值 1
Note
会话是自动管理的,并不强制要求关闭。显式关闭可以提取释放系统资源。
client_exec
client_exec(session, body, [sysparam], [timeout])
: 发起执行代码请求。
-
参数列表
参数 描述 session client_session 返回的会话ID。 body 代码。 sysparam 系统参数,字符串对数组,可选参数。 timeout 超时设置,毫秒精度,可选参数。 “魔法参数”模式下: sysparam和timeout参数将由魔法参数代替,支持的魔法参数有:
参数 描述 @stock 股票 @time 当前时间 @cycle 当前周期 @rate 复权方式 @rateday 复权基准日 @precision 精度设置 @viewpoint 设定仿真的时点 @reportmode 报表数据规则 @emptymode 空记录模式 @nday 周期数目 @freecycle 自由周期 @stockarr 当前组合 @cdmode 股本获取方式 @cyclefilter 周期过滤器 @profiler 优化器类型 @bk 板块名称 @fp 精度设置,同@precision @cf 周期过滤器,同@cyclefilter @timeout 超时设置,毫秒精度 @service 指定服务器群 -
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 结果 2 辅助结果
client_call
client_call(session, func, param, [sysparam], [timeout])
: 发起调用函数请求。
-
参数列表
参数 描述 session client_session 返回的会话ID。 func 函数名。 param 函数参数,数组格式,可选参数。 sysparam 系统参数,字符串对数组,可选参数。 timeout 超时设置,毫秒精度,可选参数。 如果func是@开头的表达式类型将开启“魔法参数”模式: param不需要了,因为已经在@func的表达式中了。sysparam和timeout参数将由魔法参数代替,支持的魔法参数同client_exec,另外额外支持:
参数 描述 @code 代码 例如:
-
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 结果 2 辅助结果
client_info
client_info(seesion)
: 返回相关用户配置信息。
-
参数列表
参数 描述 session client_session 返回的会话ID。 -
返回值
字符串对数组,其中EventList项对应的就是服务器群。
client_admin
client_admin(seesion, cmd)
: 发送管理命令。
-
参数列表
参数 描述 session client_session 返回的会话ID。 cmd 命令,字符串类型。 -
返回值
字符串类型。
client_default_service
client_default_service(seesion, service)
: 设置会话缺省的服务器群。
-
参数列表
参数 描述 session client_session 返回的会话ID。 service 指定的服务器群。 -
返回值
上次设置的服务器群或者空字符串。
client_bgrun_exec
client_bgrun_exec(seesion, body, [sysparam])
: 发起委托执行请求。
-
参数列表
参数 描述 session client_session 返回的会话ID。 body 代码。 sysparam 系统参数,字符串对数组,可选参数。 “魔法参数”模式: sysparam参数将由魔法参数代替,支持的魔法参数同client_exec,除了timeout的设置。
-
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0
client_bgrun_list
client_bgrun_list(seesion)
: 列出当前正在运行的委托执行。
-
参数列表
参数 描述 session client_session 返回的会话ID。 -
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 [委托执行句柄,名称,发起时间,已运行时间] ... ...
其中委托执行句柄可以用来取消委托执行。
client_bgrun_cancel
client_bgrun_cancel(seesion, handle)
: 取消某个委托执行。
-
参数列表
参数 描述 session client_session 返回的会话ID。 handle 委托执行句柄 -
返回值 1
client_batch_exec
client_batch_exec(session, body, [sysparam], [service], [key])
: 发起批执行代码请求。
-
参数列表
参数 描述 session 会话ID。 body 代码。 sysparam 系统参数,字符串对数组,可选参数。 service 指定执行的服务群,可选参数。 key 关键字,字符串类型,可选参数。 tag 分组标签,字符串类型,可选参数。 “魔法参数”模式: sysparam、service和key参数将由魔法参数代替,支持的魔法参数同client_exec,另外支持: @key 关键字 @tag 分组标签
-
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 批任务的ID
client_batch_call
client_batch_call(session, func, [param], [sysparam], [service], [key], [tag])
: 发起批函数调用请求。
-
参数列表
参数 描述 session client_session 返回的会话ID。 func 函数名。 param 函数参数,数组类型,可选参数。 sysparam 系统参数,字符串对数组,可选参数。 service 指定执行的服务群,可选参数。 key 关键字,字符串类型,可选参数。 tag 分组标签,字符串类型,可选参数。 如果func是@开头的表达式类型将开启“魔法参数”模式: param不需要了,因为已经在@func的表达式中了。sysparam、service和key参数将由魔法参数代替,支持的魔法参数同client_exec,另外支持: @key 关键字 @tag 分组
-
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 批任务的ID
client_batch_any
client_batch_any()
: 等待任意一个批任务完成并返回结果。
-
参数列表 无
-
返回值
如果没有任务,返回结果为空数组。否则,数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 2 关键字 3 分组 4 任务状态 没有错误:
下标 值 0 0 1 结果 2 辅助结果 3 关键字 4 分组 5 任务状态 任务状态:
值 说明 0 正常完成 1 超时 2 取消
client_batch_all
client_batch_all()
: 等待所有批任务完成并获取所有批任务的结果。
-
参数列表 无
-
返回值
如果没任务,返回空数组。 否则,返回内容是client_batch_any返回结果的数组。
client_batch_wait
client_batch_wait(job_id)
: 等待指定批任务完成并返回结果。
client_batch_wait(@tag)
: 等待指定分组批任务中任何一个完成并返回结果。
-
参数列表
参数 描述 job_id 任务ID 魔法参数: @timeout 超时设置,毫秒精度。
-
返回值
如果没有任务,返回结果为空数组。否则,数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 2 关键字 3 分组 4 任务状态 没有错误:
下标 值 0 0 1 结果 2 辅助结果 3 关键字 4 分组 5 任务状态
client_batch_cancel
client_batch_cancel(job_id)
: 取消指定批任务。
client_batch_cancel(@tag)
: 取消指定分组批任务。
-
参数列表
参数 描述 job_id 任务ID @tag 分组标签 -
返回值
数组类型,如果发生错误:
下标 值 0 错误代码 1 错误信息 没有错误:
下标 值 0 0 1 取消结果
client_batch_setparallel
client_batch_setparallel(max_parallel)
: 设置批任务最大的并发执行数,具体和用户相关。
-
参数列表
参数 描述 max_parallel 最大的并发执行数,整数类型。 -
返回值
上次设置设置的最大并发数,或者默认的并发数,系统缺省是5。
范例
会话
[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
ra := client_exec(session, "return datetimetostr(now());");
echo tostn(ra);
ra := client_exec(session, "return rd(1);", array("StockID":"SZ000001"));
echo "rd(1)=", tostn(ra);
ra := client_call(session, "close", array(), array("StockID":"SZ000001"));
echo "close=", tostn(ra);
client_destroy(session);
批功能
[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
bk := client_call(session, "getbk", array("A股"));
for k, s in bk[1] do
client_batch_call(session, "close", array(), array("StockID":s), "", s);
while True do
begin
r := client_batch_any();
echo tostn(r);
if r[0] then break;
end;
委托执行
[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
// 发起委托执行
ra := client_bgrun_exec(session, " while 1 do sleep(100);");
// 列出委托执行列表
ra := client_bgrun_list(session);
echo tostn(ra);
// 取消第一个委托执行
ra := client_bgrun_cancel(session, ra[0][0]);
// 再次列出委托执行列表
ra := client_bgrun_list(session);
echo tostn(ra);
魔法参数
[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
[err, bk] := client_call(session, @getbk("A股"));
for k, s in bk do
client_batch_call(session, @close(), @stock(s), @key(s));
while True do
begin
r := client_batch_any();
println("{}", r);
if r[0] then break;
end;
client_destroy(session);
client调用就像在写本地TSL代码,是不是感觉很亲切,瞬间神清气爽 ;-)
异步执行和取消
[err, c] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
[err, job] := client_batch_exec(c, "Sleep(2000); return 2000;");
[err, res] := client_batch_wait(job, @timeout(500)); // 将会返回超时错误信息
[err, res] := client_batch_cancel(job);
[err, res] := client_batch_wait(job);
这时返回结果的任务状态是取消。
任务分组
// "SH" 分组
for _,s in array('SH000001', 'SH000002') do
client_batch_call(c, "close", array(), array("StockID":s), "", s, "SH");
// "SZ" 分组
for _,s in array('SZ000001', 'SZ000002') do
client_batch_call(c, "close", array(), array("StockID":s), "", s, "SZ");
rs := client_batch_wait(@tag("SZ"));
这时返回的是“SZ”分组的结果。
附录
更新历史
- 2022-7-8 更新文档。
- 2021-8-25 初始发布。