6.4.1 状态查询
状态查询接口用来获取以下信息:
- 判断本地是否安装aTrust客户端
 - 用户登录状态
 - 隧道状态
 - 当前在线用户名
 - 当前在线的服务器地址
 
接口定义
atrust_error_code ATRUST_API atrust_sync_query_status(atrust_status **data);
参数和返回值说明
| 参数名 | 类型 | 出参/入参 | 必须 | 说明 | 
|---|---|---|---|---|
| 返回值 | atrust_error_code | out | aTrust标准错误及回复码 | 
示例代码
atrust_status *data = NULL;
atrust_error_code ec = atrust_sync_query_status(&data);
if (ec != atrust_error_code::OK) {
    switch (ec) {  
    case atrust_error_code::OUT_PARAM_WRITE_ERROR:
        // 出参无法写入!
        return;
    case atrust_error_code::ATRUST_CONNECT_ERROR:
        // aTrust客户端连接失败!如果重试任然失败,请检查aTrustAgent进程是否正常运行。
        return;
    case atrust_error_code::ATRUST_CLIENT_NOT_INSTALL:
        // 本地未安装aTrust客户端会返回该错误码
        return;
    // 未知的业务执行过程失败
    default:
        // 接口调用失败!请在atrust_code.h中检查错误码,或尝试重试。错误码:ec
        return;
    }
}
// 成功
// 状态查询成功!
// 用户状态:data->user_status
// 隧道状态:data->tunnel_status
if (data->user_status != ATRUST_USER_STATUS_OFFLINE && data->user_status != ATRUST_USER_STATUS_DISCONNECT) {
    // 当前在线用户:data->online_username 
    // 服务器地址:data->online_sdpc_addr
    // 服务器guid:data->online_sdpc_guid
}
// 释放内存
atrust_free(data);
data = nullptr;
补充说明
由于您的用户可能没有隧道资源,因此,在登录成功之后,可能隧道状态任然和登录前一样是隧道不可用。此时并不是异常状态。
通过状态查询接口的错误码返回值ATRUST_CLIENT_NOT_INSTALL(20003)可以判断本地是否安装了aTrust客户端
6.4.2 状态码
用户状态结构体
/**
 * @brief 整体状态
 */
struct atrust_status {
    atrust_user_status      user_status;                        ///< 用户状态
    atrust_tunnel_status    tunnel_status;                        ///< 隧道状态
    char online_username[ATRUST_LENGTH_COMMON_STATUS_DATA];        ///< 当前在线用户名
    char online_sdpc_addr[ATRUST_LENGTH_URL];                    ///< 当前在线服务器的地址
    char online_sdpc_guid[ATRUST_LENGTH_COMMON_STATUS_DATA];    ///< 当前在线的服务器的GUID
};
用户当前登录状态取值
获取到用户当前状态之后,其中aturst_stuats结构中的user_status取值
/**
 * @brief 登录状态
 */
enum atrust_user_status {
    ATRUST_USER_STATUS_OFFLINE = 20100,  ///< 用户处于注销状态,未登录
    ATRUST_USER_STATUS_ONLINE,           ///< 已有用户在线(不一定是当前用户)
    ATRUST_USER_STATUS_CURRENT_ONLINE,   ///< 当前用户在线当前SDPC
    ATRUST_USER_STATUS_OTHER_ONLINE,     ///< 其他用户在线,或已有用户登录了其他aTrust服务器
    ATRUST_USER_STATUS_DISCONNECT,       ///< 用户断线,连接不上sdpc
};
隧道状态码
获取到用户当前状态之后,其中aturst_stuats结构中的tunnel_status取值
/**
 * @brief 隧道状态
 */
enum atrust_tunnel_status {
    ATRUST_TUNNEL_STATUS_UNAVAILABLE = 0,   ///< 隧道不可用
    ATRUST_TUNNEL_STATUS_PREPARING,         ///< 隧道启动中
    ATRUST_TUNNEL_STATUS_AVAILABLE,         ///< 隧道可用
};
6.4.3 错误码说明
| 错误码 | KEY | 描述 | 
|---|---|---|
| 0 | OK | 操作成功 | 
| 20002 | ATRUST_CONNECT_ERROR | 本地aTrustAgent服务连接错误,可能aTrustAgent服务没有运行 | 
| 20003 | ATRUST_CLIENT_NOT_INSTALL | 本地未安装aTrust客户端 | 
完整错误码请参考aTrustSDK集成库中的aturst_code.h文件