npm package: @rdbi/tools
Description: 为 rdbi-admin 微服务集成环境提供的工具包，提供了 `socket.sendMsg`, `sendEvent` 之类的工具函数。
Author: daizhen95
Latest version: 1.0.0-beta.20220825.2

## @rdbi/tools

为 rdbi-admin 微服务集成环境提供的工具包，提供了 `socket.sendMsg`, `sendEvent` 之类的工具函数。

这些工具函数只有在以微服务方式集成到主应用时才会被注入具体实现，请在集成环境里进行调试。

### Install

```bash
yarn add @rdbi/tools
```

### APIs

#### `拼装消息`

请调用此方法进行消息拼装，内部会生成唯一的 seq。

```typescript
import { RDBITools } from '@rdbi/tools'

const message = await RDBITools.configureMessage({
  cmd_type: 'call_function',
  cmd_cont: 'go',
  handler: 'patternTracerConsumerHandler',
  board_id: RDBITools.getGlobalSelectedSite?.()?.boardId,
})
```

#### `获取全局选中的 Site 及相关属性`

```typescript
import { RDBITools } from '@rdbi/tools'

// 可能是空，空就给予默认值(空对象)
const site = RDBITools.getGlobalSelectedSite?.() ?? ({} as Site)

// board_id
const board_id: string = site.boardId

// board_slot
const board_slot: string | number = site.boardSlot

// board_sn
const board_sn: string = site.boardSn

// board_block，值为 1 和 2，1 是 left / ALPG1, 2 是 right / ALPG2
const board_block: string | number = site.boardBlock

// dut_list，为 当前 site 的 system_dut list
const board_dut_list: number[] = site.dut_list ?? []

// dut_pin list，resource 可能为空，切勿去掉问号
const dut_pin: number[] = site.resource?.dut_pin ?? []

// TS 定义
export type Site = {
  boardSlot: string | number
  boardBlock: string | number
  boardId: string
  boardSn: string
  protoVersion?: string
  dut_list?: number[]
  resource?: Resource
}

export type Resource = {
  bib_dut_count: number
  system_dut: Systemdut[]
  dut_pin: number[]
}

export type Systemdut = {
  block: number
  dut_list: number[]
}
```

#### `获取所有 sites`

```typescript
import { RDBITools } from '@rdbi/tools'

const sites: Site[] = RDBITools.getSites()

// TS 定义
export type Site = {
  boardSlot: string | number
  boardBlock: string | number
  boardId: string
  boardSn: string
  protoVersion?: string
  dut_list?: number[]
  resource?: Resource
}

export type Resource = {
  bib_dut_count: number
  system_dut: Systemdut[]
  dut_pin: number[]
}

export type Systemdut = {
  block: number
  dut_list: number[]
}
```

#### `获取所有 start test 以及 pattern 信息`

```typescript
import { RDBITools } from '@rdbi/tools'

const startTests: TestInfor[] = RDBITools.getStartTests()

// TS 定义
type TestInfor = {
  test_name: string
  test_num: number
  pattern: string
}
```

#### `获取所有的 system_dut`

```typescript
import { RDBITools } from '@rdbi/tools'

const system_duts: number[] = RDBITools.getSystemDUTs()
```

#### `获取所有的 dut_pin`

```typescript
import { RDBITools } from '@rdbi/tools'

const dut_pins: number[] = RDBITools.getDUTPins()
```

#### `获取全局选中的 system_dut`

```typescript
import { RDBITools } from '@rdbi/tools'

const system_dut: number = RDBITools.getGlobalSelectedSystemDUT()
```

#### `获取 Control Panel -> Setting DUT 选中的 dut 列表`

```typescript
import { RDBITools } from '@rdbi/tools'

const system_duts: number[] = RDBITools.getCheckedSettingDUT()
```

#### `获取全局的 msg_session`

```typescript
import { RDBITools } from '@rdbi/tools'

const msg_session: string = RDBITools.getMsgSession()
```

#### `发送 websocket 请求`

```typescript
import { RDBITools } from '@rdbi/tools'

const message = await RDBITools.configureMessage({
  cmd_type: 'call_function',
  cmd_cont: 'go',
  board_id: RDBITools.getGlobalSelectedSite?.()?.boardId,
})

RDBITools.getSokcet().sendMsg({
  seq: message.msg_seq,
  data: message,
  success: (data) => {
    console.log(data, 'data')
  },
  error: (error) => {
    console.log(error, 'error')
  },
})
```

#### `发送 sse 请求`

```typescript
import { RDBITools } from '@rdbi/tools'

const message = await RDBITools.configureMessage({
  cmd_type: 'call_function',
  cmd_cont: 'go',
  handler: 'patternTracerConsumerHandler', // 必传
  board_id: RDBITools.getGlobalSelectedSite?.()?.boardId,
})

// T 为范型，自由指定
const evtSource = RDBITools.sendEvent<T>('http://ip:port', message, {
  onSuccess: (data) => {
    console.log(data, 'data')
    // 如果知道符合条件可以关闭
    // evtSource?.close()
  },
})
```