MaaAssistantArknights / maa-cli

MAA命令行工具 | A simple CLI for MAA.
GNU Affero General Public License v3.0
39 stars 8 forks source link

`maa-cli` 前后端分离 #322

Open wangl-cc opened 1 month ago

wangl-cc commented 1 month ago

现状

当前,maa-cli 执行任务主要包括以下步骤:

  1. 解析 MaaCore 相关配置 (profile/*.toml);
  2. 解析任务:对于自定义任务读取任务定义文件,对于预定义任务处理命令行参数;
  3. 根据任务修改部分配置;
  4. 加载 MaaCore 并根据配置进行初始化;
  5. 向 MaaCore 添加解析任务,并启动;
  6. 等待任务完成并推出程序。

问题

上述实现比较简单直接,但是存在以下几个问题:

解决办法

为 maa-cli 引入一个 Server 模式,通过 maa serve 启动。启动后 maa-cli 将作为一个 RPC Server, 并监听某一个 Unix 或者 TCP Socket。maa runmaa startup 等命令将解析任务后向服务器发送请求。maa-cli 在运行任务时如果 server 未启动,将自行启动一个 server,并将其作为守护程序在后台活跃一段时间,然后通过相应的

具体实施

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
}
wangl-cc commented 1 month ago

@BoredTape 你可以在这个 issue 写一下你的想法,我其实还没有完全确定要怎么做,我也不是专业的开发,所以欢迎提出任何意见。

BoredTape commented 1 month ago

@BoredTape 你可以在这个 issue 写一下你的想法,我其实还没有完全确定要怎么做,我也不是专业的开发,所以欢迎提出任何意见。

首先,我这边的想法不是普通用户的想法,可以不用太在意,对于普通用户来说,我的想法是比较离谱的。

1.分开client和server的话,我比较关心server端,server如果可以做成一个crate的话,我这边比较方便嵌入到maabo(实话实说,我觉得我这想法是很离谱的)。 2.server端希望可以提供一个优雅的退出方式。(目前的Terminate应该足够了) 3.希望client和server之间的通信方式是流的,server端在执行一个任务时,会不断输出信息,如:目前的战斗,干员识别等。这个时候希望作为client端可以持续接收到server端的输出信息。grpc的流模式或者是websocket是可以做到的。 4.如果3可以实现,那么持续收到的server输出信息中,可以明确一个任务状态,如:DONEERRORRUNNINGPENDING

目前想到的就这些

wangl-cc commented 1 month ago

我觉得的话,client 不一定要负责启动客户端。走 RPC 的话,我觉得如果有可能,能让 MaaBo 支持非自己启动的 server 吗?这样就可以复用 cli 和 core,以及理论上可能的连接远程 server。

BoredTape commented 1 month ago

我觉得的话,client 不一定要负责启动客户端。走 RPC 的话,我觉得如果有可能,能让 MaaBo 支持非自己启动的 server 吗?这样就可以复用 cli 和 core,以及理论上可能的连接远程 server。

理论上是可以连接远程server的,不过task信息就要做相关的接口获取,现在MaaBo为了跟官方的体验一直,是写死了一份task配置包含:startup、flight等等的任务,这个看你server怎么定,我再适配。至于MaaBo启动server这个,是因为我日后想适配安卓端