refactor: packing

This commit is contained in:
cha0s 2021-01-10 03:38:17 -06:00
parent 2238cc2c46
commit 757573f039
14 changed files with 166 additions and 159 deletions

View File

@ -12,7 +12,7 @@
},
"devDependencies": {
"@neutrinojs/airbnb-base": "^9.4.0",
"@neutrinojs/banner": "^9.4.0",
"@neutrinojs/banner": "^9.5.0",
"@neutrinojs/mocha": "^9.4.0",
"@neutrinojs/react": "^9.4.0",
"chai": "4.2.0",

View File

@ -2,15 +2,13 @@ import {packetFromName, Packet} from '@latus/socket';
export default (latus) => class EntityListUpdateEntityPacket extends Packet {
static pack(packet) {
static packData(data) {
const {BundlePacket} = packetFromName(latus);
const data = packet.data[1];
for (let i = 0; i < data.length; i++) {
data[i].packets = BundlePacket.packPacket(
new BundlePacket(data[i].packets),
);
// eslint-disable-next-line no-param-reassign
data[i].packets = BundlePacket.bundle(data[i].packets);
}
return super.pack(packet);
return data;
}
static get data() {
@ -22,14 +20,13 @@ export default (latus) => class EntityListUpdateEntityPacket extends Packet {
];
}
static unpack(packet) {
static unpackData(data) {
const {BundlePacket} = packetFromName(latus);
const unpacked = super.unpack(packet);
const {data} = unpacked;
for (let i = 0; i < data.length; i++) {
data[i].packets = BundlePacket.unpack(data[i].packets).data;
// eslint-disable-next-line no-param-reassign
data[i].packets = BundlePacket.unbundle(data[i].packets);
}
return unpacked;
return data;
}
};

View File

@ -2,20 +2,19 @@ import {SynchronizedUpdatePacket} from '@avocado/s13n';
import {traits} from '@avocado/traits';
import {packetFromName} from '@latus/socket';
// import {traitFromId, traitFromType} from '../trait';
export default (latus) => class EntityUpdateTraitPacket extends SynchronizedUpdatePacket {
static pack(packet) {
static packData(data) {
const {BundlePacket} = packetFromName(latus);
const data = packet.data[1];
const {fromType} = traits(latus);
for (let i = 0; i < data.traits.length; i++) {
const Trait = fromType[data.traits[i].type];
data.traits[i].type = Trait.id;
data.traits[i].packets = BundlePacket.packPacket(new BundlePacket(data.traits[i].packets));
// eslint-disable-next-line no-param-reassign
data.traits[i] = {
type: Trait.id,
packets: BundlePacket.bundle(data.traits[i].packets),
};
}
return super.pack(packet);
}
static get synchronizationSchema() {
@ -29,17 +28,18 @@ export default (latus) => class EntityUpdateTraitPacket extends SynchronizedUpda
};
}
static unpack(packet) {
static unpack(data) {
const {BundlePacket} = packetFromName(latus);
const unpacked = super.unpack(packet);
const {data} = unpacked;
const {fromId} = traits(latus);
for (let i = 0; i < data.traits.length; i++) {
const {default: Trait} = fromId[data.traits[i].type];
data.traits[i].type = Trait.type();
data.traits[i].packets = BundlePacket.unpack(data.traits[i].packets).data;
// eslint-disable-next-line no-param-reassign
data.traits[i] = {
type: Trait.type(),
packets: BundlePacket.unbundle(data.traits[i].packets),
};
}
return unpacked;
return data;
}
};

View File

@ -1,21 +1,11 @@
import {Vector} from '@avocado/math';
import {compose} from '@latus/core';
import {Packet} from '@latus/socket';
export default class TraitUpdatePositionedPositionPacket extends Packet {
const decorate = compose(
Vector.packer,
);
static pack(packet) {
// eslint-disable-next-line no-param-reassign
packet.data[1] = Vector.packToUint32(packet.data[1]);
return super.pack(packet);
}
class TraitUpdatePositionedPositionPacket extends Packet {}
static get data() {
return 'uint32';
}
static unpack(packet) {
const unpacked = super.unpack(packet);
return Vector.unpackFromUint32(unpacked);
}
}
export default decorate(TraitUpdatePositionedPositionPacket);

View File

@ -2,27 +2,25 @@ import {Packet} from '@latus/socket';
export default class TraitUpdateVisiblePacket extends Packet {
static pack(packet) {
const data = packet.data[1];
data.opacity = Math.floor(data.opacity * 255);
return super.pack(packet);
}
static get schema() {
static packData(data) {
return {
...super.schema,
data: {
isVisible: 'bool',
opacity: 'uint8',
},
isVisibile: data.isVisible,
opacity: Math.floor(data.opacity * 255),
};
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
data.opacity /= 255;
return unpacked;
static get data() {
return {
isVisible: 'bool',
opacity: 'uint8',
};
}
static unpackData(data) {
return {
isVisibile: data.isVisible,
opacity: data.opacity / 255,
};
}
}

View File

@ -2,49 +2,46 @@ import {Packet} from '@latus/socket';
export default class InputPacket extends Packet {
static #actionIds = {};
static #idActions = {};
static setActionIds(actionIds) {
this._actionIds = actionIds;
this._idActions = {};
const actions = Object.entries(this._actionIds);
this.#actionIds = actionIds;
this.#idActions = {};
const actions = Object.entries(this.#actionIds);
for (let i = 0; i < actions.length; i++) {
const [action, id] = actions[i];
this._idActions[id] = action;
this.#idActions[id] = action;
}
}
static pack(packet) {
const data = packet.data[1];
static packData(data) {
for (let i = 0; i < data.length; i++) {
const {action, value} = data[i];
const actionId = this._actionIds[action];
// eslint-disable-next-line no-bitwise
const actionId = this.#actionIds[action];
// eslint-disable-next-line no-bitwise, no-param-reassign
data[i] = ((actionId & 0xFF) << 24) | (value & 0xFFFFFF);
}
return super.pack(packet);
return data;
}
static get schema() {
return {
...super.schema,
data: ['uint32'],
};
static get data() {
return 'uint32';
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
static unpackData(data) {
for (let i = 0; i < data.length; i++) {
/* eslint-disable no-bitwise */
const actionId = data[i] >> 24;
const value = data[i] & 0xFFFFFF;
/* eslint-enable no-bitwise */
// eslint-disable-next-line no-bitwise
const [actionId, value] = [data[i] >> 24, data[i] & 0xFFFFFF];
// eslint-disable-next-line no-param-reassign
data[i] = {
action: this._idActions[actionId],
action: this.#idActions[actionId],
// -1 is nice to handle, anyway. We'll be a pal.
value: 16777214 === value ? -1 : value,
};
}
return unpacked;
return data;
}
}

View File

@ -0,0 +1,51 @@
/* eslint-disable no-bitwise */
export function unpackFromUint32(uint32) {
return [
uint32 & 0xFFFF,
uint32 >> 16,
];
}
export function packToUint32(v) {
const x = Math.min(65535, Math.max(0, v[0]));
const y = Math.min(65535, Math.max(0, v[1]));
return (y << 16) | x;
}
/* eslint-enable no-bitwise */
export default (key) => (Superclass) => {
class PackedVectorPacket extends Superclass {}
Object.defineProperty(
PackedVectorPacket,
'data',
key
? {
get() {
// eslint-disable-next-line no-param-reassign
const data = super.data;
data[key] = 'uint32';
return data;
},
}
: {
get() {
return 'uint32';
},
},
);
PackedVectorPacket.packData = key
? (data) => {
// eslint-disable-next-line no-param-reassign
data[key] = packToUint32(data[key]);
return data;
}
: (data) => packToUint32(data);
PackedVectorPacket.unpackData = key
? (data) => {
// eslint-disable-next-line no-param-reassign
data[key] = unpackFromUint32(data[key]);
return data;
}
: (data) => unpackFromUint32(data);
return PackedVectorPacket;
};

View File

@ -375,17 +375,8 @@ export function toObject(v) {
return {x: v[0], y: v[1]};
}
/* eslint-disable no-bitwise */
export function unpackFromUint32(uint32) {
return [
uint32 & 0xFFFF,
uint32 >> 16,
];
}
export function packToUint32(v) {
const x = Math.min(65535, Math.max(0, v[0]));
const y = Math.min(65535, Math.max(0, v[1]));
return (y << 16) | x;
}
/* eslint-enable no-bitwise */
export {
default as Packer,
packToUint32,
unpackFromUint32,
} from './packer';

View File

@ -4,10 +4,10 @@ import SynchronizedPacket from './synchronized';
export default class SynchronizedCreatePacket extends SynchronizedPacket {
static pack(packet) {
const data = packet.data[1];
static packData(data) {
// eslint-disable-next-line no-param-reassign
data.spec = msgpack.encode(data.spec);
return super.pack(packet);
return data;
}
static get synchronizationSchema() {
@ -16,11 +16,10 @@ export default class SynchronizedCreatePacket extends SynchronizedPacket {
};
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
static unpackData(data) {
// eslint-disable-next-line no-param-reassign
data.spec = msgpack.decode(data.spec);
return unpacked;
return data;
}
}

View File

@ -2,10 +2,8 @@ import {Packet} from '@latus/socket';
export default class LayerUpdateTilesetUriPacket extends Packet {
static get schema() {
return {
data: 'string',
};
static get data() {
return 'string';
}
}

View File

@ -2,35 +2,29 @@ import {BundlePacket, Packet} from '@latus/socket';
export default class LayersUpdateLayerPacket extends Packet {
static pack(packet) {
const data = packet.data[1];
static packData(data) {
for (let i = 0; i < data.length; i++) {
data[i].layerPackets = BundlePacket.packPacket(
new BundlePacket(data[i].layerPackets),
);
// eslint-disable-next-line no-param-reassign
data[i].layerPackets = BundlePacket.bundle(data[i].layerPackets);
}
return super.pack(packet);
return data;
}
static get schema() {
return {
...super.schema,
data: [
{
layerIndex: 'uint8',
layerPackets: 'buffer',
},
],
};
static get data() {
return [
{
layerIndex: 'uint8',
layerPackets: 'buffer',
},
];
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
static unpackData(data) {
for (let i = 0; i < data.length; i++) {
data[i].layerPackets = BundlePacket.unpack(data[i].layerPackets).data;
// eslint-disable-next-line no-param-reassign
data[i].layerPackets = BundlePacket.unbundle(data[i].layerPackets);
}
return unpacked;
return data;
}
}

View File

@ -1,14 +1,12 @@
import {BundlePacket} from '@latus/socket';
import {SynchronizedUpdatePacket} from '@avocado/s13n';
export default class RoomUpdateLayersPacket extends SynchronizedUpdatePacket {
export default class RoomUpdateLayers extends SynchronizedUpdatePacket {
static pack(packet) {
const data = packet.data[1];
data.layersPackets = BundlePacket.packPacket(
new BundlePacket(data.layersPackets),
);
return super.pack(packet);
static packData(data) {
// eslint-disable-next-line no-param-reassign
data.layersPackets = BundlePacket.bundle(data.layerPackets);
return data;
}
static get synchronizationSchema() {
@ -17,11 +15,10 @@ export default class RoomUpdateLayersPacket extends SynchronizedUpdatePacket {
};
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
data.layersPackets = BundlePacket.unpack(data.layersPackets).data;
return unpacked;
static unpackData(data) {
// eslint-disable-next-line no-param-reassign
data.layersPackets = BundlePacket.unbundle(data.layersPackets);
return data;
}
}

View File

@ -1,29 +1,19 @@
import {Vector} from '@avocado/math';
import {compose} from '@latus/core';
import {Packet} from '@latus/socket';
export default class TilesUpdatePacket extends Packet {
const decorate = compose(
Vector.packer('position'),
);
static pack(packet) {
const data = packet.data[1];
data.position = Vector.packToUint32(data.position);
return super.pack(packet);
}
class TilesUpdatePacket extends Packet {
static get schema() {
static get data() {
return {
...super.schema,
data: {
position: 'uint32',
tile: 'uint16',
},
tile: 'uint16',
};
}
static unpack(packet) {
const unpacked = super.unpack(packet);
const {data} = unpacked;
data.position = Vector.unpackFromUint32(data.position);
return unpacked;
}
}
export default decorate(TilesUpdatePacket);

View File

@ -1896,6 +1896,11 @@
eslint-config-airbnb-base "^14.2.0"
eslint-plugin-import "^2.22.0"
"@neutrinojs/banner@^9.5.0":
version "9.5.0"
resolved "https://npm.i12e.cha0s.io/@neutrinojs%2fbanner/-/banner-9.5.0.tgz#ee8df39db5d76033211a1811428e444a06d7222f"
integrity sha512-SL4nT0V1Wykf+LcRlCp/L8Frt4dk7MZITToC+OeDz2w6V7gg8YfEwDfdEg+aampjyUoxaq+A02ZyZP1TyRDtLA==
"@neutrinojs/clean@9.5.0":
version "9.5.0"
resolved "https://npm.i12e.cha0s.io/@neutrinojs%2fclean/-/clean-9.5.0.tgz#77cfb0add1584741c7501f5e12ad206b67f216bf"
@ -9500,7 +9505,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
source-map-support@^0.5.16, source-map-support@~0.5.12:
source-map-support@0.5.19, source-map-support@^0.5.16, source-map-support@~0.5.12:
version "0.5.19"
resolved "https://npm.i12e.cha0s.io/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==