puzzle/game/Communication.js
2020-11-09 01:54:05 +01:00

49 lines
977 B
JavaScript

import WsClient from './WsClient.js'
let conn
let changesCallback = () => {}
function onChanges(callback) {
changesCallback = callback
}
function connect(gameId, playerId) {
conn = new WsClient(WS_ADDRESS, playerId + '|' + gameId)
return new Promise(r => {
conn.connect()
conn.send(JSON.stringify({ type: 'init' }))
conn.onSocket('message', async ({ data }) => {
const d = JSON.parse(data)
if (d.type === 'init') {
r(d.game)
} else if (d.type === 'state_changed' && d.origin !== playerId) {
changesCallback(d.changes)
}
})
})
}
const _STATE = {
changed: false,
changes: [],
}
function addChange(change) {
_STATE.changes.push(change)
_STATE.changed = true
}
function sendChanges() {
if (_STATE.changed) {
conn.send(JSON.stringify({ type: 'state', state: _STATE }))
_STATE.changes = []
_STATE.changed = false
}
}
export default {
connect,
onChanges,
addChange,
sendChanges,
}