Skip to content

RPC API 说明

本文介绍 PCL CE 启动器 RPC 服务的基本信息、通信格式、请求与响应结构,以及当前对外开放的属性和函数。

PCL CE 内置了一个基于命名管道通信的 RPC 服务。本地第三方进程可以通过该服务与正在运行的启动器交换数据,例如获取启动器版本、读取实时状态、监听日志流,或请求启动器修改部分设置项。

服务信息

启动器运行后,会创建一个命名管道服务端。管道名称格式如下:

text
PCLCE_RPC@ProcessID

其中,ProcessID 为启动器当前进程的 ID。在 .NET 中,可以通过 System.Diagnostics 命名空间提供的 API 获取进程 ID。

RPC 服务默认开启。若客户端无法连接到管道,可能有以下原因:

  • 用户在启动器中启用了“禁用 RPC 服务”设置项;
  • 启动器尚未运行;
  • 目标进程 ID 不正确;
  • 其他进程占用了 RPC 管道;
  • 当前进程没有访问该命名管道的权限。

通信格式

请求和响应均使用 UTF-8 编码。

每条消息由两部分组成:

部分说明
header必需,位于第一行,用于描述请求或响应的基本信息
content可选,位于 header 之后,用于传递正文内容

消息正文需要以特殊字符 ESC 结尾。该字符在 ASCII 和 Unicode 中的编码如下:

表示方式
八进制033
十进制27
十六进制0x1B
转义写法\x1B

无论 content 是否为空,请求和响应都必须至少包含两行。也就是说,header 所在行的末尾必须包含换行符。

text
HEADER
CONTENT\x1B

content 为空时,仍然需要保留 header 后的换行符。

text
HEADER
\x1B

请求格式

请求的 header 格式如下:

text
TYPE argument
字段说明
TYPE请求类型
argument请求参数

请求类型

类型说明
GET获取指定属性的值
SET修改指定属性的值
REQ调用指定 RPC 函数

GET

GET 用于读取属性值。

text
GET version
\x1B

当请求类型为 GET 时,整个 argument 会被视为属性名称。属性名称不区分大小写。

SET

SET 用于修改属性值。

text
SET SomeProperty
NewValue\x1B

当请求类型为 SET 时,整个 argument 会被视为属性名称。属性名称不区分大小写。

需要写入的新值应放在 content 中。若写入成功,服务端会返回空响应,并通过响应状态表示操作结果。

REQ

REQ 用于调用 RPC 函数。

text
REQ ping
\x1B

当请求类型为 REQ 时,argument 会按空格分割:

  • 第一项为函数名称;
  • 剩余部分为函数参数。

函数名称不区分大小写。函数参数区分大小写,但最终行为取决于函数自身的实现。

例如:

text
REQ SomeFunction arg1 arg2
\x1B

响应格式

响应的 header 格式如下:

text
STATUS type name
字段说明
STATUS响应状态
type响应内容类型
name响应内容名称

响应状态

状态说明
SUCCESS请求处理成功
FAILURE请求已被处理,但操作未成功
ERR请求处理过程中发生错误

响应内容类型

类型说明
empty空响应,无正文内容
text文本内容
jsonJSON 内容
base64Base64 编码内容

typeempty 时,表示响应没有正文内容。

text
SUCCESS empty ping
\x1B

type 不为 empty 时,响应正文位于 header 后方。

text
SUCCESS text version
2.11.2-beta.3\x1B

属性权限标记

属性可能带有访问权限标记。权限标记由两个字符组成:

text
<读取权限><写入权限>

每个字符的含义如下:

字符含义
r可直接读取
w可直接写入
x操作前需要向用户确认
o不支持该操作

例如:

标记说明
ro可读取,不可写入
ow不可读取,可写入
rw可读取,可写入
rx可读取,写入前需要用户确认
xw读取前需要用户确认,可写入
xo读取前需要用户确认,不可写入
ox不可读取,写入前需要用户确认

对不支持的操作发起请求时,服务端会返回 FAILURE 状态的空响应。

例如:

  • roxo 属性使用 SET
  • owox 属性使用 GET

对需要用户确认的操作发起请求时,启动器会向用户弹窗询问。若用户拒绝,也会返回 FAILURE 状态的空响应。

属性

启动器当前公开以下属性。所有属性值均为文本类型。

属性名权限类型说明示例
versionrotext当前启动器版本2.11.2-beta.3
branchrotext当前版本分支名Slow Ring

version

获取当前启动器版本。

请求示例:

text
GET version
\x1B

响应示例:

text
SUCCESS text version
2.11.2-beta.3\x1B

branch

获取当前版本分支名。

请求示例:

text
GET branch
\x1B

响应示例:

text
SUCCESS text branch
Slow Ring\x1B

函数

RPC 函数的定义格式如下:

text
函数名 参数 content 返回值类型
函数参数content返回值类型说明
pingvoidemptyempty测试 RPC 服务连通性

ping

测试客户端与启动器 RPC 服务之间的连通性。

请求示例:

text
REQ ping
\x1B

响应示例:

text
SUCCESS empty ping
\x1B

如果客户端能够收到 SUCCESS 状态的响应,则表示 RPC 服务可正常通信。

Released under the Creative Commons Attribution-ShareAlike 4.0 International Public License (CC BY-SA 4.0).