You've already forked CC-Framework.BriskGameServer
Compare commits
1 Commits
v0.3.0
...
a257a8a912
| Author | SHA1 | Date | |
|---|---|---|---|
| a257a8a912 |
@@ -259,7 +259,7 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
BaseUrl: https://brisk.lightyears.ltd
|
BaseUrl: https://brisk.lightyears.ltd
|
||||||
GameKey: briskh5verify
|
GameKey: game_a1faf5ee93d0
|
||||||
ClientVersion: 1.0.0
|
ClientVersion: 1.0.0
|
||||||
DeviceId: editor-device
|
DeviceId: editor-device
|
||||||
ValidateSessionOnInitialize: 1
|
ValidateSessionOnInitialize: 1
|
||||||
@@ -268,7 +268,7 @@ MonoBehaviour:
|
|||||||
LoginCode:
|
LoginCode:
|
||||||
Nickname: "Unity\u793A\u4F8B\u73A9\u5BB6"
|
Nickname: "Unity\u793A\u4F8B\u73A9\u5BB6"
|
||||||
AvatarUrl:
|
AvatarUrl:
|
||||||
RankKey: h5-verify-rank-20260410034312-5cdd
|
RankKey: rank-20260411062004-2bce
|
||||||
SubmitScoreValue: 128
|
SubmitScoreValue: 128
|
||||||
LeaderboardLimit: 10
|
LeaderboardLimit: 10
|
||||||
AroundMeRange: 5
|
AroundMeRange: 5
|
||||||
|
|||||||
@@ -19,17 +19,41 @@
|
|||||||
|
|
||||||
## 2. 客户端主流程
|
## 2. 客户端主流程
|
||||||
|
|
||||||
1. `GET /api/client/bootstrap`
|
1. 可选:`GET /api/client/time`
|
||||||
2. `POST /api/auth/login/exchange`
|
2. `GET /api/client/bootstrap`
|
||||||
3. 带 `Bearer access_token` 调用:
|
3. `POST /api/auth/login/exchange`
|
||||||
|
4. 带 `Bearer access_token` 调用:
|
||||||
- `GET /api/player/me`
|
- `GET /api/player/me`
|
||||||
- `GET /api/announcements`
|
- `GET /api/announcements`
|
||||||
- 排行榜、存档、空间等业务接口
|
- 排行榜、存档、空间等业务接口
|
||||||
4. `GET /api/config/current` 为公开接口,登录前后都可调用
|
5. `GET /api/config/current` 为公开接口,登录前后都可调用
|
||||||
|
|
||||||
## 3. 初始化
|
## 3. 初始化
|
||||||
|
|
||||||
### 3.1 获取初始化信息
|
### 3.1 获取平台时间
|
||||||
|
|
||||||
|
`GET /api/client/time`
|
||||||
|
|
||||||
|
说明:
|
||||||
|
|
||||||
|
- 平台级匿名授时接口
|
||||||
|
- 不需要 `game_key`
|
||||||
|
- 不依赖任何项目配置
|
||||||
|
- 返回 UTC 时间,适合客户端启动时做统一对时
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl "https://brisk.lightyears.ltd/api/client/time"
|
||||||
|
```
|
||||||
|
|
||||||
|
返回重点:
|
||||||
|
|
||||||
|
- `server_time`
|
||||||
|
- `server_unix`
|
||||||
|
- `server_unix_ms`
|
||||||
|
|
||||||
|
### 3.2 获取初始化信息
|
||||||
|
|
||||||
`GET /api/client/bootstrap`
|
`GET /api/client/bootstrap`
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
## 1. 这份文档适合做什么
|
## 1. 这份文档适合做什么
|
||||||
|
|
||||||
这份文档用于说明当前 Brisk Unity SDK 的接入结构与推荐调用方式。
|
这份文档用于在 Unity 侧封装 Brisk SDK。
|
||||||
|
|
||||||
当前 SDK 已采用静态总入口:
|
建议把 SDK 拆成以下层次:
|
||||||
|
|
||||||
- `Brisk.InitializeAsync(...)`
|
- `BriskTime`
|
||||||
- `Brisk.Auth.xxx`
|
- `BriskClient`
|
||||||
- `Brisk.Player.xxx`
|
- `BriskAuth`
|
||||||
- `Brisk.Config.xxx`
|
- `BriskConfig`
|
||||||
- `Brisk.Announcements.xxx`
|
- `BriskAnnouncements`
|
||||||
- `Brisk.Leaderboard.xxx`
|
- `BriskRanks`
|
||||||
- `Brisk.Archive.xxx`
|
- `BriskArchives`
|
||||||
- `Brisk.Space.xxx`
|
- `BriskSpaces`
|
||||||
|
|
||||||
## 2. 初始化模型
|
## 2. 初始化模型
|
||||||
|
|
||||||
@@ -26,6 +26,8 @@ Unity 客户端初始化建议持有:
|
|||||||
|
|
||||||
不再需要项目级 `channel / platform`。
|
不再需要项目级 `channel / platform`。
|
||||||
|
|
||||||
|
如果只是做平台授时,不需要传 `gameKey`,可以单独调用时间接口。
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
@@ -64,18 +66,31 @@ Task<LoginResult> LoginAsync(
|
|||||||
|
|
||||||
## 4. 推荐接入顺序
|
## 4. 推荐接入顺序
|
||||||
|
|
||||||
1. `BootstrapAsync()`
|
1. 可选:`SyncServerTimeAsync()`
|
||||||
2. 从第三方 SDK 获取:
|
2. `BootstrapAsync()`
|
||||||
|
3. 从第三方 SDK 获取:
|
||||||
- `loginProvider`
|
- `loginProvider`
|
||||||
- `loginUserId` 或 `code`
|
- `loginUserId` 或 `code`
|
||||||
- 可选昵称、头像、扩展资料
|
- 可选昵称、头像、扩展资料
|
||||||
3. `LoginAsync(...)`
|
4. `LoginAsync(...)`
|
||||||
4. 保存 `accessToken`
|
5. 保存 `accessToken`
|
||||||
5. 拉取:
|
6. 拉取:
|
||||||
- `GetMeAsync()`
|
- `GetMeAsync()`
|
||||||
- `GetCurrentConfigAsync()`
|
- `GetCurrentConfigAsync()`
|
||||||
- `ListAnnouncementsAsync()`
|
- `ListAnnouncementsAsync()`
|
||||||
6. 进入业务模块
|
7. 进入业务模块
|
||||||
|
|
||||||
|
平台授时接口建议封装:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
Task<ServerTimeResult> SyncServerTimeAsync()
|
||||||
|
```
|
||||||
|
|
||||||
|
建议返回:
|
||||||
|
|
||||||
|
- `ServerTime`
|
||||||
|
- `ServerUnix`
|
||||||
|
- `ServerUnixMs`
|
||||||
|
|
||||||
## 5. 身份模型建议
|
## 5. 身份模型建议
|
||||||
|
|
||||||
@@ -142,27 +157,12 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
|
|||||||
- msgpack bytes
|
- msgpack bytes
|
||||||
- 压缩后的存档二进制
|
- 压缩后的存档二进制
|
||||||
|
|
||||||
当前 SDK 已提供:
|
Unity SDK 建议提供:
|
||||||
|
|
||||||
- `GetArchiveSlotsAsync()`
|
- `GetArchiveSlotsAsync()`
|
||||||
- `GetArchiveMetaAsync(slotNo)`
|
- `GetArchiveMetaAsync(slotNo)`
|
||||||
- `UploadAsync(slotNo, byte[], baseVersion, checksum)`
|
- `UploadArchiveAsync(slotNo, baseVersion, checksum, byte[])`
|
||||||
- `UploadTextAsync(slotNo, text, baseVersion, checksum)`
|
|
||||||
- `UploadJsonAsync(slotNo, payload, baseVersion, checksum)`
|
|
||||||
- `DownloadArchiveAsync(slotNo)`
|
- `DownloadArchiveAsync(slotNo)`
|
||||||
- `DownloadTextAsync(slotNo)`
|
|
||||||
- `DownloadJsonAsync(slotNo)`
|
|
||||||
|
|
||||||
推荐上层使用策略:
|
|
||||||
|
|
||||||
- 文本存档:优先直接用 `UploadTextAsync / DownloadTextAsync`
|
|
||||||
- JSON 存档:优先直接用 `UploadJsonAsync / DownloadJsonAsync`
|
|
||||||
- 二进制存档:继续用 `UploadAsync / DownloadAsync`
|
|
||||||
|
|
||||||
其中:
|
|
||||||
|
|
||||||
- SDK 会自动计算上传用 `checksum`
|
|
||||||
- 手动传 `checksum` 时也可以带 `sha256:` 前缀,SDK 会自动归一化
|
|
||||||
|
|
||||||
## 9. 玩家空间模块建议
|
## 9. 玩家空间模块建议
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
|
|||||||
- 小型二进制空间内容
|
- 小型二进制空间内容
|
||||||
- 文本、JSON、protobuf、msgpack 等自定义格式
|
- 文本、JSON、protobuf、msgpack 等自定义格式
|
||||||
|
|
||||||
当前 SDK / 接口核心是:
|
当前接口核心是:
|
||||||
|
|
||||||
- `UploadMySpaceContentAsync(baseVersion, contentType, checksum, byte[])`
|
- `UploadMySpaceContentAsync(baseVersion, contentType, checksum, byte[])`
|
||||||
- `DownloadSpaceContentByPlayerIdAsync(playerId)`
|
- `DownloadSpaceContentByPlayerIdAsync(playerId)`
|
||||||
@@ -188,16 +188,6 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
|
|||||||
- `LikeSpaceByLoginIdentityAsync(loginProvider, loginUserId)`
|
- `LikeSpaceByLoginIdentityAsync(loginProvider, loginUserId)`
|
||||||
- `GetMyVisitsAsync(limit)`
|
- `GetMyVisitsAsync(limit)`
|
||||||
|
|
||||||
当前 SDK 额外提供了一个极简便捷入口:
|
|
||||||
|
|
||||||
- `Brisk.Space.UpdateMyAsync(payload, baseVersion, contentType, checksum)`
|
|
||||||
|
|
||||||
它的行为是:
|
|
||||||
|
|
||||||
- `payload` 为 `string` 时,自动按 `text/plain` 上传
|
|
||||||
- `payload` 为 `byte[]` 时,自动按 `application/octet-stream` 上传
|
|
||||||
- `payload` 为其他对象时,自动序列化为 JSON 并按 `application/json` 上传
|
|
||||||
|
|
||||||
建议 SDK 暴露两层模型:
|
建议 SDK 暴露两层模型:
|
||||||
|
|
||||||
- 空间主信息:
|
- 空间主信息:
|
||||||
@@ -213,8 +203,7 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
|
|||||||
- 下载响应头中的 `X-Space-Version`
|
- 下载响应头中的 `X-Space-Version`
|
||||||
- 下载响应头中的 `X-Space-Checksum`
|
- 下载响应头中的 `X-Space-Checksum`
|
||||||
|
|
||||||
如果上层业务追求最省事,可以直接用 `UpdateMyAsync(string)` 或 `UpdateMyAsync(object)`;
|
如果上层业务实际保存的是文本或 JSON,建议仍按 `byte[]` 统一收发,再由业务层自己决定如何编码和反序列化。
|
||||||
如果业务自己管理编码、压缩、protobuf、msgpack 等格式,则继续走 `byte[]` 上传下载接口。
|
|
||||||
|
|
||||||
## 10. 动态配置建议
|
## 10. 动态配置建议
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Brisk 错误码文档(内部实施版)
|
# Brisk 错误码文档(内部实施版)
|
||||||
|
|
||||||
**版本**:v0.1
|
**版本**:v0.2
|
||||||
**日期**:2026-04-08
|
**日期**:2026-04-11
|
||||||
**说明**:当前工程内已使用的错误码分组与含义。
|
**说明**:当前工程内已使用的错误码分组与含义。
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -45,6 +45,13 @@
|
|||||||
|
|
||||||
## 3. 当前已使用错误码
|
## 3. 当前已使用错误码
|
||||||
|
|
||||||
|
补充说明:
|
||||||
|
|
||||||
|
- `GET /api/client/time` 为平台匿名授时接口
|
||||||
|
- 该接口当前没有新增专属业务错误码
|
||||||
|
- 触发限流时仍使用通用限流错误码 `80001`
|
||||||
|
- 限流组件不可用时仍使用通用错误码 `80002`
|
||||||
|
|
||||||
| 错误码 | 接口/模块 | 含义 |
|
| 错误码 | 接口/模块 | 含义 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `10001` | 客户端鉴权 | 缺少 token |
|
| `10001` | 客户端鉴权 | 缺少 token |
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ Brisk 游戏服务端工程。
|
|||||||
|
|
||||||
当前已实现模块:
|
当前已实现模块:
|
||||||
|
|
||||||
|
- 平台授时 `time`
|
||||||
- 客户端初始化 `bootstrap`
|
- 客户端初始化 `bootstrap`
|
||||||
- 登录换票 `auth`
|
- 登录换票 `auth`
|
||||||
- 玩家信息 `player`
|
- 玩家信息 `player`
|
||||||
@@ -20,6 +21,7 @@ Brisk 游戏服务端工程。
|
|||||||
- 项目唯一标识只有 `game_key`
|
- 项目唯一标识只有 `game_key`
|
||||||
- 项目级 `channel / platform` 已移除
|
- 项目级 `channel / platform` 已移除
|
||||||
- 初始化和动态配置只依赖 `game_key`,配置筛选只看 `client_version`
|
- 初始化和动态配置只依赖 `game_key`,配置筛选只看 `client_version`
|
||||||
|
- 平台授时接口不依赖 `game_key`,可直接匿名获取 UTC 服务器时间
|
||||||
- 登录模块单独处理第三方身份:
|
- 登录模块单独处理第三方身份:
|
||||||
- `login_provider`:如 `tap`
|
- `login_provider`:如 `tap`
|
||||||
- `login_user_id`:该登录平台返回的稳定唯一用户 ID
|
- `login_user_id`:该登录平台返回的稳定唯一用户 ID
|
||||||
@@ -43,6 +45,7 @@ docker compose up --build
|
|||||||
|
|
||||||
- `GET /health`
|
- `GET /health`
|
||||||
- `GET /api/ping`
|
- `GET /api/ping`
|
||||||
|
- `GET /api/client/time`
|
||||||
- `GET /openapi.yaml`
|
- `GET /openapi.yaml`
|
||||||
|
|
||||||
开发环境默认账号:
|
开发环境默认账号:
|
||||||
@@ -54,6 +57,10 @@ docker compose up --build
|
|||||||
|
|
||||||
## 接入说明
|
## 接入说明
|
||||||
|
|
||||||
|
- 平台授时:
|
||||||
|
- 匿名接口 `GET /api/client/time`
|
||||||
|
- 无需传 `game_key`
|
||||||
|
- 返回 `server_time`、`server_unix`、`server_unix_ms`
|
||||||
- 客户端初始化:
|
- 客户端初始化:
|
||||||
- 必填 `game_key`
|
- 必填 `game_key`
|
||||||
- 可选 `client_version`
|
- 可选 `client_version`
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
openapi: 3.0.3
|
openapi: 3.0.3
|
||||||
info:
|
info:
|
||||||
title: Brisk Game Service API
|
title: Brisk Game Service API
|
||||||
version: 0.1.0
|
version: 0.2.0
|
||||||
description: Current implemented Brisk server API for internal integration.
|
description: Current implemented Brisk server API for internal integration.
|
||||||
servers:
|
servers:
|
||||||
- url: /api
|
- url: /api
|
||||||
tags:
|
tags:
|
||||||
|
- name: time
|
||||||
- name: bootstrap
|
- name: bootstrap
|
||||||
- name: auth
|
- name: auth
|
||||||
- name: player
|
- name: player
|
||||||
@@ -51,6 +52,21 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
data:
|
data:
|
||||||
nullable: true
|
nullable: true
|
||||||
|
ClientTimePayload:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
server_time:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
example: 2026-04-11T08:12:30Z
|
||||||
|
server_unix:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
example: 1775895150
|
||||||
|
server_unix_ms:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
example: 1775895150123
|
||||||
ExchangeRequest:
|
ExchangeRequest:
|
||||||
type: object
|
type: object
|
||||||
required: [game_key, login_provider]
|
required: [game_key, login_provider]
|
||||||
@@ -494,6 +510,28 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
format: date-time
|
format: date-time
|
||||||
paths:
|
paths:
|
||||||
|
/client/time:
|
||||||
|
get:
|
||||||
|
tags: [time]
|
||||||
|
summary: Get platform server time
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: Current platform UTC time
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
code:
|
||||||
|
type: integer
|
||||||
|
example: 0
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
example: ok
|
||||||
|
data:
|
||||||
|
$ref: '#/components/schemas/ClientTimePayload'
|
||||||
|
'429': { description: Rate limited }
|
||||||
|
'500': { description: Rate limit unavailable }
|
||||||
/client/bootstrap:
|
/client/bootstrap:
|
||||||
get:
|
get:
|
||||||
tags: [bootstrap]
|
tags: [bootstrap]
|
||||||
|
|||||||
Reference in New Issue
Block a user