Skip to content

快速集成

添加依赖

Android.mk

makefile
# 引入预编译静态库
include $(CLEAR_VARS)
LOCAL_MODULE := libtxnet
LOCAL_SRC_FILES := $(LOCAL_PATH)/prebuilt/arm64-v8a/libtxnet.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/prebuilt/include
include $(PREBUILT_STATIC_LIBRARY)

# 你的模块
include $(CLEAR_VARS)
LOCAL_MODULE := your_module
LOCAL_SRC_FILES := main.cpp
LOCAL_STATIC_LIBRARIES := libtxnet
LOCAL_LDLIBS := -llog -lz
include $(BUILD_EXECUTABLE)

头文件

cpp
#include "txnet.h"

基础流程

cpp
#include "txnet.h"

int main() {
    // ========== 1. 初始化 ==========
    txnet_config config = {
        .app_id = "your_app_id",
        .server_public_key = "-----BEGIN PUBLIC KEY-----\n...",
        .client_private_key = "-----BEGIN PRIVATE KEY-----\n...",
        .version_code = 1,
        .version_name = "1.0.0",
        .login_save_path = "/data/local/tmp/login.dat"
    };
    txnet_init(&config);
    
    // ========== 2. 连接服务器 ==========
    if (!txnet_connect()) {
        return 1;
    }
    
    // ========== 3. 登录 ==========
    txnet_login();
    
    if (!txnet_is_logged_in()) {
        return 1;
    }
    
    // ========== 4. 检查更新 ==========
    txnet_check_update();
    
    // ========== 5. 获取远程配置 ==========
    static bool g_enabled = false;
    static float g_value = 1.0f;
    
    txnet_bind_config_bool("enabled", &g_enabled, false);
    txnet_bind_config_float("value", &g_value, 1.0f);
    txnet_get_config();
    
    // ========== 6. 业务逻辑 ==========
    while (txnet_is_logged_in()) {
        // 你的代码...
    }
    
    // ========== 7. 断开连接 ==========
    txnet_disconnect();
    return 0;
}

回调设置(可选)

cpp
// 连接状态回调
void onConnection(int status, const char* msg) {
    printf("[连接] %s\n", msg);
}

// 登录结果回调
void onLogin(bool ok, int code, const char* msg, long long expire) {
    if (ok) {
        printf("[登录] 成功,到期: %lld\n", expire);
    } else {
        printf("[登录] 失败: %s\n", msg);
    }
}

// 更新检查回调
void onUpdate(bool need, bool force, int ver, const char* name,
              const char* content, const char* url, const char* disk) {
    if (need) {
        printf("[更新] 发现新版本: %s\n", name);
    }
}

int main() {
    txnet_init(&config);
    
    txnet_set_connection_callback(onConnection);
    txnet_set_login_callback(onLogin);
    txnet_set_update_callback(onUpdate);
    
    // ...
}

共享雷达集成

cpp
static bool g_radarEnabled = true;
static float g_radarFps = 10.0f;

// 初始化(程序启动时调用一次)
txnet_radar_init(&g_radarEnabled, &g_radarFps, TXNET_RADAR_GAME_PUBGMHD);

// 游戏循环中
void gameLoop() {
    // 设置对局信息
    txnet_radar_set_game(world_address, game_state, map_id);
    
    // 设置自身信息
    txnet_radar_set_self(self_address, self_name, self_team);
    
    // 添加物品
    for (auto& player : players) {
        txnet_radar_item_pubgmhd item = {};
        item.type = "player";
        item.address = player.address;
        item.uid = player.uid;
        item.name = player.name;
        item.team = player.team;
        item.pos_x = player.x;
        item.pos_y = player.y;
        item.pos_z = player.z;
        item.health = player.health;
        item.distance = player.distance;
        txnet_radar_add_item(&item);
    }
}

同行检测集成

cpp
// 初始化
txnet_peer_init([](const char* uid, bool same, const char** progs, int cnt) {
    if (same) {
        printf("发现同行: %s\n", uid);
    }
});

// 游戏循环中
void gameLoop() {
    txnet_peer_submit_self(self_uid, self_name, world_address);
    
    for (auto& player : players) {
        txnet_peer_add_player(player.uid, player.name);
        
        if (txnet_peer_is_same_server(player.uid)) {
            player.is_peer = true;
        }
    }
}

运行模式

库提供两种运行模式,通过 txnet_set_xxx_mode(mode) 设置:

模式行为
默认模式0自动处理错误(重试/退出),适合简单场景
自定义模式1仅回调通知,由主程序处理,适合复杂场景

各模块默认模式行为

模块失败行为
连接自动重连,超过5次后 exit(1)
登录提示输入登录码重试;超时3分钟后 exit(1)
更新强制更新时打开浏览器并 exit(0)
退出收到踢出/退出指令后 exit(0)

注意事项

  1. 调用顺序: 必须先 txnet_init,再调用其他函数
  2. 阻塞函数: connectlogincheck_updateget_config 都是阻塞的
  3. 登录超时: 连接成功后 3 分钟内未登录将触发超时
  4. 配置绑定: 在 get_config 之前完成所有 bind_config_xxx 调用
  5. 线程安全: 回调在接收线程执行,注意数据同步

TxNet 网络通信库文档