@@ -7,15 +7,22 @@ var COMPRESSED_PACKET_HEADER_LENGTH = 7;
7
7
var IEEE_754_BINARY_64_PRECISION = Math . pow ( 2 , 53 ) ;
8
8
var PACKET_HEADER_LENGTH = 4 ;
9
9
var MAX_PACKET_LENGTH = Math . pow ( 2 , 24 ) - 1 ;
10
- var Buffer = require ( 'safe-buffer' ) . Buffer ;
10
+
11
+ var Buffer = require ( 'safe-buffer' ) . Buffer ;
12
+ var BufferList = require ( './BufferList' ) ;
13
+ var EventEmitter = require ( 'events' ) . EventEmitter ;
14
+ var Util = require ( 'util' ) ;
15
+ var Zlib = require ( 'zlib' ) ;
11
16
12
17
module . exports = PacketWriter ;
13
18
function PacketWriter ( ) {
14
19
this . _buffer = null ;
15
20
this . _offset = 0 ;
21
+ this . _sync = false ;
16
22
}
23
+ Util . inherits ( PacketWriter , EventEmitter ) ;
17
24
18
- PacketWriter . prototype . toBuffer = function toBuffer ( parser ) {
25
+ PacketWriter . prototype . finalize = function finalize ( parser ) {
19
26
if ( ! this . _buffer ) {
20
27
this . _buffer = Buffer . alloc ( 0 ) ;
21
28
this . _offset = 0 ;
@@ -36,6 +43,7 @@ PacketWriter.prototype.toBuffer = function toBuffer(parser) {
36
43
: MAX_PACKET_LENGTH ;
37
44
38
45
var packetNumber = parser . incrementPacketNumber ( ) ;
46
+ var packetOffset = this . _offset ;
39
47
40
48
this . writeUnsignedNumber ( 3 , packetLength ) ;
41
49
this . writeUnsignedNumber ( 1 , packetNumber ) ;
@@ -44,6 +52,10 @@ PacketWriter.prototype.toBuffer = function toBuffer(parser) {
44
52
var end = start + packetLength ;
45
53
46
54
this . writeBuffer ( buffer . slice ( start , end ) ) ;
55
+
56
+ if ( ! parser . _compressed ) {
57
+ this . emit ( 'data' , this . _buffer . slice ( packetOffset , this . _offset ) ) ;
58
+ }
47
59
}
48
60
49
61
if ( parser . _compressed ) {
@@ -52,9 +64,6 @@ PacketWriter.prototype.toBuffer = function toBuffer(parser) {
52
64
packets = Math . floor ( length / MAX_PACKET_LENGTH ) + 1 ;
53
65
size = length + ( packets * COMPRESSED_PACKET_HEADER_LENGTH ) ;
54
66
55
- this . _buffer = Buffer . allocUnsafe ( size ) ;
56
- this . _offset = 0 ;
57
-
58
67
for ( packet = 0 ; packet < packets ; packet ++ ) {
59
68
isLast = ( packet + 1 === packets ) ;
60
69
packetLength = ( isLast )
@@ -63,6 +72,9 @@ PacketWriter.prototype.toBuffer = function toBuffer(parser) {
63
72
64
73
packetNumber = parser . incrementCompressedPacketNumber ( ) ;
65
74
75
+ this . _buffer = Buffer . allocUnsafe ( packetLength + COMPRESSED_PACKET_HEADER_LENGTH ) ;
76
+ this . _offset = 0 ;
77
+
66
78
this . writeUnsignedNumber ( 3 , packetLength ) ;
67
79
this . writeUnsignedNumber ( 1 , packetNumber ) ;
68
80
this . writeUnsignedNumber ( 3 , 0 ) ;
@@ -71,8 +83,28 @@ PacketWriter.prototype.toBuffer = function toBuffer(parser) {
71
83
var end = start + packetLength ;
72
84
73
85
this . writeBuffer ( buffer . slice ( start , end ) ) ;
86
+
87
+ this . emit ( 'data' , this . _buffer ) ;
74
88
}
75
89
}
90
+ } ;
91
+
92
+ PacketWriter . prototype . toBuffer = function toBuffer ( parser ) {
93
+ var bufs = new BufferList ( ) ;
94
+
95
+ this . on ( 'data' , function ( data ) {
96
+ bufs . push ( data ) ;
97
+ } ) ;
98
+
99
+ this . _sync = true ;
100
+ this . finalize ( parser ) ;
101
+
102
+ this . _buffer = Buffer . allocUnsafe ( bufs . size ) ;
103
+ this . _offset = 0 ;
104
+
105
+ while ( bufs . size > 0 ) {
106
+ this . _offset += bufs . shift ( ) . copy ( this . _buffer , this . _offset ) ;
107
+ }
76
108
77
109
return this . _buffer ;
78
110
} ;
0 commit comments