# gov-channel

> ## 理念

Latest version **0.1.3-0** (published 2019-08-27) · 0 weekly downloads

## Install

```sh
npm install gov-channel
pnpm add gov-channel
yarn add gov-channel
bun add gov-channel
```

## Health

**Score 10/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; low quality score; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.3-0 |
| Published | 2019-08-27 |
| First published | 2019-08-23 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 62.1 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Maintainers | yonyougov |

## Links

- npm: https://www.npmjs.com/package/gov-channel
- npm.io page: https://npm.io/package/gov-channel

## Dependencies (1)

- [vue](https://npm.io/package/vue.md) ^2.6.10

## Recent versions

- 0.1.3-0 (latest) — 2019-08-27
- 0.1.2 — 2019-08-27
- 0.1.1 — 2019-08-27
- 0.1.1-3 — 2019-08-26
- 0.1.1-2 — 2019-08-25
- 0.1.1-1 — 2019-08-24
- 0.1.1-0 — 2019-08-23

## README

# gov-channel

## 理念

channel 分为两种，**实现跨iframe双向、多向通信**：

1. 主channel，即 MainMessageChannel
2. 从channel，即 SubMessageChannel

- 一个main channel可以挂接多个sub channel, 可以实现主、从通信和从从通信
- 主channel对于消息有缓存机制，缓存一次最近的事件， 从channel挂载时触发
- 可以实现从从设备间的通信，通信要通过主设备
- 当主设备主动发起通信时，如果，所有从channel的应答是trusy的话，所有从的事件响应，否则所有从抛弃
- 目前主设备不主动发现从设备，从设备主动挂在

主设备可以在触发时间时，指定数据是否可以被保存。(后期应该支持indexDB和localstorage存储)

流程图如下：

                    +---+     +---+     +---+
                    | e | <-- |   | --> | b |
                    +---+     | a |     +---+
                    +---+     |   |     +---+
                    | f | <-- |   | --> | c |
                    +---+     +---+     +---+
                                |
                                |
                                v
                              +---+
                              | d |
                              +---+

## 接口设计

```ts
  class Channel {
    constructor(
      public name: string,
      public state: S = {} as any,
      private option: MainChannelOption = { ensure: true, sameOrigin: true},
    ) {}

    // 注册自己到主设备
    public registTo(name: string): Channel;
    // 主设备向从设备发送消息
    public postMessage<T = {}>(state: T);
    // 从设备注册监听数据变化回调
    public subscribe(handler: Handler<S>);
    // 关闭设备
    public close();
  }
```

### 使用方法

```js
  // 主设备用法
  const channel = new govChannel('main',{
    orgnazitionId: 'xx', bizYear: 'xx', theme: 'xx'
  });

  channel.postMessage({orgnazitionId: 'xx'}).then(()=>{
    // 数据发送成功
  })
  .cactch(()=>{
     // 数据发送失败
  })

```

## 消息规范

1. 内部消息规范

## TODO

- [ ] 增加消息中转功能

## 发布

正式版：

`npm run pub [major,minor, patch]`

非正式版：

`npm run pub [premajor,preminor,prepath, prerelease]`

---
_Source: https://npm.io/package/gov-channel · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
