export function SynchronizedMixin(Superclass) { return class Synchronized extends Superclass { constructor() { super(); this._idempotentPackets = []; } cleanPackets() { this._idempotentPackets = []; } packetsAreIdempotent() { return true; } packets(informed) { if (this._idempotentPackets.length > 0) { return this._idempotentPackets; } let packets = this.packetsForTick(informed); if (!packets) { return []; } packets = Array.isArray(packets) ? packets : [packets]; if (this.packetsAreIdempotent()) { this._idempotentPackets = packets; } return packets; } packetsForTick(informed) {} } }