1- /*!
1+ /**
22 * ExBuffer TCP中的粘包、分包问题的解决方案!
3- *
43 * @update 包结构支持TLV格式 --by xp
54 */
65
76const util = require ( 'util' ) ;
87const EventEmitter = require ( 'events' ) ;
98
10- /*
11- * 构造方法
12- * @param bufferLength 缓存区长度,默认512 byte
13- */
9+ /**
10+ * 构造方法
11+ * @param bufferLength 缓存区长度,默认512 byte
12+ */
1413var ExBuffer = function ( bufferLength ) {
1514 EventEmitter . call ( this ) ; //继承事件类
1615
@@ -24,56 +23,56 @@ var ExBuffer = function (bufferLength) {
2423 var _tagLen = 0 ;
2524 var _tag = 0 ;
2625
27- / *
28- * 指定指令Tag长是int8型即占1个字节(默认不包含tag结构)
29- */
26+ /* *
27+ * 指定指令Tag长是int8型即占1个字节(默认不包含tag结构)
28+ */
3029 this . int8Tag = function ( ) {
3130 _tagLen = 1 ;
3231 return this ;
3332 } ;
3433
35- / *
36- * 指定包长是uint32型(默认是ushort型)
37- */
34+ /* *
35+ * 指定包长是uint32型(默认是ushort型)
36+ */
3837 this . uint32Head = function ( ) {
3938 _headLen = 4 ;
4039 return this ;
4140 } ;
4241
43- / *
44- * 指定包长是ushort型(默认是ushort型)
45- */
42+ /* *
43+ * 指定包长是ushort型(默认是ushort型)
44+ */
4645 this . ushortHead = function ( ) {
4746 _headLen = 2 ;
4847 return this ;
4948 } ;
5049
51- / *
52- * 指定字节序 为Little Endian (默认:Big Endian)
53- */
50+ /* *
51+ * 指定字节序 为Little Endian (默认:Big Endian)
52+ */
5453 this . littleEndian = function ( ) {
5554 _endian = 'L' ;
5655 return this ;
5756 } ;
5857
59- / *
60- * 指定字节序 为Big Endian (默认:Big Endian)
61- */
58+ /* *
59+ * 指定字节序 为Big Endian (默认:Big Endian)
60+ */
6261 this . bigEndian = function ( ) {
6362 _endian = 'B' ;
6463 return this ;
6564 } ;
6665
67- / *
68- * 送入一端Buffer
69- */
66+ /* *
67+ * 送入一端Buffer
68+ */
7069 this . put = function ( buffer , offset , len ) {
71- if ( offset == undefined ) offset = 0 ;
72- if ( len == undefined ) len = buffer . length - offset ;
70+ if ( offset == undefined ) offset = 0 ;
71+ if ( len == undefined ) len = buffer . length - offset ;
7372 //buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
7473 //当前缓冲区已经不能满足次数数据了
75- if ( len + getLen ( ) > _buffer . length ) {
76- var ex = Math . ceil ( ( len + getLen ( ) ) / ( 1024 ) ) ; //每次扩展1kb
74+ if ( len + getLen ( ) > _buffer . length ) {
75+ var ex = Math . ceil ( ( len + getLen ( ) ) / 1024 ) ; //每次扩展1kb
7776 var tmp = new Buffer ( ex * 1024 ) ;
7877 var exlen = tmp . length - _buffer . length ;
7978 _buffer . copy ( tmp ) ;
@@ -91,11 +90,11 @@ var ExBuffer = function (bufferLength) {
9190 }
9291 _buffer = tmp ;
9392 }
94- if ( getLen ( ) == 0 ) {
93+ if ( getLen ( ) == 0 ) {
9594 _putOffset = _readOffset = 0 ;
9695 }
9796 //判断是否会冲破_buffer尾部
98- if ( ( _putOffset + len ) > _buffer . length ) {
97+ if ( ( _putOffset + len ) > _buffer . length ) {
9998 //分两次存 一部分存在数据后面 一部分存在数据前面
10099 var len1 = _buffer . length - _putOffset ;
101100 if ( len1 > 0 ) {
@@ -106,8 +105,8 @@ var ExBuffer = function (bufferLength) {
106105 var len2 = len - len1 ;
107106 buffer . copy ( _buffer , 0 , offset , offset + len2 ) ;
108107 _putOffset = len2 ;
109- } else {
110- buffer . copy ( _buffer , _putOffset , offset , offset + len ) ;
108+ } else {
109+ buffer . copy ( _buffer , _putOffset , offset , offset + len ) ;
111110 _putOffset += len ;
112111 }
113112 proc ( ) ;
@@ -120,59 +119,59 @@ var ExBuffer = function (bufferLength) {
120119 //console.log('_putOffset:'+_putOffset);
121120 //console.log(_buffer);
122121 count ++ ;
123- if ( count > 1000 ) break ; //1000次还没读完??
124- if ( _dlen == 0 ) {
125- if ( getLen ( ) < ( _headLen + _tagLen ) ) {
126- break ; //连包头都读不了
122+ if ( count > 1000 ) break ; //1000次还没读完??
123+ if ( _dlen == 0 ) {
124+ if ( getLen ( ) < ( _headLen + _tagLen ) ) {
125+ break ; //连包头都读不了
127126 }
128- if ( _buffer . length - _readOffset >= ( _headLen + _tagLen ) ) {
129- if ( _tagLen > 0 ) {
130- if ( _tagLen == 1 ) {
127+ if ( _buffer . length - _readOffset >= ( _headLen + _tagLen ) ) {
128+ if ( _tagLen > 0 ) {
129+ if ( _tagLen == 1 ) {
131130 _tag = _buffer [ 'readInt8' ] ( _readOffset ) ;
132131 } else {
133- _tag = _buffer [ 'readInt' + ( 8 * _tagLen ) + '' + _endian + 'E' ] ( _readOffset ) ;
132+ _tag = _buffer [ 'readInt' + ( 8 * _tagLen ) + '' + _endian + 'E' ] ( _readOffset ) ;
134133 }
135134 }
136135 _readOffset += _tagLen ;
137- _dlen = _buffer [ 'readUInt' + ( 8 * _headLen ) + '' + _endian + 'E' ] ( _readOffset ) ;
136+ _dlen = _buffer [ 'readUInt' + ( 8 * _headLen ) + '' + _endian + 'E' ] ( _readOffset ) ;
138137 _readOffset += _headLen ;
139138 } else { //
140139 var hbuf = new Buffer ( _headLen + _tagLen ) ;
141140 var rlen = 0 ;
142- for ( var i = 0 ; i < ( _buffer . length + _tagLen - _readOffset ) ; i ++ ) {
141+ for ( var i = 0 ; i < ( _buffer . length + _tagLen - _readOffset ) ; i ++ ) {
143142 hbuf [ i ] = _buffer [ _readOffset ++ ] ;
144143 rlen ++ ;
145144 }
146145 _readOffset = 0 ;
147- for ( var i = 0 ; i < ( _headLen + _tagLen - rlen ) ; i ++ ) {
146+ for ( var i = 0 ; i < ( _headLen + _tagLen - rlen ) ; i ++ ) {
148147 hbuf [ rlen + i ] = _buffer [ _readOffset ++ ] ;
149148 }
150- if ( _tagLen > 0 ) {
151- if ( _tagLen == 1 ) {
149+ if ( _tagLen > 0 ) {
150+ if ( _tagLen == 1 ) {
152151 _tag = hbuf [ 'readInt8' ] ( 0 ) ;
153152 } else {
154- _tag = hbuf [ 'readInt' + ( 8 * _tagLen ) + '' + _endian + 'E' ] ( 0 ) ;
153+ _tag = hbuf [ 'readInt' + ( 8 * _tagLen ) + '' + _endian + 'E' ] ( 0 ) ;
155154 }
156155 }
157- _dlen = hbuf [ 'readUInt' + ( 8 * _headLen ) + '' + _endian + 'E' ] ( _tagLen ) ;
156+ _dlen = hbuf [ 'readUInt' + ( 8 * _headLen ) + '' + _endian + 'E' ] ( _tagLen ) ;
158157 }
159158 }
160159
161160 //console.log('_dlen:'+_dlen + ',unreadLen:'+getLen());
162161
163- if ( getLen ( ) >= _dlen ) {
162+ if ( getLen ( ) >= _dlen ) {
164163 var dbuff = new Buffer ( _dlen ) ;
165- if ( _readOffset + _dlen > _buffer . length ) {
164+ if ( _readOffset + _dlen > _buffer . length ) {
166165 var len1 = _buffer . length - _readOffset ;
167166 if ( len1 > 0 ) {
168- _buffer . copy ( dbuff , 0 , _readOffset , _readOffset + len1 ) ;
167+ _buffer . copy ( dbuff , 0 , _readOffset , _readOffset + len1 ) ;
169168 }
170169
171170 _readOffset = 0 ;
172171 var len2 = _dlen - len1 ;
173- _buffer . copy ( dbuff , len1 , _readOffset , _readOffset += len2 ) ;
172+ _buffer . copy ( dbuff , len1 , _readOffset , _readOffset += len2 ) ;
174173 } else {
175- _buffer . copy ( dbuff , 0 , _readOffset , _readOffset += _dlen ) ;
174+ _buffer . copy ( dbuff , 0 , _readOffset , _readOffset += _dlen ) ;
176175 }
177176 try {
178177 _dlen = 0 ;
@@ -197,13 +196,13 @@ var ExBuffer = function (bufferLength) {
197196
198197 //获取现在的数据长度
199198 function getLen ( ) {
200- if ( _putOffset >= _readOffset ) {
199+ if ( _putOffset >= _readOffset ) {
201200 return _putOffset - _readOffset ;
202201 }
203202 return _buffer . length - _readOffset + _putOffset ;
204203 }
205204} ;
206205
207- util . inherits ( ExBuffer , EventEmitter ) ; // 继承事件类
206+ util . inherits ( ExBuffer , EventEmitter ) ; // 继承事件类
208207
209- module . exports = exports = ExBuffer ;
208+ module . exports = ExBuffer ;
0 commit comments