-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed
Description
现状
当前,maa-cli 执行任务主要包括以下步骤:
- 解析 MaaCore 相关配置 (profile/*.toml);
- 解析任务:对于自定义任务读取任务定义文件,对于预定义任务处理命令行参数;
- 根据任务修改部分配置;
- 加载 MaaCore 并根据配置进行初始化;
- 向 MaaCore 添加解析任务,并启动;
- 等待任务完成并推出程序。
问题
上述实现比较简单直接,但是存在以下几个问题:
- 每次执行任务都需要加载并配置 MaaCore,这需要耗费一定时间(约几秒)。这在执行比较长的任务可以忽略,但是对于执行简单的任务,尤其是通过命令行连续执行多个任务时,这个开销是不能忽略。
- 目前 maa-cli 启动后没有任何外部干预途径。MaaCore 部分选项允许运行时更改,而 maa-cli 当前实现方式无法做到。
- 未来 maa-cli 可以作为一个后端,给供其他前端调用。这样其他前端就可以避免相对复杂的 MaaCore FFI,同时也可以基于此开发 WebUI。
解决办法
为 maa-cli 引入一个 Server 模式,通过 maa serve 启动。启动后 maa-cli 将作为一个 RPC Server, 并监听某一个 Unix 或者 TCP Socket。maa run、maa startup 等命令将解析任务后向服务器发送请求。maa-cli 在运行任务时如果 server 未启动,将自行启动一个 server,并将其作为守护程序在后台活跃一段时间,然后通过相应的
具体实施
- RPC 框架:JSON-RPC (crate jsonrpsee)。简单,易于调试,浏览器原生支持,易于和已有代码集成。RPC 协议相关的结构体,通过一个单独的 Crate 实现。
- 传输:WebSocket or WS+TLS。WS 相比 HTTP 更高效,全双工,同时和 HTTP 一样受到浏览器原生支持。
RPC API 列表
添加任务
方法名称: AppendTask
请求:
任务类型以及序列化为 JSON 的字符串。
{
"taskType": "StartUp",
"taskParams": \"{}\",
}响应:
{
"taskId": "1"
}其中 0 表示添加失败。
修改任务参数
方法名称: SetParams
请求:
{
"taskId": "1",
"newParams": {
"client_type": "Txwy"
}
}响应:
{
"success": true
}启动任务
方法名称: Start
请求:
{}响应:
{
"success": true
}停止任务
方法名称: Stop
请求:
{}响应:
{
"success": true
}检查任务是否正在进行
方法名称: Running
请求:
{}响应:
{
"running": false
}关闭 Server
方法名称: Terminate
请求:
{}响应:
{
"success": true
}Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed