diff --git a/src/Java/Maaj/Readme.md b/src/Java/Maaj/Readme.md index 63e2c6b06c..8da0b141b9 100644 --- a/src/Java/Maaj/Readme.md +++ b/src/Java/Maaj/Readme.md @@ -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 | 消息ID,callBack 一律为0 | Int | - | +| data | 响应内容,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | Json | - | diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/WsRouting.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/WsRouting.kt index 0b00587522..52f1020286 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/WsRouting.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/WsRouting.kt @@ -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)