# qqgame-cpp
**Repository Path**: zyf/qqgame-cpp
## Basic Information
- **Project Name**: qqgame-cpp
- **Description**: QQ游戏大厅,websocket 通信协议的 C++ 实现。
- **Primary Language**: C++
- **License**: MulanPSL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-09
- **Last Updated**: 2022-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# qqgame-cpp
QQ 游戏大厅,websocket 通信协议的 C++ 实现
## 相关文档
本项目的是方便 QQGame 游戏大厅接入。关于接入细节和设计思路都来自于
QQ游戏的官方接入文档:
* [QQGame开放平台架构](https://open.qqgame.qq.com/wiki/24/35/86/86.html)
* [游戏和大厅通信协议细节](https://open.qqgame.qq.com/wiki/24/35/46/52/52.html)
## 构建库文件
1. 请在机器上安装 **Visual Studio 2019/2022** 或者更新的版本。并且安装 [vcpkg](https://github.com/microsoft/vcpkg)
2. 配置 **VCPKG_ROOT** 环境变量指向 vcpkg 项目的目录
3. 使用 **Visual Studio Code** 打开本项目,并调用 cmake 配置本项目
直接执行 **CMake: configure** 即可安装好依赖,然后根据自己的需求编译即可。
4. 如果不想使用code,使用命令行,则用如下指令构建:
```powershell
cmake --no-warn-unused-cli -DVCPKG_TARGET_TRIPLET:STRING=x64-windows-static -DCMAKE_TOOLCHAIN_FILE:STRING=${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE:STRING=Debug -Bbuild # 生成项目
cmake --build build # 构建目标
```
这是使用 vs 构建的 debug 版本,可以自行根据需要调整 CMAKE_BUILD_TYPE 宏来切换需要的构建类型。
## 构建测试程序
### 构建
```powershell
cmake --no-warn-unused-cli -DVCPKG_TARGET_TRIPLET:STRING=x64-windows-static -DCMAKE_TOOLCHAIN_FILE:STRING=${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE:STRING=Debug -Dqqgame-cpp_BUILD_TEST=1 -Bbuild
cmake --build build --config Debug --target test_qqgame-cpp
```
### 使用内置测试服务端模拟测试
test 目录放置了一个 node 实现的模拟大厅协议的服务端
```powershell
cd test
npm install # 安装测试服务器依赖
npm test # 启动测试服务器
```
然后通过 vscode 启动调试目标 test_qqgame-cpp 即可进行交互式协议模拟调试
### 使用服务端指令
通过其它进程连接测试服务,可以使用一些特殊指令来模拟大厅返回给客户端的消息。
例如可以安装 node 的 webscocket 工具 wscat: `npm install -g wscat`
1. 连接服务端:`wscat -c ws://127.0.0.1:10888/websocket/township`
2. 下面的指令会广播给所有连接到服务端的客户端:
* hide -> `{cmd: boss_key, show: 0}` 使用老板键隐藏窗口
* show -> `{cmd: boss_key, show: 1}` 使用老板键显示窗口
* top -> `{cmd: bring_to_top}` 前置窗口
* closevip -> `{cmd: buy_vip_close}` 购买 vip 结束
* closepay -> `{cmd: pay_close}` 购买商品结束
* closeweb -> `{cmd: web_close}` 关闭web窗口
## 接入方法
可以根据项目形式选择
1. 使用 vcpkg 接入(推荐)待完善
2. 使用 cmake 子文件夹的形式接入 add_subdirectory(qqgame-cpp)
3. 使用动静态库的形式接入。先编译好本项目,然后将库按照你自己的需求添加链接参数(待完善动态库)
## 感谢
* websocket 功能来自于: [easywsclient](https://github.com/dhbaird/easywsclient)
* json 序列化功能来自于: [jsoncpp](https://github.com/open-source-parsers/jsoncpp)