1 | 'use strict';
|
2 |
|
3 |
|
4 | var Transform = require('readable-stream').Transform;
|
5 | var streamParser = require('stream-parser');
|
6 | var inherits = require('util').inherits;
|
7 |
|
8 |
|
9 | function ParserStream() {
|
10 | Transform.call(this, { readableObjectMode: true });
|
11 | }
|
12 |
|
13 | inherits(ParserStream, Transform);
|
14 | streamParser(ParserStream.prototype);
|
15 |
|
16 |
|
17 | exports.ParserStream = ParserStream;
|
18 |
|
19 | exports.once = function (fn) {
|
20 | var called = false;
|
21 |
|
22 | return function () {
|
23 | if (!called) {
|
24 | called = true;
|
25 | fn.apply(this, arguments);
|
26 | }
|
27 | };
|
28 | };
|
29 |
|
30 | exports.sliceEq = function (src, start, dest) {
|
31 | for (var i = start, j = 0; j < dest.length;) {
|
32 | if (src[i++] !== dest[j++]) return false;
|
33 | }
|
34 | return true;
|
35 | };
|
36 |
|
37 | exports.str2arr = function (str, format) {
|
38 | var arr = [], i = 0;
|
39 |
|
40 | if (format && format === 'hex') {
|
41 | while (i < str.length) {
|
42 | arr.push(parseInt(str.slice(i, i + 2), 16));
|
43 | i += 2;
|
44 | }
|
45 | } else {
|
46 | for (; i < str.length; i++) {
|
47 |
|
48 | arr.push(str.charCodeAt(i) & 0xFF);
|
49 | }
|
50 | }
|
51 |
|
52 | return arr;
|
53 | };
|
54 |
|
55 | exports.readUInt16LE = function (data, offset) {
|
56 | return data[offset] | (data[offset + 1] << 8);
|
57 | };
|
58 |
|
59 | exports.readUInt16BE = function (data, offset) {
|
60 | return data[offset + 1] | (data[offset] << 8);
|
61 | };
|
62 |
|
63 | exports.readUInt32LE = function (data, offset) {
|
64 | return data[offset] |
|
65 | (data[offset + 1] << 8) |
|
66 | (data[offset + 2] << 16) |
|
67 | (data[offset + 3] * 0x1000000);
|
68 | };
|
69 |
|
70 | exports.readUInt32BE = function (data, offset) {
|
71 | return data[offset + 3] |
|
72 | (data[offset + 2] << 8) |
|
73 | (data[offset + 1] << 16) |
|
74 | (data[offset] * 0x1000000);
|
75 | };
|
76 |
|
77 | exports.error = function (message, code, status) {
|
78 | var err = new Error(message);
|
79 |
|
80 | if (code) err.code = code;
|
81 | if (status) err.status = status;
|
82 |
|
83 | return err;
|
84 | };
|