feat.Maa-HTTP 0.0.1版本完成

This commit is contained in:
guigui
2022-05-31 23:57:19 +08:00
parent 303d52bed7
commit 2f4b60f849
2 changed files with 551 additions and 3 deletions

View File

@@ -2,16 +2,561 @@
本项目为通过JNA(Java-Native-Access)调用Maa核心实现的HTTP+WebSocket接口实现.
## 接口实现情况
| 功能名称 | 接口路径(命令) | HTTP实现 | WebSocket实现 |
|:-------|:--------------|:-------|:------------|
| 获取版本号 | getVersion | Yes | Yes |
| 创建连接 | connect | Yes | Yes |
| 添加任务 | appendTask | Yes | Yes |
| 设定任务参数 | setTaskParams | Yes | Yes |
| 开始执行 | start | Yes | Yes |
| 停止执行 | stop | Yes | Yes |
| 销毁实例 | destroy | Yes | Yes |
| 列出实例连接 | listInstance | Yes | Yes |
| 消息回调通知 | callBack | No | Yes |
## 环境依赖
1. JDK1.8 +
2. Maa v3.9.0-alpha +
## 如何编译
.\gradlew.bat jar
.\gradlew.bat jar
## 使用方法
1. 把他丢进
1. 把他丢进Maa文件夹下,形成如下文件结构.
```
MeoAssistantArknights_v3.9.0-beta.8
│ MeoAsstGui.exe
│ MeoAssistant.dll
│ ...
└───Java-HTTP
│ Maa-HTTP-0.0.1.jar
│ Maa-HTTP-Server-startup.bat
```
2. 双击Maa-HTTP-Server-startup.bat启动.
3. 默认端口号8848钛金端口.
4.
4. 当你看到如下内容则启动成功.
```
2022-05-31 22:20:03.000 [main] INFO Application - Autoreload is disabled because the development mode is off.
2022-05-31 22:20:03.407 [main] INFO Application - Application started in 0.458 seconds.
2022-05-31 22:20:03.407 [main] INFO Application - Application started: io.ktor.server.application.Application@fac80
2022-05-31 22:20:03.717 [DefaultDispatcher-worker-1] INFO Application - Responding at http://0.0.0.0:8848
```
## 接口文档
### HTTP部分
提供了如下功能
| 功能名称 | 接口路径 |
|:-------|:--------------|
| 获取版本号 | getVersion |
| 创建连接 | connect |
| 添加任务 | appendTask |
| 设定任务参数 | setTaskParams |
| 开始执行 | start |
| 停止执行 | stop |
| 销毁实例 | destroy |
| 列出连接 | listInstance |
---
#### 接口名称 获取版本号
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/getVersion
###### 2) 调用方式HTTP get
###### 3) 请求参数: 无
###### 4) 返回结果示例:
```json
{
"data": {
"version": "v3.9.0-beta"
},
"code": 0,
"message": "success"
}
```
---
##### 接口名称 创建连接
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/connect
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"adbPath": "C:\\MeoAssistantArknights3\\platform-tools\\adb.exe",
"host": "127.0.0.1:62001",
"detailJson": ""
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |-----------------|--------|-----|-----|
| adbPath | ADB地址 | String | Y | - |
| host | 实例地址 | String | Y | - |
| detailJson | 有什么用我也不知道,反正就是有 | String | N | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|---------|---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
---
##### 接口名称 c
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/appendTask
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"type": "Fight",
"params": {
"stage": "LastBattle"
}
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |-------------------------------------------------------------------------------------------------------------------------------|--------|---- |-----|
| id | 创建连接返回的实例ID | String | Y | - |
| type | 任务类型,此次示例为刷理智战斗,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | String | Y | - |
| params | 任务参数 | Json | Y | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"taskId": 0
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|------------|--------|---- |
| id | 实例ID | String | - |
| taskId | 任务ID,为0则失败 | Int | - |
---
##### 接口名称 设定任务参数
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/setTaskParams
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"type": "Fight",
"taskId": 0,
"params": {
"stage": "LastBattle"
}
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |-------------------------------------------------------------------------------------------------------------------------------|--------|---- |-----|
| id | 创建连接返回的实例ID | String | Y | - |
| taskId | 任务ID | Int | Y | - |
| type | 任务类型,此次示例为刷理智战斗,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | String | Y | - |
| params | 任务参数 | Json | Y | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": false
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|---------|---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 开始执行
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/start
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |--------|--------|---- |-----|
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|---------|---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 停止执行,清空任务链
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/stop
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |--------|--------|---- |-----|
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|---------|---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 销毁实例
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/destroy
###### 2) 调用方式HTTP post
###### 3) 请求参数:
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post参数:
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |--------|--------|---- |-----|
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果:
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|---------|---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 列出实例连接
###### 1) 请求地址
> http://127.0.0.1:8848/API/V1/listInstance
###### 2) 调用方式HTTP get
###### 3) 请求参数: 无
###### 4) 请求返回结果:
```json
{
"data": {
"list": [
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"host": "127.0.0.1:62026",
"adbPath": "C:\\Users\\atmzx\\Desktop\\MeoAssistantArknights3\\platform-tools\\adb.exe",
"uuid": "",
"status": 0
}
]
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明:
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-------------|--------|---- |
| id | 实例ID | String | - |
| host | 连接的Host | String | - |
| adbPath | 使用的Adb地址 | String | - |
| uuid | 设备备ID保留 | String | - |
| status | 0待机中,1任务执行中 | Int | - |
### WebSocket部分
请求地址
> ws://127.0.0.1:8848/API/V1
提供了如下功能
| 功能名称 | 命令 |
|:-------|:--------------|
| 获取版本号 | getVersion |
| 创建连接 | connect |
| 添加任务 | appendTask |
| 设定任务参数 | setTaskParams |
| 开始执行 | start |
| 停止执行 | stop |
| 销毁实例 | destroy |
| 列出实例连接 | listInstance |
| 消息回调通知 | callBack |
所有的的WebSocket接口跟HTTP接口请求响应参数均完全一致
---
##### 接口名称 获取版本号
```json
{
"command": "getVersion",
"msgId": 114514,
"data": {}
}
```
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |-----------------------------------|--------|---- |-----|
| command | 操作命令 | String |,Y | - |
| msgId | 消息ID服务端收到此次请求会用同一个ID答复便于请求响应关联 | Int | Y | - |
| data | 请求参数请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | Y | - |
###### 请求返回结果:
```json
{
"data": {
"version": "v3.9.0-beta"
},
"command": "getVersion",
"msgId": 114514,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-----------------------------------|--------|---- |
| command | 操作命令,与请求一致 | String | - |
| msgId | 消息ID此次请求的消息ID为114514则响应也是114514 | Int | - |
| data | 响应内容,请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | - |
---
##### 接口名称 创建连接
```json
{
"command": "connect",
"msgId": 114514,
"data": {
"adbPath": "C:\\Users\\atmzx\\Desktop\\MeoAssistantArknights3\\platform-tools\\adb.exe",
"host": "127.0.0.1:62001"
}
}
```
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---- |---------------------------------|--------|---- |-----|
| command | 操作命令 | String |,Y | - |
| msgId | 消息ID服务端收到此次请求会用同一个ID答复便于请求响应关联 | Int | Y | - |
| data | 请求参数请参考同名接口的HTTP文档与HTTP接口完全一致 | Json | Y | - |
###### 请求返回结果:
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": true
},
"command": "connect",
"msgId": 114514,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-----------------------------------|--------|---- |
| command | 操作命令,与请求一致 | String | - |
| msgId | 消息ID此次请求的消息ID为114514则响应也是114514 | Int | - |
| data | 响应内容,请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | - |
appendTask setTaskParams start stop等接口不再描述均可遵循以上规则参考HTTP接口文档实现。
---
##### 接口名称 回调消息
###### 返回结果示例:
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"logId": 1,
"msg": 2,
"details": {
"uuid": "",
"details": {
"adb": "C:\\MeoAssistantArknights3\\platform-tools\\adb.exe",
"address": "127.0.0.1:62001",
"config": "General",
"width": 1280,
"height": 720
},
"what": "ResolutionGetted",
"why": ""
}
},
"command": "callBack",
"msgId": 0,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
|------|-----------------------------------|--------|---- |
| command | 操作命令,callBack类型 | String | - |
| msgId | 消息IDcallBack 一律为0 | Int | - |
| data | 响应内容,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | Json | - |

View File

@@ -32,6 +32,9 @@ fun Application.wsRouting() {
val wsRequest = Json.decodeFromString(WsRequest.serializer(), receivedText)
var response: BaseData? = null
when (wsRequest.command) {
"getVersion" -> {
response = GetVersionResponse(MaaService.getVersion())
}
"connect" -> {
with(Json.decodeFromJsonElement(ConnectRequest.serializer(), wsRequest.data)) {
response = MaaService.connect(adbPath, host, detailJson)