====== Native Procedure Call ====== ===== - 平台描述 ===== 多个**Js节点**共享一个**Native节点**,Native节点为Js提供**底层功能扩展**,同时提供数据传输路由能力,交换Js节点与**外连端口**间的数据。 术语: - Js节点: 在Web端页面中的一个Js对象,提供Js与Native的交换。 - Native节点: 为Js节点提供服务的Native对象。 - 底层功能扩展:Js需要使用,但不能实现或实现效率低的功能接口,Js以API方式使用的,由Native实现的功能。 - 外连端口:对外交换的端口,例如USB,Socket,HID等。 ===== - 统一信息接口(UMI) ===== 采用JSON格式字符串传输NPC信息包。 在JSON字符串中,数据值可使用以下类型: * 字符串 (string) * 数字 (number) * 对象(JSON 对象) (object) * 数组 (array) * 布尔 (boolean) * null ==== - IN信息 ==== === - 信息字段 === ^ 字段 ^ 类型 ^ 说明 ^ 其他 ^ | ver | number | 协议版本 | 必须 | | sn | number | 包序号 | 必须 | | cmd | number | 命令类型 | 必须 | | class | string | 调用过程所属模块 | 可选 | | proc | string | 调用过程名 | 可选 | | extra | number | 附加 | 可选 | | extra2 | string | 附加2 | 可选 | | arg | object | 调用参数 | 可选 | | hex | string | 16进制数字串 | 可选 | | asyncid | number | 异步调用通道号 | 异步调用必须,同步调用可选 | cmd: \\ 0: 调用服务 \\ 1: 异步调用 \\ 2: 循环调用 \\ === - 信息解析流程 === 信息包有2种类型:数据信息包(D) 和 过程调用信息包(C),数据信息包存在[hex]字段,过程调用信息包包含[proc]字段。 == 过程调用包 == [proc]字段(必须)指定所需调用的过程,[arg]字段(可选)调用参数,[extra](可选)附加调用模式选择。 [extra]字段取值说明: \\ 0 - 标志调用 \\ 1 - 附带通信端点号调用 \\ 其他 - 保留 \\ == 数据信息包 == ===== - 数据信息包 ===== 数据包支持2种数据格式:字符串 和 十六进制字符串。 ^ 序号 ^ 字段 ^ 类型 ^ 说明 ^ ^ 1 | dest | number | | ^ 2 | src | number | | ^ 3 | DType | number | 数据包类型 0: 字符串 1: 16进制数字符串 | ^ 4 | String | string | 字符串数据 | ^ 5 | Hex | string | 16进制数值符串 | ===== - 命令信息包 ===== 命令信息包类型: * 原生过程调用/响应 C.Type = 0 ==== - 原生过程调用与响应 ==== 调用原生过程的命令信息包格式(JS -> Native) ^ 序号 ^ 字段 ^ 类型 ^ 说明 ^ ^ 1 | CType | number | 0 | ^ 2 | Sn | number | 调用流水号 | ^ 3 | Procedure | string | 过程名 | ^ 4 | Argument | object | 参数 | 调用原生过程返回的命令信息包格式(Native -> Js) ^ 序号 ^ 字段 ^ 类型 ^ 说明 ^ ^ 1 | CType | number | 0 | ^ 2 | Sn | number | 调用流水号 | ^ 3 | Procedure | string | 过程名 | ^ 4 | Response | object | 过程调用返回 | Response Object格式 ^ 序号 ^ 字段 ^ 类型 ^ 说明 ^ ^ 1 | Error | number | 返回代码 0 : No Error, -1 : Procedure not found, -2 : Argument error | ^ 2 | Sn | number | 调用流水号 | ^ 3 | ErrorMessage | string | 返回代码说明(可选) | ^ 4 | 其他 ||| === - 节点注册 === * 注册 Procedure: Register Argument: ^ 序号 ^ 字段 ^ 类型 ^ 说明 ^ ^ 1 | Node | string| 节点名(App名) | ^ 2 | iframeIndex | number| iFrame序号(-1,非iframe) | * 响应 === - 系统信息 ===