UNPKG

colyseus.js

Version:

Colyseus Multiplayer SDK for JavaScript/TypeScript

94 lines (90 loc) 3.02 kB
// colyseus.js@0.16.15 'use strict'; var tslib = require('tslib'); /// <reference path="../typings/cocos-creator.d.ts" /> /** * We do not assign 'storage' to window.localStorage immediatelly for React * Native compatibility. window.localStorage is not present when this module is * loaded. */ let storage; function getStorage() { if (!storage) { try { storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage) ? cc.sys.localStorage // compatibility with cocos creator : window.localStorage; // RN does have window object at this point, but localStorage is not defined } catch (e) { // ignore error } } if (!storage && typeof (globalThis.indexedDB) !== 'undefined') { storage = new IndexedDBStorage(); } if (!storage) { // mock localStorage if not available (Node.js or RN environment) storage = { cache: {}, setItem: function (key, value) { this.cache[key] = value; }, getItem: function (key) { this.cache[key]; }, removeItem: function (key) { delete this.cache[key]; }, }; } return storage; } function setItem(key, value) { getStorage().setItem(key, value); } function removeItem(key) { getStorage().removeItem(key); } function getItem(key, callback) { const value = getStorage().getItem(key); if (typeof (Promise) === 'undefined' || // old browsers !(value instanceof Promise)) { // browser has synchronous return callback(value); } else { // react-native is asynchronous value.then((id) => callback(id)); } } /** * When running in a Web Worker, we need to use IndexedDB to store data. */ class IndexedDBStorage { constructor() { this.dbPromise = new Promise((resolve) => { const request = indexedDB.open('_colyseus_storage', 1); request.onupgradeneeded = () => request.result.createObjectStore('store'); request.onsuccess = () => resolve(request.result); }); } tx(mode, fn) { return tslib.__awaiter(this, void 0, void 0, function* () { const db = yield this.dbPromise; const store = db.transaction('store', mode).objectStore('store'); return fn(store); }); } setItem(key, value) { return this.tx('readwrite', store => store.put(value, key)).then(); } getItem(key) { return tslib.__awaiter(this, void 0, void 0, function* () { const request = yield this.tx('readonly', store => store.get(key)); return new Promise((resolve) => { request.onsuccess = () => resolve(request.result); }); }); } removeItem(key) { return this.tx('readwrite', store => store.delete(key)).then(); } } exports.getItem = getItem; exports.removeItem = removeItem; exports.setItem = setItem; //# sourceMappingURL=Storage.js.map