readUInt64() { const first = this.readInt32(); const second = this.readInt32(); const long = new Long(first, second, true); if (long.isNegative()) { if (long.lessThan(-9007199254740991)) return long; } else if (long.greaterThan(9007199254740991)) return long; return long.toNumber(); }
export function getNumber(n: number | Long): number { return guardIsLong(n) ? n.toNumber() : n; }
/** * Decode integer * @param genericDecoder * @param buf {Buffer} * @param flag * @returns {{value: Number, length: Number}} */ function getVarInteger (genericDecoder, buf, flag = 0) { let result = null if (flag === 1) { result = { value: Long.fromBytesLE(buf.slice(0)).toNumber(), length: 8 } } else { result = { value: buf.readInt32LE(0), length: 4 } } return result }
api.details(pkg) .then(function (d) { vc = vc || d.details.appDetails.versionCode; var basicInfo = { appCategory: d.details.appDetails.appCategory, certificateHash: d.details.appDetails.certificateHash.map(signatureToSha1), certificateSet: d.details.appDetails.certificateSet.map((x) => { return signatureToSha1(x.certificateHash); }), email: d.details.appDetails.developerEmail, minDownloadCount: Number(d.details.appDetails.numDownloads.replace(/,|\+/g, '').replace('downloads', '')), name: d.title, packageName: pkg, price: d.offer.map(function (m) { return m.formattedAmount; }), vendor: d.creator, website: d.details.appDetails.developerWebsite }; var checkoutRequired = d.offer.some(function (o) { return o.checkoutFlowRequired; }); if (checkoutRequired) { return basicInfo; } return api.downloadInfo(pkg, vc) .then(function (res) { return extend(basicInfo, { sha1: signatureToSha1(res.signature), versionCode: vc, size: Long.fromValue(res.downloadSize).toNumber() }); }); })
static decode(buf) { const isResponse = buf[1] === Constant.RESPONSE; const id = new Long( buf.readInt32BE(8), // low, high buf.readInt32BE(4) ).toNumber(); const timeout = buf.readInt32BE(12); const connLength = buf.readInt32BE(16); const appLength = buf.readInt32BE(20); const connBuf = Buffer.alloc(connLength); buf.copy(connBuf, 0, 24, 24 + connLength); const connObj = JSON.parse(connBuf); let data; if (appLength) { data = Buffer.alloc(appLength); buf.copy(data, 0, 24 + connLength, 24 + connLength + appLength); } return { id, isResponse, timeout, connObj, data, }; }
readInt64() { const first = this.readInt32(); const second = this.readInt32(); const long = new Long(first, second, false); if (long.isNegative()) { if (long.lessThan(-9007199254740991)) return long; } else if (long.greaterThan(9007199254740991)) return long; return long.toNumber(); }