Skip to content

cpp-phira-mp ​

✨基于 phira-mp 重新开发的C++版phira-mp,新增 Web 后台管理、REST API、SSE 实时事件、封禁系统、适配观战系统和连接欢迎信息。✨

特点 ​

1. 后台 Web 管理面板(含密码保护) ​

  • 浏览器访问 http://服务器IP:12347/admin (默认情况下)
  • 登录认证:首次运行默认密码 admin,请立即修改
  • 查看所有房间列表、房间状态、玩家人数及列表
  • 实时刷新(每5秒自动更新)
  • 一键解散任意房间
  • 一键踢出房间内任意玩家
  • 封禁/解封玩家 ID(封禁后连接时显示「你已被封禁」提示)
  • 封禁列表持久化存储在 banned_users.json

2. API ​

接口说明
GET /api/rooms/info获取所有房间列表及完整数据
GET /api/rooms/info/<n>获取指定名称房间信息
GET /api/rooms/user/<user_id>获取指定用户所在房间信息
GET /api/rooms/listenSSE 实时事件流

SSE 事件类型 ​

事件说明
keepalive保持连接
create_room新房间创建
update_room房间数据更新(状态、铺面、锁定、轮换等变化)
join_room用户加入房间
leave_room用户离开房间
player_score玩家完成游戏(含完整成绩记录)
start_round房间开始新一轮游戏

SSE 连接内建 15 秒心跳保活机制,防止连接被中间件或防火墙断开。

3. 本程序可搭配 Phira观战实现进行观战。 ​

4. 连接欢迎信息 ​

  • 用户认证成功后自动发送欢迎消息
  • 展示当前可加入的房间列表(仅显示选图中且未锁定的房间)

编译前准备 ​

bash
# 更新包列表
sudo apt update

# 安装编译工具和依赖
sudo apt install -y build-essential g++ curl pkg-config uuid-dev libsqlite3-dev zlib1g-dev libssl-dev libboost-dev libspdlog-dev libargon2-dev libfmt-dev nlohmann-json3-dev libcurl4-openssl-dev make

所需依赖清单 ​

依赖Ubuntu 包名用途
G++ (>=10)build-essential / g++C++20 编译器
uuid-devuuid-devUUID 生成
curlcurlHTTP 请求(获取 Phira API 数据)
makebuild-essential构建工具
pkg-configpkg-config构建工具
Boostlibboost-dev所需依赖
spdloglibspdlog-dev日志等级实现
Argon2libargon2-dev二进制协议
Json3nlohmann-json3-devJson3
SQLite3libsqlite3-dev用户ID数据库实现
Curl-OpenSSLlibcurl4-openssl-devCurl和OpenSSL实现
OpenSSLlibssl-devSSL 支持

编译 ​

bash
cd cpp-phira-mp
make clean
make -j$(nproc)

编译成功后生成 phira-mp-server 可执行文件。


下载 ​

你可以前往本项目的 GitHub Actions,下载已编译好可直接运行的 exe 和启动脚本。(输入 ./start.sh 即可运行)。


运行 ​

bash
# 默认端口运行(默认为游戏端口 12346,Web/api 端口 12347,后台管理密码 admin)
./phira-mp-server

# 自定义端口
./phira-mp-server --port 12346 --http-port 12347 --admin-password PASSWORD

命令行参数 ​

参数说明默认值
--port游戏服务器端口12346
--http-portWeb 管理/API 端口12347
--admin-password后台管理密码admin
--db-path设置数据库.db文件路径visitors.db
-h, --help显示帮助-

文件结构 ​

cpp-phira-mp-main/
├── include/
│   ├── binary.hpp          # 二进制协议
│   ├── command.hpp         # 命令定义
│   ├── http_server.hpp     # HTTP 客户端
│   ├── l10n.hpp            # 本地化
│   ├── room.hpp            # 房间 + 轮次历史
│   ├── server.hpp          # 服务器 + get_state()
│   ├── session.hpp         # 会话
│   ├── stream.hpp          # 触摸信息流
│   ├── visitor_db.hpp      # 访客数量记录
├── src/
│   ├── binary.cpp          # 二进制协议实现
│   ├── command.cpp         # 命令实现
│   ├── http_server.cpp     # Web网页/API实现
│   ├── l10n.cpp            # 本地化实现
│   ├── main.cpp            # 主入口
│   ├── room.cpp            # 主逻辑实现
│   ├── server.cpp          # 服务器
│   ├── session.cpp         # 主逻辑实现
    ├── visitor_db.cpp      # 访客数量记录
│   └── stream.cpp          # 观战协议
│   
├── locales/
│   ├── en-US.ftl
│   ├── zh-CN.ftl
│   └── zh-TW.ftl
├── Makefile
├── CMakeLists.txt
└── README.md

运行时文件 ​

  • banned_user.json — 封禁玩家 ID 列表(自动创建/管理)

API 使用示例 ​

bash
# 获取所有房间
curl http://localhost:12345/api/rooms/info

# 获取指定房间
curl http://localhost:12345/api/rooms/info/my-room

# 获取用户所在房间
curl http://localhost:12345/api/rooms/user/12345

# 监听实时事件(SSE)
curl http://localhost:12345/api/rooms/listen

QQ 群 ​

1049578201

协议 ​

使用 MIT 协议。


Last modified byFireflyon2026-06-26 14:03

Built with VitePress