npm.io
0.6.0 • Published 1 week ago

@glodon-ecs/web-bridge-sdk

Licence
ISC
Version
0.6.0
Deps
0
Size
163 kB
Vulns
0
Weekly
0

ECS-BRIDGE-SDK

ECSHub Panel 存在与多个宿主环境交互的场景,因此抽离出桥接的 SDK,以适配不同宿主环境。

已支持:

  • [√] SketchUp
  • QT
  • Web(for test)
  • Rhino
  • [√] Concetto
  • [√] ConcettoWeb

前置项

  • node >= 16
安装
npm install @glodon-ecs/web-bridge-sdk
使用示例
import ECSHubBridge, { BridgeEnv } from '@glodon-ecs/web-bridge-sdk';
// 或使用命名导入:import { ECSHubBridge, BridgeEnv } from "@glodon-ecs/web-bridge-sdk";

// 使用示例
async function main() {
  // initialize 方法需要先被调用
  // await ECSHubBridge.initialize(); // 自动检测初始化,QT、SU、Web环境
  const options = { env: BridgeEnv.sketchup, logger: window.console }; // options 可选
  await ECSHubBridge.initialize(options);
  const bridge = ECSHubBridge.getInstance();

  // 调用方法
  const data = await bridge.callMethod('getInitialData', 'param1');

  // 订阅
  const unsubscribe = bridge.subscribe('modelChanged', (data) => {});

  // 取消订阅
  unsubscribe();
}
扩展适配器

继承 BaseAdapter 并实现三个抽象方法

import { BaseAdapter } from '@glodon-ecs/web-bridge-sdk';
import type { LoggerType } from '@glodon-ecs/web-bridge-sdk';

class CADAdapter extends BaseAdapter {
  // 初始方法
  async init() {
    this.client = window.CADPlugin; // 假设第三方CAD插件
  }

  // 调用内部函数
  async call(method: string, args: unknown[]) {
    return this.client.execCommand(method, ...args);
  }

  // 注册事件监听
  onEvent(event: string, callback: (...args: unknown[]) => void) {
    this.client.on(event, callback);
    return () => this.client.off(event, callback);
  }
}

// 注入自定义适配器
await ECSHubBridge.initialize();
ECSHubBridge.setAdapter(new CADAdapter(), 'cad');

// 设置自定义适配器的 client 交互对象,如 ecsClient
await ECSHubBridge.initialize();
ECSHubBridge.setAdapterClient(client);
导出列表
导出 类型 说明
ECSHubBridge class (default) 桥接器主类
BridgeEnv enum 环境枚举:qt / web / sketchup / concetto / rhino
BaseAdapter abstract class 适配器基类,扩展适配器时继承
BridgeOptions interface 初始化配置项类型
LoggerType type 日志对象类型