Skip to content

Commit

Permalink
feat: order by last_online
Browse files Browse the repository at this point in the history
docs: update README.md
  • Loading branch information
zaigie committed Jan 26, 2024
1 parent c59b753 commit 39e7b9e
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 35 deletions.
155 changes: 121 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ password:
timeout: 10
```
## 问题
> [!WARNING]
> 如果昵称中包含中文,则最后一名玩家信息可能显示不全,不全的信息没有实际意义,将会返回为字符串 `<null/err>`

## REST 服务

REST 服务除了提供操作外,还额外增加了一个 sqlite 数据库,用来存历史玩家数据,并且每五分钟会定时查询一次在线玩家列表,更新最后在线时间。
Expand All @@ -29,59 +34,147 @@ REST 服务除了提供操作外,还额外增加了一个 sqlite 数据库,
#### 服务器信息

- **端点**: `/server/info`
- **方法**: GET
- **描述**: 检索服务器信息。
- **响应**: 包含服务器信息的 JSON 对象。
- **方法**:
```bash
curl http://127.0.0.1:8080/server/info
```
- **描述**: 返回服务器名称与版本信息
- **响应**

```json
{
"name": "YeGame Group",
"version": "v0.1.3.0"
}
```

#### 玩家列表

- **端点**: `/player`
- **方法**: GET
- **请求**:

```bash
curl http://127.0.0.1:8080/player
curl http://127.0.0.1:8080/player\?update\=true
```

- **查询参数**:
- `update`(可选): 一个布尔值(`"true"`/`"false"`)表示是否从服务器更新玩家数据。
- **描述**: 获取所有玩家的列表,可选择更新其数据。
- **响应**: 包含`name``steamid``playeruid``last_online``online`状态的玩家对象的 JSON 数组。
- `update`(可选): 一个布尔值(`"true"`/`"false"`)表示是否在请求时从服务器更新玩家数据。默认为 false。
- **描述**: 获取所有玩家的昵称、steamid、playeruid 和上次在线时间与当前在线情况(最后五分钟内在线也算作在线)。
- **响应**:

```json
[
{
"last_online": "2024-01-26 13:43:33",
"name": "全国可飞",
"online": true,
"playeruid": "357689484",
"steamid": "xxx"
},
{
"last_online": "2024-01-26 13:43:33",
"name": "梵音丶",
"online": true,
"playeruid": "2144044083",
"steamid": "xxx"
},
{
"last_online": "2024-01-26 13:43:33",
"name": "DZ",
"online": true,
"playeruid": "850234947",
"steamid": "xxx"
},
{
"last_online": "2024-01-25 21:15:44",
"name": "宅记",
"online": false,
"playeruid": "1302283639",
"steamid": "xxx"
},
{
"last_online": "2024-01-25 21:06:53",
"name": "ikun",
"online": false,
"playeruid": "00000000",
"steamid": "<null/err>"
}
]
```

#### 踢出玩家

- **端点**: `/player/:steamid/kick`
- **方法**: POST
- **请求**:
```bash
curl -X POST http://127.0.0.1:8080/player/:steamid/kick
```
- **路径参数**:
- `steamid`: 要踢出的玩家的 SteamID(其实 PlayerUID 也可以)。
- **描述**: 使用玩家的 SteamID 将玩家从服务器踢出。
- **响应**: 包含表示操作成功或失败的消息的 JSON 对象。
- `steamid`: 要踢出的玩家的 SteamID/PlayerUID。
- **描述**: 使用玩家的 SteamID/PlayerUID 将玩家从服务器踢出。
- **响应**:
```json
{ "message": "踢出成功" }
```
```json
{ "error": "Failed to Kick: {id}" }
```

#### 封禁玩家

- **端点**: `/player/:steamid/ban`
- **方法**: POST
- **请求**:
```bash
curl -X POST http://127.0.0.1:8080/player/:steamid/ban
```
- **路径参数**:
- `steamid`: 要封禁的玩家的 SteamID(其实 PlayerUID 也可以)。
- **描述**: 使用玩家的 SteamID 封禁玩家。
- **响应**: 包含表示操作成功或失败的消息的 JSON 对象。
- `steamid`: 要封禁的玩家的 SteamID/PlayerUID。
- **描述**: 使用玩家的 SteamID/PlayerUID 封禁玩家。
- **响应**:
```json
{ "message": "封禁成功" }
```
```json
{ "error": "Failed to Ban: {id}" }
```

#### 广播消息

- **端点**: `/broadcast`
- **方法**: POST
- **请求**:
```bash
curl -X POST http://127.0.0.1:8080/broadcast -d '{"message": "Hello World"}'
```
- **请求体**:
- `message`: 要广播的消息
- `message`: 要广播的消息,暂不支持中文!
- **描述**: 向服务器上的所有玩家广播消息。
- **响应**: 包含表示操作成功或失败的消息的 JSON 对象。
- **响应**:
```json
{ "message": "广播成功" }
```
```json
{ "error": "..." }
```

#### 关闭服务器

- **端点**: `/server/shutdown`
- **方法**: POST
- **请求**:
```bash
curl -X POST http://127.0.0.1:8080/shutdown -d '{"seconds": "60","message": "Shutdown in 60 sec"}'
```
- **请求体**:
- `seconds`: 服务器关闭之前的倒计时时间(默认值:"60")。
- `message`: 关闭前显示的消息。
- **描述**: 安排一个带有自定义倒计时和消息的服务器关闭。
- **响应**: 包含表示操作成功或失败的消息的 JSON 对象。

### 错误处理

在发生错误时,API 将返回一个包含错误消息的 JSON 对象,其中包含一个`error`键。
- **响应**:
```json
{ "message": "关闭服务器成功" }
```
```json
{ "error": "..." }
```

## 命令行工具

Expand All @@ -93,24 +186,18 @@ REST 服务除了提供操作外,还额外增加了一个 sqlite 数据库,
./pst-cli player list
```

> [!WARNING]
> 如果昵称中包含中文,则最后一名玩家信息可能显示不全,我就直接显示 <null/err> 了
```
+-------------------------------------------+
| Pal World 在线玩家列表 |
+----------+------------+-------------------+
| 昵称 | PLAYERUID | STEAMID |
+----------+------------+-------------------+
| 全国可飞 | 357689484 | 76561199164594721 |
| 香菇包子 | 2398722357 | 76561199401662262 |
| 梵音丶 | 2144044083 | 76561198101062108 |
| 狐狸 | 1333009711 | 76561198863159356 |
| 九龙 | 3049571152 | 76561198984756742 |
| DZ | 850234947 | 76561198260413733 |
| 香菇包子 | 2398722357 | xxxxx |
| 梵音丶 | 2144044083 | xxxxx |
| 狐狸 | 1333009711 | xxxxx |
| Baoz | <null/err> | <null/err> |
+----------+------------+-------------------+
| | 在线人数 | 7 |
| | 在线人数 | 4 |
+----------+------------+-------------------+
```
Expand Down
2 changes: 1 addition & 1 deletion cmd/pst-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ func listPlayer(c *gin.Context) {
updatePlayerData(db, getCurrentPlayers)
currentPlayers = getCurrentPlayers
}
rows, err := db.Query("SELECT name,steamid,playeruid,strftime('%Y-%m-%d %H:%M:%S', last_online, 'localtime') AS last_online FROM players")
rows, err := db.Query("SELECT name,steamid,playeruid,strftime('%Y-%m-%d %H:%M:%S', last_online, 'localtime') AS last_online FROM players ORDER BY last_online DESC")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Expand Down

0 comments on commit 39e7b9e

Please sign in to comment.