## 说明
> 本仓库用于定义`客户端<->服务端`间的通信协议。
> SDK业务使用`http(s)`进行连接。
> 游戏业务使用`tcp/udp`进行连接。`protobuf3`作为流序列化工具,`pomelo`协议作为数据包的格式(详见[pomelo.md](pomelo.md))。
## 适用范围
- 客户端工程师
- 服务端工程师
- 压力测试工程师
## SDK协议业务
> SDK为玩家提供帐号身份服务。产品上线后,根据发行情况会进行多种SDK的接入。
> 根据情况,每个SDK会输出多个安装包。我们定义`pid`参数做为安装包的唯一标识。
> 在开发阶段,本游戏提供了一个`开发模式sdk`用于当前开发阶段使用。
### SDK处理流程
- 1.启动客户端安装包,并加载当前SDK库。
- 2.用户通过SDK的`帐号注册`功能进行帐号注册。
- 3.用户输入`帐号信息`进行SDK帐号登录,并返回`SDK的用户标识(sdk user token)`等参数。
- 4.客户端请求`帐号验证接口`,验证`SDK的用户标识(sdk user token)`参数,成功后并返回`游戏token(game token)`。
- 5.用户点击区服列表,连接对应的`网关地址`,进行游戏登录、玩家创建、玩家登录等操作。
### 通用响应格式
| 参数名 | 类型 | 必填 | 描述 |
|:--------|:-------|:----|:------------------|
| code | int | 是 | 状态码 0.正常码,其他值为错误码 |
| message | string | 是 | 消息文本 |
| data | string | 否 | 业务响应数据 |
- 响应格式:`JSON`
- 正常的响应: `{"code":0,"message":"成功","data":[]}`
- 错误的响应: `{"code":100007,"message":"平台帐号验证失败","data":[]}`
### 接口地址
- dev环境地址:http://127.0.0.1/
- prod境地址:~~http://xxx.com/~~
### 什么是`pid`?
- `pid`可以理解为 `package unique id`,给每个对外发布的安装包配置唯一的编号。
- `pid`统一由`运营人员`进行分配。
- `SDK`与`pid`的关系是一对多的关系。每个分配出去的`pid`必然归属于一个`SDK`。例如:pid=2122150归属于xx游戏的Q1SDK。
### API-01 开发模式SDK帐号注册
本sdk用于开发阶段使用,需首先接入。客户端可以做一个临时的界面用于帐号注册、帐号登录。正式上线后通过打包系统输出其他sdk的安装包。
- 接口地址: http://127.0.0.1/dev/register
- 请求方式:GET
- 请求参数:
| 参数名 | 类型 | 必填 | 描述 |
|:---------|:-------|:----|:----|
| account | string | 是 | 帐号名 |
| password | string | 是 | 密码 |
- 响应结果: 通用格式
### API-02 帐号验证接口
该接口为通用帐号验证接口,适用于所有SDK。 每个SDK的请求参数都会稍有不一样,但`响应结果`为统一的`json`结构。
- 接口地址: http://127.0.0.1/login
- 请求方式:GET
#### API-02-01 开发模式SDK请求参数
请求示例:http://127.0.0.1/login?pid=2188001&account=aaaa&password=bbbb
| 参数名 | 类型 | 必填 | 描述 |
|:---------|:-------|:----|:----|
| pid | string | 是 | 包id |
| account | string | 是 | 帐号名 |
| password | string | 是 | 密码 |
#### API-02-02 xxSDK请求参数
- TODO
## 游戏协议业务
游戏协议业务的定义描述在本仓库的`*.json`和`*.proto`中。
`json`文件用于描述每条协议的详情,客户端可根据该文件生成客户端协议代码。
`proto`文件用于定义每条消息的结构。
- `Request/Response` 两者为配对的消息,有Request必有Response
- `Notify` 指客户端推送消息给服务器,服务器不用回复
- `Push` 指服务器推送消息给客户端,客户端不用回复
### 示例介绍
以下示例介绍了游戏业务的首条通信协议:`登录游戏服`。
```json
[
{
"enable": true,
"name": "[请求]登录游戏服(首条)",
"route": "gate.user.login",
"request": "LoginRequest",
"response": "LoginResponse",
"notify": "",
"push": "",
"desc": "游戏服登录,连接游戏服的第一条协议"
}
]
```
- `enable` 是否启用该条协议
- `name` 协议名称
- `route` 路由名称
- `request` request类型请求, `LoginRequest`为pb结构
- `response` response类型请求,`LoginResponse`为pb结构
- `notify` 客户端请求`notify`类型的消息,不用等待返回的消息
- `push` 服务端推送`push`类型的消息
- `desc` 协议描述