# gasjs

> uneed.com GAS js client

Latest version **0.1.2** (published 2016-12-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install gasjs
pnpm add gasjs
yarn add gasjs
bun add gasjs
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2016-12-03 |
| First published | 2016-12-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | zhang.zhengming@uneed.com |
| Maintainers | uneed |

## Links

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

## Dependencies (2)

- [q](https://npm.io/package/q.md) ^1.4.1
- [eventemitter3](https://npm.io/package/eventemitter3.md) ^2.0.2

## Recent versions

- 0.1.2 (latest) — 2016-12-03
- 0.1.1 — 2016-12-02
- 0.1.0 — 2016-12-01

## README

# GAS javascript

## TODOs

- [x] GAS基本逻辑
- [ ] 重连机制
- [ ] API优化

## 服务端与客户端通信逻辑

<img src="docs/seq.png" width=600>

## 消息

消息结构定义:

```
// 客户端发送
{
  "type": "normal/broadcast", // 普通/广播
  "event": "some.event.type", // 事件类型
  "data": { // 事件数据
    ...
  }
}
// 服务端下发
{
  "event": "some.event.type",
  "data": {
    ...
  }
}
```

#### 游戏端发送的消息

###### 进入房间

```
{
  "type": "normal",
  "event": "entry",
  "data": {
    "channelId": "the channel id", // 房间id
    "userId": "the user id", // uneed用户id
    "token": "the token", // 请求创建房间时下发的token，用于GAS验证
  }
}
```

###### 准备开始

```
{
  "type": "normal",
  "event": "player.prepare",
}
```

###### 游戏结束

```
{
  "type": "normal",
  "event": "game.end"
}
```

###### 转发与定向转发

```
{
  "type": "broadcast",
  "event": "some.game.event",
  "players": [...] // 若无此项则转发到除我之外，若有此项则定向转发
}
```

#### 服务端发送的消息

###### 进入房间成功

```
{
  "event": "entry",
  "data": {
    "players": [...] // 其他玩家
  }
}
```

###### 广播玩家进入房间

```
{
  "event": "player.entry",
  "data": {
    "playerId": "the player id"
  }
}
```

###### 广播游戏开始

```
{
  "event": "game.start"
}
```

###### 广播游戏结束

```
{
  "event": "game.end",
  "data": {
    ... //游戏结果
  }
}
```

> 除此之外，服务端帮助转发或定向转其他自定义的游戏消息

## Usage

```javascript
import GAS from 'gasjs';

var gas = new GAS.Client();

gas
.configure({
  uri: 'ws://gas.uneed.com/',
  playerId: 'your uneed id',
  channelId: 'game0001_room0001',
  token: 'your token'
})
.startup({
  onPlayerEntry: (player) => {},
  onGameStart: () => {},
  onGameEnd: (data) => {},
  onGameMessage: (data) => {},
  onError: (data) => {}
});

// 广播所有玩家
gas.broadcast('your.game.event', data);

// 定向广播
var playerIds = [...];
gas.broadcast('your.game.event', playerIds, data);

```

## Contribute

#### Requirements

* node 6.x LTS
* yarn package manager
* webpack and webpack-dev-server


#### Step

1. Clone this project and entry javascript path: `cd gas/js`
2. Install dependencies: `yarn install`
3. `yarn run dev`

## The End

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