# 免 Windows 开发

本 SDK 设计之初就希望能够在非 Windows 系统上完成整个开发、测试、部署流程。

# Dev 模式

正如 开始使用 中介绍的,在任何平台都可以构建和运行 dev 模式的可执行文件 app_dev,运行该程序将启动一个模拟的「私聊窗口」,输入内容后回车将会触发一个私聊事件,从而调用私聊事件处理函数。

这里举个例子:

#include <cqcppsdk/cqcppsdk.hpp>

using namespace cq;

CQ_INIT {
    on_enable([] { logging::debug("启用", "应用已启用!"); });

    on_private_message([](const auto &event) {
        send_message(event.target, "你的消息我收到啦!");
    });
}

构建出可执行文件后运行,测试如下:

add_log
  level: 0
  tag: 启用
  message: 应用已启用!

>>> 你好
send_private_message
  user_id: 2
  message: 你的消息我收到啦!

# 单元测试

在项目根目录的 CMakeLists.txt 中加入:

enable_testing()
add_subdirectory(tests)

即可添加 tests 子目录中的测试项目,具体请参考 cqcppsdk/tests

单元测试可以在任何平台进行,当需要使用 酷Q API 时,可以选择性地进行模拟实现,例如:

#include <cqcppsdk/cqcppsdk.hpp>

namespace cq {
    GroupMember get_group_member_info(const int64_t group_id, const int64_t user_id, const bool no_cache) {
        GroupMember mem;
        switch (user_id) {
        case MEMBER_USER_ID:
            mem.role = GroupRole::MEMBER;
            break;
        case ADMIN_USER_ID:
            mem.role = GroupRole::ADMIN;
            break;
        case OWNER_USER_ID:
            mem.role = GroupRole::OWNER;
            break;
        default:
            break;
        }
        return mem;
    }
} // namespace cq

TEST_CASE("cq::get_group_member_info", "[cq api]") {
    auto gm = cq::get_group_member_info(100100, MEMBER_USER_ID);
    REQUIRE(gm.role == cq::GroupRole::MEMBER);
}

# MinGW 交叉编译

可以使用 MinGW w64 i686 工具链在 macOS、Linux 等平台交叉编译可在 酷Q 中运行的 app.dll,注意需添加 -DCMAKE_SYSTEM_NAME=Windows CMake 选项。

# AppVeyor 持续集成

AppVeyor 免费提供了 Windows 环境的持续集成服务,可使用其中的 MSVC 工具链自动化构建 app.dll

SDK 项目模板中提供了一个 appveyor.yml 文件用于配置 AppVeyor CI,如果你是在模板基础上进行开发的,则几乎不需要修改即可直接使用。

在 AppVeyor CI 的「Projects」页面添加工程后,点击「NEW BUILD」即可触发自动化构建,此后每次 Git push 都会触发新的构建。构建成功后,app.dllapp.json 一起打包在了 <你的AppId>.zip 中,可在构建任务的「Artifacts」页下载。

# 使用 Docker 运行

在 Docker 容器内运行 酷Q 的方法请参考 酷Q on Docker。将前面的步骤构建出的 app.dllapp.json 复制到容器内的 酷Q 目录(通常通过 -v 参数挂载),即可像 Windows 上那样运行和打包应用。