其他订阅事件
本页记录连接事件和请求结果回调。客户端创建、连接、断开和心跳见客户端生命周期。
连接成功回调
void IPushClient::set_connected_callback(const std::function<void()> &cb)注册连接建立回调。回调无参数、无返回值;仅表示连接已建立,不表示订阅已成功。
push_client->set_connected_callback([]() { std::cout << "connected\n"; });断开回调
void IPushClient::set_disconnected_callback(const std::function<void()> &cb)注册连接断开回调。回调运行在线程内部;不要在回调中销毁正在执行回调的客户端。
push_client->set_disconnected_callback([]() { std::cout << "disconnected\n"; });内部连接错误
void IPushClient::set_inner_error_callback(
const std::function<void(std::string)> &cb)接收传输层字符串错误。这是唯一接收 std::string 的错误回调。
push_client->set_inner_error_callback([](std::string message) {
std::cerr << message << '\n';
});订阅结果
void IPushClient::set_subscribe_callback(
const std::function<void(const tigeropen::push::pb::Response&)> &cb)接收异步订阅确认。订阅方法立即返回本地请求 ID;回调中的 Response.id() 与该 ID 对应。code() 表示结果,msg() 提供服务端消息。返回 ID 不代表订阅成功,也不是行情数据序号。
unsigned int pending_id = 0;
push_client->set_subscribe_callback([&](const tigeropen::push::pb::Response& response) {
if (response.id() == pending_id) {
std::cout << response.code() << ": " << response.msg() << '\n';
}
});
pending_id = push_client->subscribe_quote({"AAPL"});模型形状(来自 Response.pb.h)
| 字段/accessor | Protobuf 类型 | 说明 |
|---|---|---|
command() | SocketCommon.Command | 响应命令 |
id() | uint32 | 与方法返回值关联的请求 ID |
code() | int32 | 服务端结果码 |
msg() | string | 服务端消息 |
body() | PushData | 可选响应 body |
回调公开这些 Protobuf 字段。可选值取决于响应,读取 body() 前请检查回调对象。
取消订阅结果
void IPushClient::set_unsubscribe_callback(
const std::function<void(const tigeropen::push::pb::Response&)> &cb)语义与订阅结果相同;使用 Response.id() 关联取消订阅方法返回的请求 ID。
push_client->set_unsubscribe_callback([](const tigeropen::push::pb::Response& response) {
std::cout << response.id() << " " << response.code() << '\n';
});
const unsigned int request_id = push_client->unsubscribe_quote({"AAPL"});服务端错误
void IPushClient::set_error_callback(
const std::function<void(const tigeropen::push::pb::Response&)> &cb)接收服务端协议错误。旧文档中的 std::string 回调类型错误;应读取 Response.id()、code() 和 msg()。
push_client->set_error_callback([](const tigeropen::push::pb::Response& response) {
std::cerr << response.id() << " " << response.code() << " " << response.msg() << '\n';
});连接被替换
void IPushClient::set_kickout_callback(
const std::function<void(const tigeropen::push::pb::Response&)> &cb)接收连接被新会话替换的协议响应。旧文档中的 std::string 类型错误。
push_client->set_kickout_callback([](const tigeropen::push::pb::Response& response) {
std::cerr << "kickout: " << response.msg() << '\n';
});查询订阅结果
void IPushClient::set_query_subscribed_symbols_changed_callback(
const std::function<void(
const tigeropen::push::pb::Response& query_subscribed_symbols_response)> &cb)配合 query_subscribed_symbols() 使用;方法返回请求 ID,回调 Response.id() 用于关联,订阅列表位于响应 body。
push_client->set_query_subscribed_symbols_changed_callback(
[](const tigeropen::push::pb::Response& response) {
std::cout << response.id() << " " << response.body().DebugString();
});
const unsigned int request_id = push_client->query_subscribed_symbols();心跳回调
void IPushClient::set_heartbeat_callback(const std::function<void()> &cb)注册收到心跳时执行的无参数回调。它用于连接健康观测,不替代断线回调。
push_client->set_heartbeat_callback([]() { std::cout << "heartbeat\n"; });权限与限制
回调异步执行,捕获对象的生命周期必须覆盖回调执行过程。请求 ID 仅用于关联当前客户端连接内的消息。行情流需要对应的行情权限,账户流需要账户访问权限。运行时订阅注册与上述访问权限相互独立,并仍受适用的标的额度和频率限制。
Updated 6 days ago
Did this page help you?
