From dfab6b5606493301a4e03ba67c2161eb24b8ad46 Mon Sep 17 00:00:00 2001 From: iguigui Date: Fri, 27 May 2022 18:12:13 +0800 Subject: [PATCH] Maa HTTP server --- .../java/com/iguigui/maaj/dto/response.kt | 41 ++++++++++++++++--- .../com/iguigui/maaj/routing/HttpRouting.kt | 24 +++++------ .../com/iguigui/maaj/service/MaaInstance.kt | 2 + .../com/iguigui/maaj/service/MaaService.kt | 28 +++++++------ 4 files changed, 64 insertions(+), 31 deletions(-) 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 ab4c860e20..b4e2ece373 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 @@ -34,7 +34,7 @@ data class WsResponse( sealed class BaseData @Serializable -data class GetVersion( +data class GetVersionResponse( @SerialName("version") val version: String ) : BaseData() @@ -49,7 +49,7 @@ data class ConnectResponse( @Serializable -data class ListInstance( +data class ListInstanceResponse( @SerialName("list") val list: List ) : BaseData() @@ -62,21 +62,50 @@ data class MaaInstanceInfo( val host: String, @SerialName("adbPath") val adbPath: String, + @SerialName("uuid") + val uuid: String, @SerialName("status") val status: Int, ) : BaseData() @Serializable -data class AppendTask( +data class AppendTaskResponse( @SerialName("id") - val id: Int + val id: String, + @SerialName("taskId") + val taskId: Int ) : BaseData() +@Serializable +data class SetTaskParamsResponse( + @SerialName("id") + val id: String, + @SerialName("result") + val result: Boolean +) : BaseData() + + +@Serializable +data class StartResponse( + @SerialName("id") + val id: String, + @SerialName("result") + val result: Boolean +) : BaseData() + +@Serializable +data class StopResponse( + @SerialName("id") + val id: String, + @SerialName("result") + val result: Boolean +) : BaseData() + @Serializable data class CallBackLog( - @SerialName("instanceId") - val instanceId: String, + @SerialName("id") + val id: String, @SerialName("logId") val logId: Long, @SerialName("msg") 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 2f6211519e..eb6cdd1e4d 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 @@ -2,12 +2,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.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive fun Application.httpRouting() { @@ -16,48 +16,48 @@ fun Application.httpRouting() { route("/v1") { get("/getVersion") { val version = MaaService.getVersion() - call.respond(GetVersion(version).wapperToResponse()) + call.respond(GetVersionResponse(version).wapperToResponse()) } post("/connect") { with(call.receive()) { val connect = MaaService.connect(adbPath, host, detailJson) - call.respond(HttpResponse(connect.toJsonElement())) + call.respond(connect.wapperToResponse()) } } post("/appendTask") { with(call.receive()) { - MaaService.appendTask( + val result = appendTask( id, type, params.jsonObject.toString() ) + call.respond(AppendTaskResponse(id, result).wapperToResponse()) } - call.respond(EmptyBaseData.wapperToResponse()) } post("/setTaskParams") { with(call.receive()) { - MaaService.setTaskParams( + val result = MaaService.setTaskParams( id, type, taskId, params.jsonObject.toString() ) + call.respond(SetTaskParamsResponse(id, result).wapperToResponse()) } - call.respond(EmptyBaseData.wapperToResponse()) } post("/start") { val start = call.receive() - MaaService.start(start.id) - call.respond(EmptyBaseData.wapperToResponse()) + val result = MaaService.start(start.id) + call.respond(StartResponse(start.id, result).wapperToResponse()) } post("/stop") { val stop = call.receive() - MaaService.stop(stop.id) - call.respond(EmptyBaseData.wapperToResponse()) + val result = MaaService.stop(stop.id) + call.respond(StartResponse(stop.id, result).wapperToResponse()) } get("/listInstance") { val list = MaaService.listInstance() - call.respond(ListInstance(list).wapperToResponse()) + call.respond(ListInstanceResponse(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 b1d3ad347e..01421d5fb3 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 @@ -39,6 +39,8 @@ class MaaInstance( lateinit var pointer: Pointer + var uuid = "" + var status = 0 var logQueue: Queue = LinkedBlockingQueue(1000) 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 5033872a7b..aab210cae2 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 @@ -26,17 +26,19 @@ object MaaService { fun connect(adbPath: String, host: String, detailJson: String): ConnectResponse { val id = sha1(host) - if (instancePool.containsKey(id)) { - return ConnectResponse(id,true) + synchronized(id) { + if (instancePool.containsKey(id)) { + return ConnectResponse(id, true) + } + val maaInstance = MaaInstance(meoAssistant, host, adbPath, host, detailJson) + maaInstance.pointer = meoAssistant.AsstCreateEx(maaInstance, maaInstance.id) + val connect = maaInstance.connect() + if (!connect) { + return ConnectResponse("", false) + } + instancePool.putIfAbsent(id, maaInstance) } - val maaInstance = MaaInstance(meoAssistant, host, adbPath, host, detailJson) - maaInstance.pointer = meoAssistant.AsstCreateEx(maaInstance, maaInstance.id) - val connect = maaInstance.connect() - if (!connect) { - return ConnectResponse("",false) - } - instancePool.putIfAbsent(id, maaInstance) - return ConnectResponse(id,true) + return ConnectResponse(id, true) } fun appendTask(host: String, type: String, detailJson: String) = @@ -46,9 +48,9 @@ object MaaService { 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 start(host: String) = instancePool[host]?.start() ?: false - fun stop(host: String) = instancePool[host]?.stop() + fun stop(host: String) = instancePool[host]?.stop() ?: false fun getVersion(): String = meoAssistant.AsstGetVersion() @@ -69,7 +71,7 @@ object MaaService { } fun listInstance(): List = - instancePool.values.map { e -> MaaInstanceInfo(e.id, e.host, e.id, e.status) }.toList() + instancePool.values.map { e -> MaaInstanceInfo(e.id, e.host, e.adbPath, e.uuid, e.status) }.toList() }