@@ -2,12 +2,13 @@ var events = require('events')
2
2
, util = require ( 'util' )
3
3
, protocol = require ( './protocol' )
4
4
, generate = require ( './generate' )
5
- , parse = require ( './parse' ) ;
6
-
7
- var Writable = require ( "stream" ) . Writable
5
+ , parse = require ( './parse' )
6
+ , Writable = require ( "stream" ) . Writable
7
+ , PassThrough = require ( "stream" ) . PassThrough ;
8
8
9
9
if ( ! Writable ) {
10
10
Writable = require ( "readable-stream" ) . Writable ;
11
+ PassThrough = require ( "readable-stream" ) . PassThrough ;
11
12
}
12
13
13
14
var Connection = module . exports =
@@ -23,17 +24,20 @@ function Connection(stream, server) {
23
24
} ;
24
25
util . inherits ( Connection , events . EventEmitter ) ;
25
26
26
- Connection . prototype . _setupParser = function ( ) {
27
+ Connection . prototype . _setup = function ( ) {
27
28
this . parser = this . stream . pipe ( new PacketParser ( {
28
29
connection : this
29
30
} ) ) ;
31
+
32
+ this . bufferer = new PassThrough ( ) ;
33
+ this . bufferer . pipe ( this . stream ) ;
30
34
} ;
31
35
32
36
Connection . prototype . reconnect = function ( stream ) {
33
37
var that = this ;
34
38
35
39
this . stream = stream ;
36
- this . _setupParser ( ) ;
40
+ this . _setup ( ) ;
37
41
} ;
38
42
39
43
for ( var k in protocol . types ) {
@@ -43,8 +47,8 @@ for (var k in protocol.types) {
43
47
" var p = this.generate." + v + "(arguments[0]); " +
44
48
" if (p instanceof Error) { " +
45
49
" this.emit('error', p) " +
46
- " } else { " +
47
- " this.stream.write(p ); " +
50
+ " } else if(!this.bufferer.write(p)) { " +
51
+ " this.emit('error', 'Unable to write on the stream' ); " +
48
52
" } "
49
53
" } " ;
50
54
0 commit comments