refactor: packet coding
This commit is contained in:
parent
d18ed7171e
commit
4bc2d9f50f
|
@ -25,11 +25,12 @@ export default class EntityListUpdateEntityPacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
data[i].packets = BundlePacket.unpack(data[i].packets);
|
data[i].packets = BundlePacket.unpack(data[i].packets);
|
||||||
}
|
}
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,13 +29,14 @@ export default class EntityUpdateTraitPacket extends SynchronizedUpdatePacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
for (let i = 0; i < data.traits.length; i++) {
|
for (let i = 0; i < data.traits.length; i++) {
|
||||||
const {default: Trait} = fromId(data.traits[i].type);
|
const {default: Trait} = fromId(data.traits[i].type);
|
||||||
data.traits[i].type = Trait.type();
|
data.traits[i].type = Trait.type();
|
||||||
data.traits[i].packets = BundlePacket.unpack(data.traits[i].packets);
|
data.traits[i].packets = BundlePacket.unpack(data.traits[i].packets);
|
||||||
}
|
}
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,10 @@ export default class TraitUpdatePositionedPositionPacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.position = Vector.unpackFromUint32(data.position);
|
data.position = Vector.unpackFromUint32(data.position);
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,10 @@ export default class TraitUpdateVisiblePacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.opacity = data.opacity / 255;
|
data.opacity = data.opacity / 255;
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@ export default class InputPacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
const actionId = data[i] >> 24;
|
const actionId = data[i] >> 24;
|
||||||
const value = data[i] & 0xFFFFFF;
|
const value = data[i] & 0xFFFFFF;
|
||||||
|
@ -40,7 +41,7 @@ export default class InputPacket extends Packet {
|
||||||
value: 16777214 === value ? -1 : value,
|
value: 16777214 === value ? -1 : value,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,8 @@ export default class BundlePacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
const {fromId} = require('./packets.scwp');
|
const {fromId} = require('./packets.scwp');
|
||||||
const packets = [];
|
const packets = [];
|
||||||
let caret = 0;
|
let caret = 0;
|
||||||
|
|
|
@ -22,6 +22,9 @@ export class Packet {
|
||||||
|
|
||||||
static pack(packet) {
|
static pack(packet) {
|
||||||
return this.builder.encode({
|
return this.builder.encode({
|
||||||
|
id: packet.id,
|
||||||
|
nsp: packet.nsp,
|
||||||
|
type: packet.type,
|
||||||
_id: packet.data[0],
|
_id: packet.data[0],
|
||||||
data: packet.data[1],
|
data: packet.data[1],
|
||||||
});
|
});
|
||||||
|
@ -38,12 +41,14 @@ export class Packet {
|
||||||
static get schema() {
|
static get schema() {
|
||||||
return {
|
return {
|
||||||
_id: 'uint8',
|
_id: 'uint8',
|
||||||
|
id: 'uint32',
|
||||||
|
nsp: 'string',
|
||||||
|
type: 'uint8',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const {data} = this.builder.decode(packet);
|
return this.builder.decode(packet);
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,85 @@
|
||||||
import {compose, deflate, EventEmitter, inflate} from '@avocado/core';
|
import {compose, deflate, EventEmitter, inflate} from '@avocado/core';
|
||||||
|
|
||||||
|
export const types = [
|
||||||
|
'CONNECT',
|
||||||
|
'DISCONNECT',
|
||||||
|
'EVENT',
|
||||||
|
'ACK',
|
||||||
|
'ERROR',
|
||||||
|
'BINARY_EVENT',
|
||||||
|
'BINARY_ACK'
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Packet types (see https://github.com/socketio/socket.io-protocol)
|
* Packet type `connect`.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
*/
|
*/
|
||||||
const TYPES = {
|
|
||||||
EVENT: 2,
|
export const CONNECT = 0;
|
||||||
ERROR: 4,
|
|
||||||
BINARY_EVENT: 5,
|
/**
|
||||||
};
|
* Packet type `disconnect`.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const DISCONNECT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet type `event`.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const EVENT = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet type `ack`.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const ACK = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet type `error`.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const ERROR = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet type 'binary event'
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const BINARY_EVENT = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet type `binary ack`. For acks with binary arguments.
|
||||||
|
*
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const BINARY_ACK = 6;
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Packet types (see https://github.com/socketio/socket.io-protocol)
|
||||||
|
// */
|
||||||
|
// const TYPES = {
|
||||||
|
// // EVENT: 2,
|
||||||
|
// BINARY_EVENT: 5,
|
||||||
|
// };
|
||||||
|
|
||||||
class Encoder {
|
class Encoder {
|
||||||
|
|
||||||
encode(packet, callback) {
|
encode(packet, callback) {
|
||||||
switch (packet.type) {
|
switch (packet.type) {
|
||||||
case TYPES.EVENT:
|
case BINARY_ACK:
|
||||||
case TYPES.BINARY_EVENT:
|
case BINARY_EVENT:
|
||||||
return callback([this.pack(packet)]);
|
return callback([this.pack(packet)]);
|
||||||
default:
|
default:
|
||||||
return callback([JSON.stringify(packet)]);
|
return callback([JSON.stringify(packet)]);
|
||||||
|
@ -53,11 +118,13 @@ class Decoder extends decorateDecoder(class {}) {
|
||||||
const view = new Uint8Array(packet);
|
const view = new Uint8Array(packet);
|
||||||
const packetId = view[0];
|
const packetId = view[0];
|
||||||
const {default: Packet} = fromId(packetId);
|
const {default: Packet} = fromId(packetId);
|
||||||
const data = Packet.unpack(packet);
|
const unpacked = Packet.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
this.emit('decoded', {
|
this.emit('decoded', {
|
||||||
type: TYPES.EVENT,
|
type: unpacked.type,
|
||||||
data: [packetId, data],
|
data: [packetId, data],
|
||||||
nsp: '/',
|
id: unpacked.id,
|
||||||
|
nsp: unpacked.nsp,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,10 @@ export default class SynchronizedCreatePacket extends SynchronizedPacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.spec = msgpack.decode(data.spec);
|
data.spec = msgpack.decode(data.spec);
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,14 @@ export default class LayersUpdateLayerPacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
data[i].layerPackets = BundlePacket.unpack(
|
data[i].layerPackets = BundlePacket.unpack(
|
||||||
data[i].layerPackets
|
data[i].layerPackets
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,10 @@ export default class RoomUpdateLayersPacket extends SynchronizedUpdatePacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.layersPackets = BundlePacket.unpack(data.layersPackets);
|
data.layersPackets = BundlePacket.unpack(data.layersPackets);
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,10 @@ export default class RoomUpdateSizePacket extends SynchronizedUpdatePacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.size = Vector.unpackFromUint32(data.size);
|
data.size = Vector.unpackFromUint32(data.size);
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,10 @@ export default class TilesUpdatePacket extends Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
static unpack(packet) {
|
static unpack(packet) {
|
||||||
const data = super.unpack(packet);
|
const unpacked = super.unpack(packet);
|
||||||
|
const {data} = unpacked;
|
||||||
data.position = Vector.unpackFromUint32(data.position);
|
data.position = Vector.unpackFromUint32(data.position);
|
||||||
return data;
|
return unpacked;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user