UNPKG

mudb

Version:

Real-time database for multiplayer games

76 lines 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const socket_1 = require("../socket"); function noop() { } class MuWorkerSocket { constructor(sessionId, socket) { this._state = socket_1.MuSocketState.INIT; this._onclose = noop; this.sessionId = sessionId; this._socket = socket; this._socket.onerror = (ev) => { console.error(`${ev.message} (${ev.filename}:${ev.lineno})`); }; } state() { return this._state; } open(spec) { if (this._state === socket_1.MuSocketState.OPEN) { throw new Error('client-side Worker socket already open'); } if (this._state === socket_1.MuSocketState.CLOSED) { throw new Error('client-side Worker socket already closed, cannot reopen'); } this._state = socket_1.MuSocketState.OPEN; this._socket.onmessage = (ev) => { if (ev.data.sessionId !== this.sessionId) { this._socket.terminate(); throw new Error('invalid ACK from server'); } this._socket.onmessage = ({ data }) => { spec.message(data.message, data.unreliable); }; this._onclose = spec.close; spec.ready(); }; this._socket.postMessage({ sessionId: this.sessionId }); } send(message, unreliable_) { if (this._state !== socket_1.MuSocketState.OPEN) { return; } const unreliable = !!unreliable_; if (typeof message === 'string') { this._socket.postMessage({ message, unreliable, }); } else { this._socket.postMessage({ message, unreliable, }, [message.buffer]); } } close() { if (this._state !== socket_1.MuSocketState.OPEN) { this._state = socket_1.MuSocketState.CLOSED; return; } this._state = socket_1.MuSocketState.CLOSED; this._socket.terminate(); this._onclose(); } reliableBufferedAmount() { return 0; } unreliableBufferedAmount() { return 0; } } exports.MuWorkerSocket = MuWorkerSocket; function createWorkerSocket(spec) { return new MuWorkerSocket(spec.sessionId, spec.serverWorker); } exports.createWorkerSocket = createWorkerSocket; //# sourceMappingURL=client.js.map