Maa HTTP server

This commit is contained in:
iguigui
2022-05-26 20:55:12 +08:00
parent 11d51447ad
commit dc3009cc26
5 changed files with 83 additions and 27 deletions

View File

@@ -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()

View File

@@ -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" }))

View File

@@ -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())
}
}
}

View File

@@ -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)

View File

@@ -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")