3.0.0-rc • Published 2 years ago

@rpgjs/sync-server v3.0.0-rc

Weekly downloads
11
License
MIT
Repository
-
Last release
2 years ago

How use it ?

Server

  1. Create just a class :
class Page {

}
  1. Add this room in World:
import { World } from './world'

World.transport(io) // io is socket.io variable
const room = Word.addRoom('room_id', new Page())
  1. Send packets to client:
setInterval(() => {
    World.send()
}, 20)

Client

With socket.io

<script src="sync-client.js"></script>
const socket = io()
socket.emit(':join', 'room_id')
World.listen(socket).value.subscribe((val: { data: any, partial: any }) => {
    console.log(val)
})

Add Room Properties:

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

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

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

Define Schema

Normal Schema

Typescript

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

Javascript

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

Array Properties

Typescript

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

Javascript

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

with collection :

Typescript

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

Javascript

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

Object generic key

Typescript

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

Javascript

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