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 d9c453ca60..f1062cdf52 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 @@ -4,6 +4,7 @@ import com.iguigui.maaj.util.Json import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.JsonElement sealed class WsRequest @@ -17,6 +18,16 @@ data class ConnectRequest( @Serializable data class AppendTaskRequest( + @SerialName("host") + val host: String, + @SerialName("type") + val type: String, + @SerialName("params") + val params: JsonElement +) + +@Serializable +data class SetTaskParamsRequest( @SerialName("host") val host: String, @SerialName("type") @@ -24,7 +35,7 @@ data class AppendTaskRequest( @SerialName("taskId") val taskId: Int, @SerialName("params") - val params: Task + val params: JsonElement ) @Serializable @@ -148,8 +159,8 @@ data class Stop( data class ConnectWs( @SerialName("data") val `data`: ConnectRequest, - @SerialName("type") - val type: String + @SerialName("command") + val command: String ) : WsRequest() diff --git a/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/response.kt b/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/response.kt index 079f4279d4..8855cf6a1b 100644 --- a/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/response.kt +++ b/src/Java/Maaj/src/main/java/com/iguigui/maaj/dto/response.kt @@ -70,10 +70,29 @@ data class AppendTask( val id: Int ) : BaseData() + +@Serializable +data class CallBackLog( + @SerialName("instanceId") + val instanceId: String, + @SerialName("logId") + val logId: Long, + @SerialName("msg") + val msg: Int, + @SerialName("details") + val details: JsonElement, +) : BaseData() + + + + object EmptyBaseData : BaseData() fun BaseData.toJsonElement() = Json.encodeToJsonElement(Json.encodeToJsonElement(this).jsonObject.filterNot { it.key == "type" }) +fun BaseData.wapperToResponse() = + HttpResponse(Json.encodeToJsonElement(Json.encodeToJsonElement(this).jsonObject.filterNot { it.key == "type" })) + 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 9879108338..ec722c02cf 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 @@ -6,6 +6,7 @@ import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import kotlinx.serialization.json.jsonPrimitive fun Application.httpRouting() { @@ -14,11 +15,7 @@ fun Application.httpRouting() { route("/v1") { get("/getVersion") { val version = MaaService.getVersion() - call.respond(HttpResponse(GetVersion(version).toJsonElement())) - } - get("/listInstance") { - val list = MaaService.listInstance() - call.respond(HttpResponse(ListInstance(list).toJsonElement())) + call.respond(GetVersion(version).wapperToResponse()) } post("/connect") { val connect = call.receive() @@ -26,24 +23,43 @@ fun Application.httpRouting() { call.respond(HttpResponse(ConnectResponse(id).toJsonElement())) } post("/appendTask") { - val appendTask = call.receive() - MaaService.appendTask(appendTask.host, appendTask.type, appendTask.params.toJsonString()) - call.respond(HttpResponse()) + with(call.receive()) { + MaaService.appendTask( + host, + type, + params.jsonPrimitive.content + ) + } + call.respond(EmptyBaseData.wapperToResponse()) } post("/setTaskParams") { - val appendTask = call.receive() - MaaService.setTaskParams(appendTask.host, appendTask.type,appendTask.taskId, appendTask.params.toJsonString()) - call.respond(HttpResponse()) + with(call.receive()) { + MaaService.setTaskParams( + host, + type, + taskId, + params.jsonPrimitive.content + ) + } + call.respond(EmptyBaseData.wapperToResponse()) } post("/start") { val start = call.receive() MaaService.start(start.host) - call.respond(HttpResponse()) + call.respond(EmptyBaseData.wapperToResponse()) } post("/stop") { val stop = call.receive() MaaService.stop(stop.host) - call.respond(HttpResponse()) + call.respond(EmptyBaseData.wapperToResponse()) + } + get("/listInstance") { + val list = MaaService.listInstance() + call.respond(ListInstance(list).wapperToResponse()) + } + get("/getLog") { + val list = MaaService.listInstance() + call.respond(ListInstance(list).wapperToResponse()) } } } 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 4b1bce31c0..49e8676300 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 @@ -1,7 +1,15 @@ package com.iguigui.maaj.service +import com.iguigui.maaj.dto.CallBackLog import com.iguigui.maaj.easySample.MeoAssistant +import com.iguigui.maaj.util.Json import com.sun.jna.Pointer +import java.util.LinkedList +import java.util.Queue +import java.util.concurrent.ConcurrentLinkedQueue +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.atomic.AtomicInteger +import java.util.concurrent.atomic.AtomicLong class MaaInstance(private val instance: MeoAssistant, val id: String, val adbPath: String, val host: String) : MeoAssistant.AsstApiCallback { @@ -25,15 +33,21 @@ class MaaInstance(private val instance: MeoAssistant, val id: String, val adbPat var status = 0 - override fun callback(msg: Int, detail_json: String?, custom_arg: String?) { + var logQueue: Queue = LinkedBlockingQueue(1000) + + var msgId = AtomicLong(0) + + + override fun callback(msg: Int, detail_json: String, custom_arg: String) { System.out.printf("回调msg : %s , 回调 detail_json : %s ,回调 custom_arg : %s \n", msg, detail_json, custom_arg) + logQueue.offer(CallBackLog(id, msgId.getAndIncrement(), msg, Json.parseToJsonElement(detail_json))) } fun connect(): Boolean = instance.AsstConnect(pointer, adbPath, host, ""); fun appendTask(type: String, params: String) = instance.AsstAppendTask(pointer, type, params) - fun setTaskParams(type: String,taskId:Int, params: String) = instance.AsstSetTaskParams(pointer, taskId, params) + fun setTaskParams(type: String, taskId: Int, params: String) = instance.AsstSetTaskParams(pointer, taskId, params) fun start() = instance.AsstStart(pointer) 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 f8bd60cc9e..6a339a20d6 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 @@ -34,22 +34,18 @@ object MaaService { return sha1(host) } - fun appendTask(host: String, type: String, detailJson: String): Int { - val appendTask = instancePool[host]?.appendTask(type, detailJson) - return appendTask ?: 0 - } + fun appendTask(host: String, type: String, detailJson: String) = + instancePool[host]?.appendTask(type, detailJson) ?: 0 - fun setTaskParams(host: String, type: String, taskId: Int, detailJson: String): Boolean { - val appendTask = instancePool[host]?.setTaskParams(type, taskId, detailJson) - return appendTask ?: false - } + fun setTaskParams(host: String, type: String, taskId: Int, detailJson: String) = + instancePool[host]?.setTaskParams(type, taskId, detailJson) ?: false fun start(host: String) = instancePool[host]?.start() fun stop(host: String) = instancePool[host]?.stop() - fun getVersion() = "3.9.0" + fun getVersion(): String = meoAssistant.AsstGetVersion() private fun sha1(password: String): String { val messageDigest = MessageDigest.getInstance("SHA")