UNPKG

colyseus.js

Version:

Colyseus Multiplayer SDK for JavaScript/TypeScript

1 lines 45.5 kB
{"version":3,"file":"index.mjs","sources":["../../../src/msgpack/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014 Ion Drive Software Ltd.\n * https://github.com/darrachequesne/notepack/\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Patch for Colyseus:\n * -------------------\n * notepack.io@3.0.1\n *\n * added `offset` on Decoder constructor, for messages arriving with a code\n * before actual msgpack data\n */\n\n//\n// DECODER\n//\n\nfunction Decoder(buffer, offset) {\n this._offset = offset;\n if (buffer instanceof ArrayBuffer) {\n this._buffer = buffer;\n this._view = new DataView(this._buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n this._buffer = buffer.buffer;\n this._view = new DataView(this._buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error('Invalid argument');\n }\n}\n\nfunction utf8Read(view, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = view.getUint8(i);\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (view.getUint8(++i) & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((view.getUint8(++i) & 0x3f) << 6) |\n ((view.getUint8(++i) & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((view.getUint8(++i) & 0x3f) << 12) |\n ((view.getUint8(++i) & 0x3f) << 6) |\n ((view.getUint8(++i) & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nDecoder.prototype._array = function (length) {\n var value = new Array(length);\n for (var i = 0; i < length; i++) {\n value[i] = this._parse();\n }\n return value;\n};\n\nDecoder.prototype._map = function (length) {\n var key = '', value = {};\n for (var i = 0; i < length; i++) {\n key = this._parse();\n value[key] = this._parse();\n }\n return value;\n};\n\nDecoder.prototype._str = function (length) {\n var value = utf8Read(this._view, this._offset, length);\n this._offset += length;\n return value;\n};\n\nDecoder.prototype._bin = function (length) {\n var value = this._buffer.slice(this._offset, this._offset + length);\n this._offset += length;\n return value;\n};\n\nDecoder.prototype._parse = function () {\n var prefix = this._view.getUint8(this._offset++);\n var value, length = 0, type = 0, hi = 0, lo = 0;\n\n if (prefix < 0xc0) {\n // positive fixint\n if (prefix < 0x80) {\n return prefix;\n }\n // fixmap\n if (prefix < 0x90) {\n return this._map(prefix & 0x0f);\n }\n // fixarray\n if (prefix < 0xa0) {\n return this._array(prefix & 0x0f);\n }\n // fixstr\n return this._str(prefix & 0x1f);\n }\n\n // negative fixint\n if (prefix > 0xdf) {\n return (0xff - prefix + 1) * -1;\n }\n\n switch (prefix) {\n // nil\n case 0xc0:\n return null;\n // false\n case 0xc2:\n return false;\n // true\n case 0xc3:\n return true;\n\n // bin\n case 0xc4:\n length = this._view.getUint8(this._offset);\n this._offset += 1;\n return this._bin(length);\n case 0xc5:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._bin(length);\n case 0xc6:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._bin(length);\n\n // ext\n case 0xc7:\n length = this._view.getUint8(this._offset);\n type = this._view.getInt8(this._offset + 1);\n this._offset += 2;\n if (type === -1) {\n // timestamp 96\n var ns = this._view.getUint32(this._offset);\n hi = this._view.getInt32(this._offset + 4);\n lo = this._view.getUint32(this._offset + 8);\n this._offset += 12;\n return new Date((hi * 0x100000000 + lo) * 1e3 + ns / 1e6);\n }\n return [type, this._bin(length)];\n case 0xc8:\n length = this._view.getUint16(this._offset);\n type = this._view.getInt8(this._offset + 2);\n this._offset += 3;\n return [type, this._bin(length)];\n case 0xc9:\n length = this._view.getUint32(this._offset);\n type = this._view.getInt8(this._offset + 4);\n this._offset += 5;\n return [type, this._bin(length)];\n\n // float\n case 0xca:\n value = this._view.getFloat32(this._offset);\n this._offset += 4;\n return value;\n case 0xcb:\n value = this._view.getFloat64(this._offset);\n this._offset += 8;\n return value;\n\n // uint\n case 0xcc:\n value = this._view.getUint8(this._offset);\n this._offset += 1;\n return value;\n case 0xcd:\n value = this._view.getUint16(this._offset);\n this._offset += 2;\n return value;\n case 0xce:\n value = this._view.getUint32(this._offset);\n this._offset += 4;\n return value;\n case 0xcf:\n hi = this._view.getUint32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return hi + lo;\n\n // int\n case 0xd0:\n value = this._view.getInt8(this._offset);\n this._offset += 1;\n return value;\n case 0xd1:\n value = this._view.getInt16(this._offset);\n this._offset += 2;\n return value;\n case 0xd2:\n value = this._view.getInt32(this._offset);\n this._offset += 4;\n return value;\n case 0xd3:\n hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return hi + lo;\n\n // fixext\n case 0xd4:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n if (type === 0x00) {\n // custom encoding for 'undefined' (kept for backward-compatibility)\n this._offset += 1;\n return void 0;\n }\n return [type, this._bin(1)];\n case 0xd5:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n return [type, this._bin(2)];\n case 0xd6:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n if (type === -1) {\n // timestamp 32\n value = this._view.getUint32(this._offset);\n this._offset += 4;\n return new Date(value * 1e3);\n }\n return [type, this._bin(4)];\n case 0xd7:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n if (type === 0x00) {\n // custom date encoding (kept for backward-compatibility)\n hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return new Date(hi + lo);\n }\n if (type === -1) {\n // timestamp 64\n hi = this._view.getUint32(this._offset);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n var s = (hi & 0x3) * 0x100000000 + lo;\n return new Date(s * 1e3 + (hi >>> 2) / 1e6);\n }\n return [type, this._bin(8)];\n case 0xd8:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n return [type, this._bin(16)];\n\n // str\n case 0xd9:\n length = this._view.getUint8(this._offset);\n this._offset += 1;\n return this._str(length);\n case 0xda:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._str(length);\n case 0xdb:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._str(length);\n\n // array\n case 0xdc:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._array(length);\n case 0xdd:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._array(length);\n\n // map\n case 0xde:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._map(length);\n case 0xdf:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._map(length);\n }\n\n throw new Error('Could not parse');\n};\n\nfunction decode(buffer, offset = 0) {\n var decoder = new Decoder(buffer, offset);\n var value = decoder._parse();\n if (decoder._offset !== buffer.byteLength) {\n throw new Error((buffer.byteLength - decoder._offset) + ' trailing bytes');\n }\n return value;\n}\n\n//\n// ENCODER\n//\n\nvar TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nvar TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nfunction utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view.setUint8(offset++, c);\n }\n else if (c < 0x800) {\n view.setUint8(offset++, 0xc0 | (c >> 6));\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view.setUint8(offset++, 0xe0 | (c >> 12));\n view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view.setUint8(offset++, 0xf0 | (c >> 18));\n view.setUint8(offset++, 0x80 | (c >> 12) & 0x3f);\n view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n }\n}\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nfunction _encode(bytes, defers, value) {\n var type = typeof value, i = 0, l = 0, hi = 0, lo = 0, length = 0, size = 0;\n\n if (type === 'string') {\n length = utf8Length(value);\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda, length >> 8, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n defers.push({ _str: value, _length: length, _offset: bytes.length });\n return size + length;\n }\n if (type === 'number') {\n // TODO: encode to float 32?\n\n // float 64\n if (Math.floor(value) !== value || !isFinite(value)) {\n bytes.push(0xcb);\n defers.push({ _float: value, _length: 8, _offset: bytes.length });\n return 9;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n bytes.push(value);\n return 1;\n }\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc, value);\n return 2;\n }\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd, value >> 8, value);\n return 3;\n }\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce, value >> 24, value >> 16, value >> 8, value);\n return 5;\n }\n // uint 64\n hi = (value / Math.pow(2, 32)) >> 0;\n lo = value >>> 0;\n bytes.push(0xcf, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 9;\n } else {\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(value);\n return 1;\n }\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0, value);\n return 2;\n }\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1, value >> 8, value);\n return 3;\n }\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2, value >> 24, value >> 16, value >> 8, value);\n return 5;\n }\n // int 64\n hi = Math.floor(value / Math.pow(2, 32));\n lo = value >>> 0;\n bytes.push(0xd3, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 9;\n }\n }\n if (type === 'object') {\n // nil\n if (value === null) {\n bytes.push(0xc0);\n return 1;\n }\n\n if (Array.isArray(value)) {\n length = value.length;\n\n // fixarray\n if (length < 0x10) {\n bytes.push(length | 0x90);\n size = 1;\n }\n // array 16\n else if (length < 0x10000) {\n bytes.push(0xdc, length >> 8, length);\n size = 3;\n }\n // array 32\n else if (length < 0x100000000) {\n bytes.push(0xdd, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Array too large');\n }\n for (i = 0; i < length; i++) {\n size += _encode(bytes, defers, value[i]);\n }\n return size;\n }\n\n if (value instanceof Date) {\n var ms = value.getTime();\n var s = Math.floor(ms / 1e3);\n var ns = (ms - s * 1e3) * 1e6;\n\n if (s >= 0 && ns >= 0 && s <= TIMESTAMP64_MAX_SEC) {\n if (ns === 0 && s <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32\n bytes.push(0xd6, 0xff, s >> 24, s >> 16, s >> 8, s);\n return 6;\n } else {\n // timestamp 64\n hi = s / 0x100000000;\n lo = s & 0xffffffff;\n bytes.push(0xd7, 0xff, ns >> 22, ns >> 14, ns >> 6, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 10;\n }\n } else {\n // timestamp 96\n hi = Math.floor(s / 0x100000000);\n lo = s >>> 0;\n bytes.push(0xc7, 0x0c, 0xff, ns >> 24, ns >> 16, ns >> 8, ns, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 15;\n }\n }\n\n if (value instanceof ArrayBuffer) {\n length = value.byteLength;\n\n // bin 8\n if (length < 0x100) {\n bytes.push(0xc4, length);\n size = 2;\n } else\n // bin 16\n if (length < 0x10000) {\n bytes.push(0xc5, length >> 8, length);\n size = 3;\n } else\n // bin 32\n if (length < 0x100000000) {\n bytes.push(0xc6, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Buffer too large');\n }\n defers.push({ _bin: value, _length: length, _offset: bytes.length });\n return size + length;\n }\n\n if (typeof value.toJSON === 'function') {\n return _encode(bytes, defers, value.toJSON());\n }\n\n var keys = [], key = '';\n\n var allKeys = Object.keys(value);\n for (i = 0, l = allKeys.length; i < l; i++) {\n key = allKeys[i];\n if (value[key] !== undefined && typeof value[key] !== 'function') {\n keys.push(key);\n }\n }\n length = keys.length;\n\n // fixmap\n if (length < 0x10) {\n bytes.push(length | 0x80);\n size = 1;\n }\n // map 16\n else if (length < 0x10000) {\n bytes.push(0xde, length >> 8, length);\n size = 3;\n }\n // map 32\n else if (length < 0x100000000) {\n bytes.push(0xdf, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Object too large');\n }\n\n for (i = 0; i < length; i++) {\n key = keys[i];\n size += _encode(bytes, defers, key);\n size += _encode(bytes, defers, value[key]);\n }\n return size;\n }\n // false/true\n if (type === 'boolean') {\n bytes.push(value ? 0xc3 : 0xc2);\n return 1;\n }\n if (type === 'undefined') {\n bytes.push(0xc0);\n return 1;\n }\n // custom types like BigInt (typeof value === 'bigint')\n if (typeof value.toJSON === 'function') {\n return _encode(bytes, defers, value.toJSON());\n }\n throw new Error('Could not encode');\n}\n\nfunction encode(value) {\n var bytes = [];\n var defers = [];\n var size = _encode(bytes, defers, value);\n var buf = new ArrayBuffer(size);\n var view = new DataView(buf);\n\n var deferIndex = 0;\n var deferWritten = 0;\n var nextOffset = -1;\n if (defers.length > 0) {\n nextOffset = defers[0]._offset;\n }\n\n var defer, deferLength = 0, offset = 0;\n for (var i = 0, l = bytes.length; i < l; i++) {\n view.setUint8(deferWritten + i, bytes[i]);\n if (i + 1 !== nextOffset) { continue; }\n defer = defers[deferIndex];\n deferLength = defer._length;\n offset = deferWritten + nextOffset;\n if (defer._bin) {\n var bin = new Uint8Array(defer._bin);\n for (var j = 0; j < deferLength; j++) {\n view.setUint8(offset + j, bin[j]);\n }\n } else if (defer._str) {\n utf8Write(view, offset, defer._str);\n } else if (defer._float !== undefined) {\n view.setFloat64(offset, defer._float);\n }\n deferIndex++;\n deferWritten += deferLength;\n if (defers[deferIndex]) {\n nextOffset = defers[deferIndex]._offset;\n }\n }\n return buf;\n}\n\nexport { encode, decode };\n"],"names":[],"mappings":"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"}