@iotize/device-client.js
Version:
IoTize Device client for Javascript
87 lines (86 loc) • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var array_helper_1 = require("../../../core/array-helper");
var util_1 = require("../../../core/util");
var buffer_helper_1 = require("../../../core/buffer/buffer-helper");
var SinglePacket;
(function (SinglePacket) {
function fillComputedField(packet) {
if (!packet.sendTime) {
packet.sendTime = new Date().getTime();
}
packet.payload.dataSize = packet.payload.data.length;
packet.outerHeader.packetLength = util_1.Util.computePadding(packet.payload.data.length + 10, 4) + packet.payload.data.length + 26;
return packet;
}
SinglePacket.fillComputedField = fillComputedField;
/**
* TODO shared constant
*/
SinglePacket.MAX_PART_SIZE = 0xC0;
// export const MAX_PART_SIZE = 0x80;
SinglePacket.PACKET_HEADER_SIZE = 22 + 4;
// export enum Type {
// ACKNOWLEDGE = 0x01,
// CIPHERED = 0x02
// }
// export enum ErrorCode {
// PACKET_TOO_SMALL = 0x01
// }
// export class PacketTooSmallError extends Error {
// code: ErrorCode;
// constructor(buffer: , singlePacket: SinglePacketModel) {
// super(`SinglePacket is too small. Size must be at least ${(SinglePacket.PACKET_HEADER_SIZE + (singlePacket.dataSize ? singlePacket.dataSize : 0))} but current length is ${buffer.length}`);
// this.code = ErrorCode.PACKET_TOO_SMALL;
// }
// }
/**
* Utility class to split a big single packet data into {@link SinglePacketPart}
*/
var Splitter = /** @class */ (function () {
/**
* @param chunkSize size (in bytes) of one chunk
* @param unitBlockSize multiple to compute real size (in bytes)
* @throws {@link #chunkSize} < {@link #unitBlockSize}
*/
function Splitter(chunkSize, unitBlockSize) {
if (unitBlockSize === void 0) { unitBlockSize = Splitter.DEFAULT_BLOCK_SIZE; }
this.chunkSize = chunkSize;
this.unitBlockSize = unitBlockSize;
// Maybe we should force chunk size to be a multiple of unitBlockSize ?
if (chunkSize < this.unitBlockSize) {
throw new Error("Chunk size must be greater than " + this.unitBlockSize + ". Given: " + chunkSize);
}
if (chunkSize % unitBlockSize != 0) {
// TODO error ?
}
}
/**
* @return an array of single packet parts
*/
Splitter.prototype.chunk = function (data) {
var _this = this;
var packets = array_helper_1.ArrayHelper.chunk(Array.from(data), this.chunkSize).map(function (value) { return Uint8Array.from(value); });
var offset = 0;
return packets.map(function (chunk) {
var padding = util_1.Util.computePadding(chunk.length, _this.chunkSize);
if (padding > 0) {
chunk = buffer_helper_1.BufferHelper.resize(chunk, chunk.length + padding);
}
var part = {
data: chunk,
len: Math.ceil(chunk.length / _this.unitBlockSize),
offset: Math.ceil(offset / _this.unitBlockSize)
};
offset += chunk.length;
return part;
});
};
/**
* TODO shared constant
*/
Splitter.DEFAULT_BLOCK_SIZE = 16;
return Splitter;
}());
SinglePacket.Splitter = Splitter;
})(SinglePacket = exports.SinglePacket || (exports.SinglePacket = {}));