diff --git a/README.md b/README.md index 174c080ddb..8586e53fc8 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,8 @@ MAA 的意思是 MAA Assistant Arknights - [Python 接口](src/Python/asst.py):[集成示例](src/Python/sample.py) - [Golang 接口](src/Golang/maa/):[集成示例](src/Golang/cli.go)(已停止维护 orz) - [Dart 接口](src/dart/) -- [Java 接口](src/Java/Maaj):[集成示例](src/Java/Maaj/src/main/java/com/iguigui/maaj/MaaJavaSample.java) +- [Java 接口](src/Java/Maaj/src/main/java/com/iguigui/maaj/easySample/MeoAssistant.java):[集成示例](src/Java/Maaj/src/main/java/com/iguigui/maaj/easySample/MaaJavaSample.java) +- [HTTP接口](src/Java/Maaj/Readme.md) - [集成文档](docs/集成文档.md) - [回调消息协议](docs/回调消息协议.md) - [任务流程协议](docs/任务流程协议.md) diff --git a/src/Java/Maaj/Readme.md b/src/Java/Maaj/Readme.md index 2440f9b007..d2a1fcba85 100644 --- a/src/Java/Maaj/Readme.md +++ b/src/Java/Maaj/Readme.md @@ -1,6 +1,7 @@ # Maa-HTTP接口实现 -本项目为通过JNA(Java-Native-Access)调用Maa核心实现的HTTP+WebSocket接口实现. +基于JNA(Java-Native-Access)调用Maa核心的HTTP+WebSocket接口实现. +仅在Windows下进行过测试,未在Linux下测试过(相信强大的Linux用户自己可以解决问题! ## 接口实现情况 @@ -13,8 +14,9 @@ | 开始执行 | start | Yes | Yes | | 停止执行 | stop | Yes | Yes | | 销毁实例 | destroy | Yes | Yes | -| 列出实例连接 | listInstance | Yes | Yes | +| 列出实例连接 | listInstance | Yes | Yes | | 消息回调通知 | callBack | No | Yes | +| 获取截图 | getImage | Yes | No | ## 环境依赖 @@ -27,7 +29,7 @@ ## 使用方法 -1. 把他丢进Maa文件夹下,形成如下文件结构. +1. 把他丢进Maa文件夹下,形成如下文件结构.备注: 启动脚本[Maa-HTTP-Server-startup.bat](Maa-HTTP-Server-startup.bat). ``` MeoAssistantArknights_v3.9.0-beta.8 @@ -66,6 +68,7 @@ MeoAssistantArknights_v3.9.0-beta.8 | 停止执行 | stop | | 销毁实例 | destroy | | 列出连接 | listInstance | +| 获取截图 | getImage | --- @@ -418,6 +421,29 @@ MeoAssistantArknights_v3.9.0-beta.8 | uuid | 设备备ID,保留 | String | - | | status | 0待机中,1任务执行中 | Int | - | + + +--- + +##### 接口名称 获取截图 + +###### 1) 请求地址 + +> http://127.0.0.1:8848/API/V1/getImage + +###### 2) 调用方式:HTTP get + +###### 3) 请求参数: + +###### Get参数: + +| 字段名称 | 字段说明 | 类型 | 必填 | 备注 | +| ---- |--------|--------|---- |-----| +| id | 创建连接返回的实例ID | String | Y | - | + +###### 4) 请求返回结果: 图片内容,PNG格式 + + ### WebSocket部分 请求地址(没错跟HTTP同样是8848钛金端口 diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/request.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/request.kt index 24127bdddd..7130fbc41b 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/request.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/request.kt @@ -161,6 +161,13 @@ data class DestroyRequest( val id: String, ) + +@Serializable +data class GetImage( + @SerialName("id") + val id: String, +) + @SerialName("connect") @Serializable data class WsRequest( diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/HttpRouting.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/HttpRouting.kt index fe3e5baaf7..0d3025cd7c 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/HttpRouting.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/routing/HttpRouting.kt @@ -3,10 +3,12 @@ package com.iguigui.maaj.routing import com.iguigui.maaj.dto.* import com.iguigui.maaj.service.MaaService import com.iguigui.maaj.service.MaaService.appendTask +import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import io.ktor.utils.io.* import kotlinx.serialization.json.jsonObject @@ -63,6 +65,18 @@ fun Application.httpRouting() { val list = MaaService.listInstance() call.respond(ListInstanceResponse(list).wapperToHttpResponse()) } + get("/getImage") { + val id = call.request.queryParameters["id"] + id?.let { + MaaService.getImage(it)?.run { + call.respondBytes(this, ContentType("image", "png")) + } + } + } + post("/listInstance") { + val list = MaaService.listInstance() + call.respond(ListInstanceResponse(list).wapperToHttpResponse()) + } } } } diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaInstance.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaInstance.kt index 7209468f40..7167ae4b52 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaInstance.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaInstance.kt @@ -82,4 +82,16 @@ class MaaInstance( fun stop() = instance.AsstStop(pointer) fun destroy() = instance.AsstDestroy(pointer) + fun getImage(): ByteArray? { + val size = 1024 * 1024 * 6 + val byteArray = ByteArray(size) + val length = instance.AsstGetImage(pointer, byteArray, size.toLong()) + if (length == 0L) { + return null + } + val target = ByteArray(length.toInt()) + System.arraycopy(byteArray,0,target,0,length.toInt()) + return target + } + } diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaService.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaService.kt index 16645b345c..c04fa91bb7 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaService.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/service/MaaService.kt @@ -21,7 +21,7 @@ object MaaService { val meoAssistant: MeoAssistant by lazy { var maaPath = File(File("").absolutePath).parent logger.info("maaPath $maaPath") -// maaPath = "C:\\Users\\atmzx\\Desktop\\MeoAssistantArknights3" + maaPath = "C:\\Users\\atmzx\\Desktop\\MeoAssistantArknights3" System.setProperty("jna.library.path", maaPath) val load = Native.load("MeoAssistant", MeoAssistant::class.java) load.AsstLoadResource(maaPath) @@ -95,4 +95,8 @@ object MaaService { this.wsConnection -= connection } + fun getImage(id: String): ByteArray? { + return instancePool[id]?.getImage() + } + }