注册程序
插件如何连接到 Stream Dock
插件注册
插件必须遵循如下注册程序。您可以重复使用在各种示例中实现的代码。我们在 Javascript 中提供了此过程的实现,但您可以使用任何支持 WebSocket 的编程语言来实现此过程。当 Stream Dock 应用程序启动时,它会生成每个插件的一个实例。
对于 Javascript 插件,使用多个参数调用
connectElgatoStreamDeckSocket(),为了兼容Elgato我们使用和他们一样的函数名称这样您开发的插件可以兼容elgato的软件对于打包成
.exe的插件,使用多个参数启动.exe可执行文件
这些参数包含用于与 Stream Dock 应用程序通信的端口和唯一标识符
Javascript 插件注册
对于 Javascript 插件,您需要声明以下 Javascript 函数:
//为了兼容Elgato我们使用和他们一样的函数名称这样您开发的插件可以兼容elgato的软件
function connectElgatoStreamDeckSocket(
    inPort, 
    inPluginUUID, 
    inRegisterEvent, 
    inInfo
)
此函数在加载插件时调用,并且应该:
- 使用传入的端口参数创建 WebSocket:
 
const server = new WebSocket('ws://127.0.0.1:' + inPort);
- 当 WebSocket 打开时,插件需要发送注册事件
 
server.onopen = () => server.send(
    JSON.stringify({ event: inRegisterEvent, uuid: inPluginUUID });
);
- 执行以上两个步骤后,插件应通过以下函数接收事件:
 
server.onmessage = (e) => (
    console.log(e.data);
);
编译插件注册
对于打包成 .exe 的插件,将使用以下参数启动 .exe 可执行文件:
| 参数 | 描述 | 
|---|---|
| -port | 字符串"-port" | 
| port | 用于连接websocket的端口 | 
| -pluginUUID | 字符串"-pluginUUID" | 
| pluginUUID | 打开 WebSocket 后用于注册插件的唯一标识符字符串 | 
| -registerEvent | 字符串"-registerEvent" | 
| event | 打开 WebSocket 后应用于注册插件的事件类型 | 
| -info | 字符串"-info" | 
| info | 包含 Stream Dock 和设备信息的 JSON 字符串 | 
PropertyInspector 注册
对于属性检查器,您需要声明以下 Javascript 函数:
// 为了兼容Elgato我们使用和他们一样的函数名称这样您开发的插件可以兼容elgato的软件
function connectElgatoStreamDeckSocket(
    inPort,
    inPropertyInspectorUUID, 
    inRegisterEvent, 
    inInfo, 
    inActionInfo
)
| 参数 | 描述 | 
|---|---|
| inPort | 用于连接websocket的端口 | 
| inPropertyInspectorUUID | 打开 WebSocket 后用于注册属性检查器的唯一标识符字符串 | 
| inRegisterEvent | 打开 WebSocket 后应用于注册属性检查器的事件类型 | 
| inInfo | 一个 JSON 对象,包含有关应用程序的信息 | 
| inActionInfo | 一个 JSON 对象,包含有关action的信息 | 
此函数在显示属性检查器时调用,并且应:
- 使用传入端口参数创建 WebSocket:
 
const server = new WebSocket('ws://127.0.0.1:' + inPort);
- 当 WebSocket 打开时,属性检查器需要注册 JSON 数据
 
server.onopen = () => server.send(
    JSON.stringify({ event: inRegisterEvent, uuid: inPropertyInspectorUUID });
);
- 执行以上两个步骤后,属性检查器应通过以下函数接收事件:
 
server.onmessage = (e) => (
    console.log(e.data);
);
info
注册过程中使用的 JSON 对象,如下所示:
{
    "application":{
        "font":"HarmonyOS Sans",
        "language":"zh_CN",
        "platform":"windows",
        "platformVersion":"10.0.19045",
        "version":"4.9"
    },
    "colors":{
        "buttonMouseOverBackgroundColor":"#464646FF",
        "buttonPressedBackgroundColor":"#303030FF",
        "buttonPressedBorderColor":"#646464FF",
        "buttonPressedTextColor":"#969696FF",
        "highlightColor":"#0078FFFF"
    },
    "devicePixelRatio":1,
    "devices":[
        {
            "id": "55F16B35884A859CCE4FFA1FC8D3DE5B", 
            "name": "Device Name", 
            "size": {
                "columns": 5, 
                "rows": 3
            }, 
            "type": 0
            },
            {
            "id": "B8F04425B95855CF417199BCB97CD2BB", 
            "name": "Another Device", 
            "size": {
                "columns": 3, 
                "rows": 2
            }, 
            "type": 1
        }
    ],
    "plugin":{
        "uuid":"com.mirabox.demo",
        "version":"1.8"
    }
}
| 参数 | 描述 | 
|---|---|
| application | 一个 JSON 对象,包含有关应用程序的信息 | 
| colors | 一个 JSON 对象,包含有关颜色的信息 | 
| devices | 一个 JSON 数组,包含有关设备的信息 | 
| plugin | 一个 JSON 对象,包含有关插件的信息 | 
| devicePixelRatio | 像素比值,用于指示 Stream Dock 应用程序是否在 HiDPI 屏幕上运行 | 
application 对象包含以下成员:
| application | 描述 | 
|---|---|
| language | 应用程序的语言 | 
| platform | 应用程序的运行平台 | 
| platformVersion | 应用程序的运行平台版本 | 
| version | 应用程序的版本 | 
plugin 对象包含以下成员:
| plugin | 描述 | 
|---|---|
| uuid | 插件的唯一标识符 | 
| version | 插件的版本 | 
devices 数组包含以下成员:
| devices | 描述 | 
|---|---|
| id | 设备的唯一标识符 | 
| name | 设备的名称 | 
| size | 设备的大小 | 
| type | 设备的类型 | 
inActionInfo
inActionInfo 参数是JSON 字符串,它包含以下信息:
{
  "action": "com.mirabox.demo.action1", 
  "context": uniqueValue, 
  "device": uniqueValue, 
  "payload": {
    "settings": {<JSON data>},
    "controller": "Keypad" | "Encoder"
    "coordinates": {
      "column": 2, 
      "row": 1
    }
  }
}
| 参数 | 描述 | 
|---|---|
| action | 插件中定义的 action 的唯一标识符 | 
| context | 用于标识实例操作的值 | 
| device | 用于标识设备的值 | 
| payload | 一个JSON对象 | 
payload 对象包含以下成员:
| payload | 描述 | 
|---|---|
| settings | 一个JSON对象,持久存储的数据 | 
| controller | 控制器数组。有效值包括Keypad,Information,SecondaryScreen,Knob,Keypad正常的按键,Information只能看,没有触摸、按键事件那些,SecondaryScreen小屏幕显示,Knob旋钮。 默认情况下。["Keypad"] | 
| coordinates | 触发的操作的坐标 | 
