# @rpgjs/sync-server

> ## Server

Latest version **3.0.0-rc** (published 2022-07-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install @rpgjs/sync-server
pnpm add @rpgjs/sync-server
yarn add @rpgjs/sync-server
bun add @rpgjs/sync-server
```

## Health

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

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.0.0-rc |
| Published | 2022-07-28 |
| First published | 2020-12-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 7 |
| Unpacked size | 56.3 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Samuel Ronce |
| Maintainers | webcreative5 |

## Links

- npm: https://www.npmjs.com/package/@rpgjs/sync-server
- npm.io page: https://npm.io/package/@rpgjs/sync-server

## Dependencies (7)

- [rxjs](https://npm.io/package/rxjs.md) 6.6.3
- [get-value](https://npm.io/package/get-value.md) 3.0.1
- [set-value](https://npm.io/package/set-value.md) 3.0.2
- [msgpack-lite](https://npm.io/package/msgpack-lite.md) 0.1.26
- [@rpgjs/common](https://npm.io/package/@rpgjs/common.md) ^3.0.0-rc
- [@babel/preset-env](https://npm.io/package/@babel/preset-env.md) 7.12.7
- [@babel/preset-typescript](https://npm.io/package/@babel/preset-typescript.md) 7.12.7

## Recent versions

- 3.0.0-rc (latest) — 2022-07-28
- 3.0.0-beta.9.1 — 2022-06-10
- 3.0.0-beta.9 — 2022-05-25
- 3.0.0-beta.8 — 2022-04-22
- 3.0.0-beta.7 — 2022-04-06
- 3.0.0-beta.6 — 2022-03-28
- 3.0.0-beta.5 — 2022-03-24
- 3.0.0-beta.4 — 2022-01-28
- 3.0.0-beta.3 — 2022-01-13
- 3.0.0-beta.2 — 2021-09-04
- 3.0.0-beta-1 — 2021-08-30
- 3.0.0-beta — 2021-08-29
- 3.0.0-alpha.13 — 2021-07-22
- 3.0.0-alpha.12 — 2021-06-24
- 3.0.0-alpha.11 — 2021-06-16
- … 14 more at https://npm.io/package/@rpgjs/sync-server/versions

## README

# How use it ?

## Server

1. Create just a class :

```js
class Page {

}
```

2. Add this room in World:

```js
import { World } from './world'

World.transport(io) // io is socket.io variable
const room = Word.addRoom('room_id', new Page())
```

3. Send packets to client:

```ts
setInterval(() => {
    World.send()
}, 20)
```

## Client

With `socket.io`

```html
<script src="sync-client.js"></script>
```

```js
const socket = io()
socket.emit(':join', 'room_id')
World.listen(socket).value.subscribe((val: { data: any, partial: any }) => {
    console.log(val)
})
```

# Add Room Properties:

```js
class Page {
    $schema = {
        title: String
    }
    title = ''
}
```

After adding the room, if you change the property, it will be transmitted to everyone.


```js
const room = Word.addRoom('room_id', Page)
room.title = 'my app' // is send to users in room
```

# Define Schema

## Normal Schema

Typescript
```ts
@Schema({
    title: String
})
export class Page {
    title: string = ''
}
```

Javascript
```js
export class Page {
    $schema = {
        title: String
    }
    title = ''
}
```

## Array Properties

Typescript
```ts
@Schema({
     list: [String]
})
export class Page {
    title: string[] = ['yo']
}
```

Javascript
```js
export class Page {
    $schema = {
        list: [String]
    }
    title = ['yo']
}
```

## with collection :

Typescript
```ts
@Schema({
     list: [{ id: Number, name: String }]
})
export class Page {
    list: { id: Number, name: String }[] = []
    constructor() {
        this.list.push({
            id: 1,
            name: 'yo'
        })
    }
}
```

Javascript
```js
export class Page {
    $schema = {
        list: [{ id: Number, name: String }]
    }
    list = []
    
    constructor() {
        this.list.push({
            id: 1,
            name: 'yo'
        })
    }
}
```

## Object generic key

Typescript
```ts
@Schema({
     list: [{ id: Number }]
})
export class Page {
    list: any = {}
    constructor() {
        this.list['mykey'] = {
            id: 1
        }
    }
}
```

Javascript
```js
export class Page {
    $schema = {
        list: [{ id: Number }]
    } 
    list = {}
    
    constructor() {
        this.list['mykey'] = {
            id: 1
        }
    }
}
```

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