登录系统
概述
登录系统负责用户身份验证。支持登录码登录、本地保存/自动加载、登录超时监控等功能。
运行模式
通过 txnet_set_login_mode 设置,影响登录失败时的行为:
| 模式 | 值 | 登录失败行为 |
|---|---|---|
| 默认模式 | 0 | 提示用户重新输入登录码,循环直到成功 |
| 自定义模式 | 1 | 单次尝试后返回,由调用方处理失败情况 |
登录超时
连接成功后会自动启动登录超时监控:
- 超时时间: 3分钟(180秒)
- 默认模式: 超时后打印提示并调用
exit(1) - 自定义模式: 超时后仅触发回调(code=-10),不退出程序
登录码来源优先级
- 通过
txnet_set_login_code预设的登录码 - 从
login_save_path文件中读取的已保存登录码 - 默认模式下从控制台输入
函数
txnet_set_login_mode
cpp
void txnet_set_login_mode(int mode);设置登录模式。
| 参数 | 类型 | 说明 |
|---|---|---|
mode | int | 0=默认模式,1=自定义模式 |
txnet_set_login_callback
cpp
void txnet_set_login_callback(txnet_login_callback cb);设置登录结果回调函数。
txnet_set_login_code
cpp
void txnet_set_login_code(const char* code);预设登录码。设置后,txnet_login 会优先使用此登录码。
| 参数 | 类型 | 说明 |
|---|---|---|
code | const char* | 登录码字符串 |
txnet_login
cpp
void txnet_login();执行登录流程。此函数会阻塞直到登录成功或退出。
注意
必须先调用 txnet_connect 连接成功后才能登录。
txnet_is_logged_in
cpp
bool txnet_is_logged_in();检查当前是否已登录。
txnet_get_expire_time
cpp
long long txnet_get_expire_time();获取当前登录的到期时间(Unix 时间戳,毫秒)。
回调函数
txnet_login_callback
cpp
typedef void (*txnet_login_callback)(
bool success,
int code,
const char* message,
long long expire_time
);| 参数 | 类型 | 说明 |
|---|---|---|
success | bool | 是否登录成功 |
code | int | 结果码 |
message | const char* | 结果描述文本 |
expire_time | long long | 到期时间戳(毫秒) |
结果码:
| 值 | 说明 |
|---|---|
| 0 | 登录成功 |
| -1 | 未连接服务器 |
| -2 | 密钥交换失败 |
| -3 | 未设置登录码 |
| -4 | 登录超时(网络响应超时) |
| -5 | 登录失败(服务器返回错误) |
| -6 | 网络错误 |
| -10 | 登录超时(3分钟未完成登录) |
示例
默认模式
cpp
#include "txnet.h"
void onLogin(bool success, int code, const char* msg, long long expire) {
if (success) {
printf("登录成功!到期时间: %lld\n", expire);
} else {
printf("登录失败: [%d] %s\n", code, msg);
}
}
int main() {
txnet_init(&config);
txnet_set_login_callback(onLogin);
if (!txnet_connect()) return 1;
txnet_login();
if (txnet_is_logged_in()) {
printf("当前已登录,到期: %lld\n", txnet_get_expire_time());
}
return 0;
}自定义模式(UI 集成)
cpp
#include "txnet.h"
extern char g_userInputCode[64];
void onLogin(bool success, int code, const char* msg, long long expire) {
if (success) {
showToast("登录成功");
} else if (code == -10) {
showToast("登录超时,请重试");
} else {
showToast(msg);
}
}
void doLogin() {
txnet_set_login_mode(1);
txnet_set_login_callback(onLogin);
txnet_set_login_code(g_userInputCode);
txnet_login();
}