mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
Maa HTTP server
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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" }))
|
||||
|
||||
|
||||
|
||||
@@ -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<ConnectRequest>()
|
||||
@@ -26,24 +23,43 @@ fun Application.httpRouting() {
|
||||
call.respond(HttpResponse(ConnectResponse(id).toJsonElement()))
|
||||
}
|
||||
post("/appendTask") {
|
||||
val appendTask = call.receive<AppendTaskRequest>()
|
||||
MaaService.appendTask(appendTask.host, appendTask.type, appendTask.params.toJsonString())
|
||||
call.respond(HttpResponse())
|
||||
with(call.receive<AppendTaskRequest>()) {
|
||||
MaaService.appendTask(
|
||||
host,
|
||||
type,
|
||||
params.jsonPrimitive.content
|
||||
)
|
||||
}
|
||||
call.respond(EmptyBaseData.wapperToResponse())
|
||||
}
|
||||
post("/setTaskParams") {
|
||||
val appendTask = call.receive<AppendTaskRequest>()
|
||||
MaaService.setTaskParams(appendTask.host, appendTask.type,appendTask.taskId, appendTask.params.toJsonString())
|
||||
call.respond(HttpResponse())
|
||||
with(call.receive<SetTaskParamsRequest>()) {
|
||||
MaaService.setTaskParams(
|
||||
host,
|
||||
type,
|
||||
taskId,
|
||||
params.jsonPrimitive.content
|
||||
)
|
||||
}
|
||||
call.respond(EmptyBaseData.wapperToResponse())
|
||||
}
|
||||
post("/start") {
|
||||
val start = call.receive<Start>()
|
||||
MaaService.start(start.host)
|
||||
call.respond(HttpResponse())
|
||||
call.respond(EmptyBaseData.wapperToResponse())
|
||||
}
|
||||
post("/stop") {
|
||||
val stop = call.receive<Stop>()
|
||||
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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<CallBackLog> = 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)
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user